My biomes are a combination of temperature, rainfall and elevation and it was simply a matter of generating each of those layers and then combining them to define the biome. I broke each layer into three too, for example temperature changes linearly from 1f to 0f from the equator, and I set the value to be hot, warm or cold depending on the range, e.g. hot > 0.8f.
|Temperature (hot, warm, cold) from equator.|
(left) without & (right) with simplex noise.
|Rainfall and elevation.|
Both with a low noise scale.
I had these all set up in a neat XNA project so I could interactively tweak all the values, varying the noise scale and the different ranges. I didn't want to have dozens of different biomes, which would mean dozens of unique textures to be done, instead I broke it down to a handful that would give a nice variation for exploring.
High elevation is always alpine. Not sure if/how I'll represent hills, I might just ignore that element and treat the world as flat or mountainous. Using elevation as three layers though stops mountains from appearing in the middle of deserts and adds to the randomness nicely.
|Combining the layers results in a |
single biome for each cell.
A feature I want is reproducibility, so if you have a map that you think is particularly fun to play on you should be able to save and share a small set of seed values in order to perfectly regenerate it. I did have a different method of generating the temperature using a sum of sine waves with some random frequencies, but it wasn't reproducable. Thankfully with the noise functions, you really only need to remember the seed values and a few other numbers for each layer and the result is deterministic. I would be cool if I could compress those down into a neat little hashtag style string but I'll worry about that later.
|Higher noise scale for better biome distribution.|
Oceans break it up further.