Perlin noise is a computer-generated visual effect developed by Ken Perlin, who won an Academy Award for Technical Achievement for inventing it. It can be used to simulate elements from nature, and is especially useful in circumstances where computer memory is limited.
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.
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.
When is the number of dimensions, Perlin noise has complexity , while simplex noise has complexity .
See also 
- Value noise
- Fractal landscape
- Simplex noise
- Simulation noise
- Wavelet noise
- Worley noise
- Gradient noise
- Kerman, Phillip. Macromedia Flash 8 @work: Projects and Techniques to Get the Job Done. Sams Publishing. 2006.
- Making Noise Ken Perlin talk on noise.
- Original source code of Ken Perlin's 'coherent noise function'
- Matt Zucker's Perlin noise math FAQ
- Rob Farber's tutorial demonstrating Perlin noise generation and visualization on CUDA-enabled graphics processors
- French tutorial about implementing improved Perlin Noise in C#