Above are a few examples of procedurally generated worlds as viewed from above. The generation process is a pseudo random physically based one following these steps:
- Generate terrain elevation using layers of simplex noise.
- Place oceans where elevation is less than zero.
- Compute local temperature based on elevation, latitude, and distance from the ocean.
- Place ice where temperature is suitable for snowfall or where the oceans may freeze.
- Compute local precipitation based on temperature and distance from the ocean.
- Fill up vallies to form lakes. Some lakes may be discarded if their depth is less than a given threshold. Separately, also save the dataset where no lakes were discarded, this "water level" dataset is relevant to the generation of rivers because for every point in it there exists a downhill path to the ocean.
- At each point, spawn a precipitation-based amount of water and track its downhill path to the ocean using the water level dataset from the previous step. For each point, keep track of the total amount of water passing through it from all streams, let's call that the river's "intensity". Points with an intensity greater than a given threshold are marked as rivers.
- Erode elevation next to rivers proportional to the river's intensity at that point. This results in rivers that start off narrow at the source and gradually widen.
- Finally, compute local biome based on temperature and precipitation.