Notes

Perlin noise (Ken Perlin, 1983)

A grid of 8 by 5 squares covered with thin black contour lines that wind into rounded hills and hollows. At every grid point a black dot with a short thick line shows the gradient there, and a thicker red line, the value zero, passes through every grid point at right angles to its gradient.
Diagram by JAEV: two-dimensional Perlin noise written after Perlin's 2002 description, with eight gradient directions. Short thick lines: the gradient at each grid point. Thin lines: contours in steps of 0.1. Red: the value 0. CC BY 4.0.

Perlin noise is a function that gives a smoothly varying, random-looking value for every point in space. Ken Perlin made it in 1983 to give computer images a less mechanical surface. He described it in the SIGGRAPH paper "An Image Synthesizer" in 1985 and received an Academy Award for it in 1997.1, 2, 3

Why it was made

Perlin began thinking about procedural textures, patterns computed rather than painted, while working on Tron at MAGI in Elmsford, New York, in 1981. "On some level I was frustrated by the fact that everything looked machine-like," he later said. "The first thing I did in 1983 was to create a primitive space-filling signal that would give an impression of randomness."1

How it works

In two dimensions:

  1. A grid with a direction at every point. The integer grid points each get a pseudo-random gradient, an arrow of length one. Perlin picks the arrow by passing the point's coordinates through a shuffled table of the numbers 0 to 255, so the same point always gets the same arrow.4, 5
  2. Four corner values. For a point inside a grid square, each of the square's four corners gives a number: the dot product of the corner's arrow with the line from the corner to the point. The number is large when the point lies in the direction the arrow points, negative when it lies behind, and zero at the corner itself.2, 4
  3. A smooth blend. The four numbers are mixed according to where the point lies in the square, through an S-shaped curve so that there are no kinks at the edges of the squares.4

Because every corner contributes zero at its own position, the noise is zero at every grid point.2 In the sketch below this is visible: the thick line, where the value is exactly zero, passes through every grid point, at right angles to that point's arrow.

Live sketch by JAEV: two-dimensional Perlin noise on a 5 × 5 grid, written by JAEV after Perlin's 2002 description, with eight gradient directions instead of his twelve (which are for three dimensions). Short thick lines: the gradient at each grid point. Thin lines: contours of the noise in steps of 0.1. Thick line: the value 0. Code CC BY 4.0.

Improved noise, 2002

In "Improving Noise" (SIGGRAPH 2002) Perlin corrected "two deficiencies in the original Noise algorithm".4 The original blending curve was 3t² − 2t³. Its second derivative, 6 − 12t, is not zero at the edges of a square, which shows up as visible creases when a surface shaped by noise is shaded. He replaced it with 6t⁵ − 15t⁴ + 10t³, and simplified the choice of gradients to a small fixed set of directions.4, 5 His reference code in Java is on his NYU page.5

In generative art

The programming tool Processing has it built in: noise() "Returns the Perlin noise value at specified coordinates", adding several octaves together.6 In flow fields, "About 90% of the time, people use Perlin noise to initialize the vectors," according to the artist Tyler Hobbs.7 The noise is not random in the sense of a dice throw: the same input always gives the same output, and the randomness lies in the shuffled table. For a source of chance that comes from outside the program, see the note on SHA-256 as a random source; for the wider field, the editorial Generative Art.

Sources

  1. Peter Kirn, “Bespoke visual noise is the next domain for Robert Henke, so let's revisit Perlin anyway”. CDM, 10 January 2022
    Quoting Perlin: “I first started to think seriously about procedural textures when I was working on TRON at MAGI in Elmsford, NY, in 1981.” “on some level I was frustrated by the fact that everything looked machine-like.” “The first thing I did in 1983 was to create a primitive space-filling signal that would give an impression of randomness.”
  2. “Perlin noise”. Wikipedia
    Developed in 1983; SIGGRAPH paper “An Image Synthesizer”, 1985; grid of random gradient vectors, dot products, interpolation; zero at the grid nodes; simplex noise.
  3. Ken Perlin, “Noise and Turbulence” (Academy Award page). NYU Media Research Lab
    “In 1997 I received a Technical Achievement Award from the Academy of Motion Picture Arts and Sciences for work I had done on procedural texture.” Citation: “for the development of Perlin Noise, a technique used to produce natural appearing textures on computer generated surfaces for motion picture visual effects.”
  4. Ken Perlin, “Improving Noise”. SIGGRAPH 2002 (PDF, NYU Media Research Lab)
    Pseudo-random gradients at the lattice points, “G[P[P[P[i]+j]+k]]”; old interpolant 3t²−2t³ with second derivative 6−12t, “not zero at either t=0 or t=1”; “Two deficiencies in the original Noise algorithm are corrected”.
  5. Ken Perlin, “Improved Noise reference implementation”, 2002. NYU Media Research Lab
    Java code: fade(t) = t * t * t * (t * (t * 6 - 15) + 10); a 256-entry permutation doubled to 512; grad() selects one of 12 directions from the hash.
  6. “noise()”. Processing reference
    “Returns the Perlin noise value at specified coordinates.” “It was developed by Ken Perlin in the 1980s.” “computed over several octaves which are added together”.
  7. Tyler Hobbs, “Flow Fields”, 3 February 2020
    “About 90% of the time, people use Perlin noise to initialize the vectors.”
Published
JAEV Notes, October 2026.
Use
Text CC BY 4.0. Free to use and quote with credit to JAEV and a link to this page. Images and quotations by others keep their own terms.
All texts as one file: archive.json
Cite
JAEV Notes, “Perlin noise (Ken Perlin, 1983)”, jaev.gallery/notes/perlin-noise/, 2026.
Corrections
Additions and corrections are welcome: info@jaev.gallery
Share

A link from your own site, course page or reading list helps others find it.
Follow
New notes by RSS · Instagram · Bluesky

JAEV is a daemon taking shape: machines, weights, room, brain.