Is it possible to make planet generators that generate fantastic 3d terrain and entire cave systems?
After years of being fascinated with procedural planets, I decided to create a generator of my own, however I'm no expert. I've done a fair amount of research on how to procedurally generate planets, but I've found no resource to help use marching cubes and 3d noise mapped to a sphere. The reason I was searching for it is because I specifically don't want to use ONLY noise heightmaps, as that constrains the player to the planet surface, leaving little room for differing environments.
Another issue is that I want to add as much complexity to generation as possible. Since this game has cryotechnology and flights take millennia, I want to tie generation to the global Time variable and have the planet generation go through phases solely depending on that and the planet/system properties. This means every step of generation needs to function at any value of age/mass/nearest-star-distance/spin/composition etc. There aren't too many variables, and many of them are just dependent on the generated variables of the star.
Things I want Time to effect: plate tectonics, erosion, heat, humidity.
Here are a few ideas I've been tossing around:
By dividing the noise by some exponent of the distance to the planet center, I imagine the noise density modeling an object that is much denser near the center. This would give an effect like rock clouds around a spherical mess. It can be adjusted to be more cavelike, with variety and biomes. The advantage of this technique is that it's built into the noise. The disadvantage is that surface generation and caves would be dependent on the same noise, making editing one effect the other.
By starting with a heightmap and subtracting the caves from the mesh, like little ants digging it out, it would be easier to separate surface generation and underground generation settings. The advantage of this technique is that the surface generation and cave generation are entirely independent of each other. The downside is more vertex and triangle work.
I'm still puzzled on how to wrap 3d noise spherically, since densities are stored in a cubical matrix, if I'm at a longitude or latitude of 45°, the noise will still be angled 45°, leaving the corners pointing straight up. How would I make the planet flat all the way around?
What are your thoughts? Is there something I've missed? An obvious easy solution to all my problems? It would be great to hear feedback and tips on how to do this!
Thanks all!