After having dabbled in quick'n'dirty starship design (see: https://cgcookie.com/u/hdpeterson/projects/starship-test), I thought it'd be cool to create some sort of space environment for the ship to cruise by. To that end, I'm experimenting, now, with making some simple planets.
I made these three planets with the same node groups by swapping around textures and playing with texture rotation and blending via both in-scene geometry (empties as texture coordinators are really interesting to play with) and the node editor.
The base textures were taken from real life; they include the moon, Mars, Jupiter, and Io (a moon of Jupiter). These were manipulated mostly with RGB Curves nodes and Color Ramp nodes, mixed, multiplied, and overlaid in various combinations. Essentially, each planet is made of two or three base textures, two of which combine to create the planet's colour, with a third used as a map to determine how those first two textures blend and overlap. The bump map on each planet is taken from the combination of the two planetary colour textures, turned into a greyscale image in the node editor and added to a Bump node. Final details, mostly subtle, were added via Emission and Fresnel nodes, to simulate various light effects on the planets (such as atmospheric light scattering).
The images here describe process and give hints as to the node configurations:
1. The three planets (cover image).
2. The four basic planetary textures.
3. The overall nodes arrangement.
4. The primary planetary shader group.
5. The secondary planetary shader group.
6. The bump map shader group.
7. The lava emission shader group (for the fire planet).
8. Layers that make the fire planet: the moon + mars x io (colour mask) + bump map = the basic planet.
9. Adding lava to the fire planet: the basic planet + lava emission nodes = lava planet.
10. Adding light scatter to the fire planet: the lava planet + light scattering = final render.
11. Final render of the Fire Planet.
12. Layers that make the ice planet: mars + io x mars (colour mask) + bump map = the basic planet.
13. Adding light scatter to the ice planet: the basic planet + light scattering = final render.
14. Final render of the Ice Planet.
15. Layers that make the rocky planet: io + mars x jupiter (colour mask) + bump map = the basic planet.
16. Adding light scatter to the rocky planet: the basic planet + light scattering = final render.
17. Final render of the Rocky Planet.
It's possible, of course, to use procedurally generated textures instead of Nasa images; I just didn't explore that in this project. I'm saving it for when I start experiment with making suns and stars.
What I did have fun with, however, was using empties in the middle of the spherized cube I used as my base mesh. Each empty was assigned to the initial Texture Coordinate nodes of each group as an "object" -- i.e. the empty was assigned to the object dropper in the Texture Coordinate node and the node's noodle connected from node's "object" slot to the Image Texture node's "vector" slot. This allowed me to use the empties to rotate each individual texture (primary, secondary, and colour mask) by physically manipulating the rotation of the empties in the 3D viewer, rather than adding a Mapping node (which would have worked just as well). By setting the subsequent Image Texture node for each group to Sphere in the 3rd dropdown box, the textures wrapped around the base mesh correctly, as if I had used a UV Sphere and gone through the usual unwrapping process. I thought it was kinda cool.
My next effort with this may be to try to convert some of this stuff to PBR shaders, just to see how that changes things. Or, it may be simply to move onto stars and comets, and the like. I'll see how I feel the next time I sit down to poke at it.
(Note: Node arrangement for this projects were originally inspired by, and textures provided by, Gleb Alexandrov and Aidy Burrows. I did my tweaking and variation, however.)