Perlin noise

From Wikipedia, the free encyclopedia
Jump to: navigation, search
10 octave Perlin noise

Problems playing this file? See media help.

Perlin noise is a computer-generated visual effect developed by Ken Perlin, who won an Academy Award for Technical Achievement for discovering the algorithm. It can be used to simulate elements from nature, and is especially useful in circumstances where computer memory is limited.


Two-dimensional slice through 3D Perlin noise.

Perlin noise is a procedural texture primitive, a type of gradient noise used by visual effects artists to increase the appearance of realism in computer graphics. The function has a pseudo-random appearance, yet all of its visual details are the same size (see image). 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 fire, smoke, or clouds – appear more natural, by imitating the controlled random appearance of textures of nature.

It is also frequently used to generate textures when memory is extremely limited, such as in demos, and is increasingly finding use in graphics processing units for real-time graphics in computer games.


Perlin noise resulted from the work of Ken Perlin, who developed it at Mathematical Applications Group, Inc. (MAGI) for Disney's computer animated sci-fi motion picture Tron (1982). In 1997, he won an Academy Award for Technical Achievement from the Academy of Motion Picture Arts and Sciences for this contribution to CGI.[1]


Perlin noise rescaled and added into itself to create fractal noise.

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

Define an n-dimensional grid. Each grid coordinate stores a gradient of unit length in n dimensions. To sample, determine which grid cell you're in, and then compute the n-dimensional vectors from the sample location to each grid coordinate of the cell. For each grid coordinate, calculate the dot products of the corresponding distance and gradient vectors. Finally, interpolate these dot products using a function that has zero first derivative (and possibly also second derivative) at both endpoints.

In 2001, Ken Perlin created simplex noise, which is similar but uses a simpler space-filling grid, alleviating some problems with Perlin "classic noise", among them, computational complexity.


When n is the number of dimensions, Perlin noise has complexity O(2^n), while simplex noise has complexity O(n^2).

See also[edit]


  1. ^ Kerman, Phillip. Macromedia Flash 8 @work: Projects and Techniques to Get the Job Done. Sams Publishing. 2006. ISBN 9780672328282.

External links[edit]