I have an idea on how procedural generation of convincing and realistic planets might be done, however, I still lack the skill necessary to put it into practice. My idea has a few downsides, but I believe someone more knowledgeable than me might be able to come up with a solution. One of the problems is that the planets would not be dynamic, meaning that over millions of years, they would not change whatsoever (regarding things like erosion and tectonics). Now to the idea itself.
First, we will start with the star in the middle of our solar system. The system would simply pick a random type of star (O, B, A, F, G, K, M) from an array. If I am not mistaken, this would affect quite a lot, actually - the size of the star, its “energy output” (which would affect the temperatures on the planet and the distance of the planet from the star, among others) and even the prevailing wavelength of light (which would affect the color of plants, but that’s not our main concern now).
Similarly to what we’ve done with our star, we’re also going to more or less randomly pick the planet’s diameter, the tilt of its axis and the speed of rotation a) around its own axis and b) around the star. The diameter could affect for example the size and quantity of the moons, which would affect the tidal forces. The speed of rotation around the star would affect the length of the local year, along with the tilt of its axis affecting seasons. The speed of rotation around its own axis would not only determine the length of the day (duh), but also the trade winds formation (this will be very important later).
The terrain generation would utilize several layers of perlin noise (3 I suppose). Overlaying the perlin noise like this generates more realistic shapes, which is explained here. Getting the settings of the perlin noise such as the frequency and the amplitude right would be a lengthy process regarding programming, I suppose, but definitely worth it. Another thing that might be an obstacle would be projecting the perlin noise on a sphere well and seamlessly, without an apparent “edge”. But as I said, there is definitely going to be someone more knowledgeable than me who will be able to tackle this issue.
Now that we have a height map, we are able to calculate an average temperature anywhere on the map. The lower the latitude, the higher the temperature, the higher the amplitude, the lower the temperature. Longitude does not affect the temperature. The “base value” that will be getting lower or higher depending on the place on the map is based on the sun.
Trade winds are based on the speed at which the planet spins; the faster the spins, the shorter the trade winds, therefore there is more of them. They affect the atmospheric pressure, which affects the frequency and the quantity of rain. They will be one of the factors in calculating the humidity. Also, if we wanna be lazy we can skip this part and use the Earth’s trade winds as a template.
Humidity has three main factors, one of which (the pressure) we’ve already talked about. Second factor is the distance from a body of water against the direction of the trade winds (so if the trade winds blow from east to west on that given place, we are looking for the closest body of water in the eastern direction). This is because the trade winds “carry” the humidity from above these bodies of water onto the land. Third factor that affect humidity is whether there is a rain shadow (leeward sides of mountains). Mountain ranges are a very important factor in creating dry areas, therefore deserts.
Finally, with all of the information we have gathered, we can assign a biome to each place on the map using our parameters (temperature and humidity, basically). As you can guess, a place with extremely low humidity and extremely high temperatures would be a desert, an area with low temperatures and high humidity would be a snowy taiga. You get the point.
After generating all the biomes, we can spice the terrain up even more. Where the climate is appropriate, rivers will be added by simply picking a random place somewhere relatively high and by always looking for a lower place, they will either enter the ocean or end up in a dead end creating a lake. We can also add glacial lakes where appropriate. Things like that might seem like tiny details, but will create a terrain that is convincing, realistic, but most importantly, a t m o s p h e r i c.
As I said, this system has some downsides. One of them is the fact that it disregards geological history completely. Another downside is the fact that it’s not dynamic and won’t change at all over the course of million years.
Also, as a bonus I’d like to mention is that we can use the same system we used for trade winds for oceanic currents, creating even oceanic biomes, which then can be converted into a patch map for the microbial stage. Which would be cool.
I assume the planet would generate when starting a new game, so the initial loading screen would be a bit longer, but on the other hand there would be less loading time when transitioning to 3D, as the terrain would be generated already. (Is this how it works, right?). Also, were it done later, it couldn’t be used for the patch map.
Also, a lot of people seem to like the idea of being able to slightly tweak the planet they will play on. This would be absolutely possible here, The players could chose any parameters from the Star and Planet section.
As always, I would love to hear your feedback, criticism, ideas for improvement, perhaps even a solution for the geological problem. Thank you for reading, have a good one!
Also, I’m at work which means proofreading will be done at home, so don’t be surprised if there’s like 20 edits, thank you, sorry.