Perlin noise

It has many uses, including but not limited to: procedurally generating terrain, applying pseudo-random changes to a variable, and assisting in the creation of image textures.

The development of Perlin Noise has allowed computer graphics artists to better represent the complexity of natural phenomena in visual effects for the motion picture industry.Perlin did not apply for any patents on the algorithm, but in 2001 he was granted a patent for the use of 3D+ implementations of simplex noise for texture synthesis.

This property allows it to be readily controllable; multiple scaled copies of Perlin noise can be inserted into mathematical expressions to create a great variety of procedural textures.

Synthetic textures using Perlin noise are often used in CGI to make computer-generated visual elements – such as object surfaces, fire, smoke, or clouds – appear more natural, by imitating the controlled random appearance of textures in nature.

It is frequently used in video games to make procedurally generated terrain that looks natural.

[9] Perlin noise is most commonly implemented as a two-, three- or four-dimensional function, but can be defined for any number of dimensions.

In Ken Perlin's original implementation he used a simple hashing scheme to determine what gradient vector is associated with each grid intersection.

So for example the original implementation did this in 3D as follows: The algorithm then looks at the bottom 4 bits of the hash output to pick 1 of 12 gradient vectors for that grid point.

Two-dimensional slice through 3D Perlin noise at z = 0
A virtual landscape generated using Perlin noise
A virtual organic surface generated with Perlin noise
Perlin noise rescaled and added into itself to create fractal noise. At each step, noise frequency is doubled and amplitude is halved.
2-D Perlin noise with a contour line at zero, showing that the noise is zero at the gradient mesh intersections
A two-dimensional grid of gradient vectors
The dot product of each point with its nearest grid node gradient value. The dot product with the other three nodes in the cell is not shown.
The final interpolated result