Ewan Pandelus
Games Programmer
To produce biomes. climate is simplified down to two variables - temperature and rainfall. A 2D map of both temperature and rainfall was created using perlin noise.
Biomes can be classified from the temperature and rainfall at a given point on the terrain. For instance, if there is high temperature and low rainfall, a point will be classified as desert.
Points which lie do not lie in a given biome are interpolated between the two closest biomes.
​
To colour the mesh a texture was created programatically with the same width and height of the terrain, and the biome classification is passed in as a vector4 to each pixel. Each channel represents a different biome e.g. (r = desert, g = forest, b = snow, a = NA). Then this texture is sampled in the pixel shader and the result of each channel is combined with the colour of the corresponding biome.
​
Programmatically Developed Biomes Texture
​
The Poisson-disc Sampling algorithm is utilised to place objects with a random spread, these points are evaluated within the climate map to determine the object which will be placed.
Smaller objects like grass are more tightly packed together using a second pass of the disc-sampling, starting with the result of the first pass, so the points do not collide.
​
The object placing was optimised using instancing; where an instance buffer is passed to the vertex shader for each model. This buffer tells the GPU how many instances to render, and at what position - in only one draw call (per distinct model). This massively improves performance.