Perlin noise (Ken Perlin, 1983)
JAEV Notes · October 2026 · 3 min read
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:
- 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
- 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
- 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.
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
- 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.” - “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. - 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.” - 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”. - 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. - “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”. - 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.