top of page

Procedural Biomes 

Exploring a solution to create biomes which blend between each other.

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

Screenshot_6_edited.jpg

​

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. 

Object Placement & Instancing

test.png

Waves/Lake Shader

bottom of page