In combination with the heightmaps, which are ultimately just a means of holding and displaying information, we need a means to generate values for our heightmaps to hold. To generate these values, we utilise noise functions, specifically Simplex Noise in this example.

Simplex Noise, designed by Ken Perlin in 2001 to address the limitations of his classic noise function Perlin Noise, is a recent and widely accepted function used in all kinds of generation. The basic premise of both Simplex Noise and Perlin Noise is to combine multiple octaves of noise with differing frequencies and amplitudes to form a more natural and varied noise. The higher the octave count, the bigger each island will ultimately be.

Simplex Noise, composed of 6 octaves of Brownian noise.

Simplex Noise, composed of 7 octaves of Brownian noise.

Effectively, we are able to take coordinates(be them in 2D, 3D, 4D and so on..), supply them to the Simplex Noise function with a seed and get a 0–1 value we can use to create heightmaps.

We don’t need to know all the technicalities of how the Simplex Noise function generates the value when given coordinates and whilst the technicalities are beyond the scope of this article, you may find it interesting to look further into it.

We don’t need to know all the inner workings of Simplex Noise in order to use it(thankfully!), all we need to know is that it can take a coordinate and return a normalised value for use in whatever way we see fit.

For those of you interested in learning more about how Simplex Noise works, there’s an excellent paper on the topic of demystifying Simplex Noise by Stefan Gustavson of Linköping University — http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf