From Naive Noise to Perlin Noise 1/9

A naive noise field just assigns unrelated random values to nearby positions. The result is visibly speckled and blocky, which is why Perlin noise replaces raw random values with structured gradient interpolation.

Random Noise

Perlin Noise

What naive noise does

Each sample cell gets a pseudorandom scalar value with no relationship to its neighbors. The seed makes the pattern repeatable, but not smooth.

Why this is not enough

Adjacent samples jump abruptly, so the image looks like static. There is no continuity, no directional structure, and no smooth transition from one region to the next.

Where Perlin improves it

Perlin noise keeps the seedable randomness, but moves it to lattice gradients and blends locally inside each cell. The later slides build that smoother construction step by step.

Dot Products on a Finer Grid 2/9

Perlin noise first assigns a pseudorandom gradient vector to each lattice corner. Focus on one corner contribution at a time: each fine cell shows that corner's dot product over the full lattice, and hovering any sample reveals the exact gradient-and-offset-vector calculation.

Pick One Corner Contribution

Each Perlin sample is influenced by four pseudorandom corner gradient vectors. Here you isolate one of those four dot products and inspect how it changes over every lattice cell.

Selected Sample Breakdown

The teal arrow is the chosen gradient. The orange segment is the offset vector to the selected sample.

(x, y) = (0.00, 0.00)
g = (0.00, 0.00)
offset = (0.00, 0.00)
dot(g, offset) = 0.00 * 0.00 + 0.00 * 0.00 = 0.00

Hover any sample to inspect the active corner's contribution in that exact lattice cell.

Horizontal Interpolation Inside a Cell 3/9

Compare the two corner dot products that feed one horizontal interpolation. Hover any sample cell and the corresponding location is highlighted across both corner fields and the x-interpolated result.

Corner Dot Product: d00

Corner Dot Product: d10

Horizontal Blend: x1

Choose which horizontal pair to inspect. x1 blends the lower two corner dot products, while x2 blends the upper two.

x1 = 0.00 + (0.00 - 0.00) * 0.00 = 0.00

Vertical Interpolation to the Final Value 4/9

Once the two horizontal intermediate fields are built, Perlin noise blends them vertically. Hover any sample cell to track how x1 and x2 combine into the final value.

Horizontal Field x1

The lower-edge interpolation from d00 and d10.

Horizontal Field x2

The upper-edge interpolation from d01 and d11.

Final Perlin Value

The y-direction blend between x1 and x2.

(x, y) = (0.00, 0.00)
final uses x1 = 0.00 and x2 = 0.00
v = fade(y) = 0.00
final = 0.00 + (0.00 - 0.00) * 0.00 = 0.00

Perlin Noise at Different Frequencies 5/9

These fields use the same seeded gradient lattice, but the input domain is scaled by different frequencies. Higher frequency means more oscillations across the same image area.

Frequency 1

p(x, y)

Frequency 2

p(2x, 2y)

Frequency 4

p(4x, 4y)

Composited fBM With More Octaves 6/9

fBM sums multiple octaves of Perlin noise. Compare the single base octave against 3-octave and 5-octave stacks using the standard rule: frequency doubles each octave and amplitude halves each octave.

No Octaves

f(x, y) = p(x, y)

3 Octaves

f(x, y) = p(x, y) + 0.5p(2x, 2y) + 0.25p(4x, 4y)

5 Octaves

f(x, y) = p(x, y) + 0.5p(2x, 2y) + 0.25p(4x, 4y) + 0.125p(8x, 8y) + 0.0625p(16x, 16y)

Different Amplitude Decay Rules 7/9

The base octave frequencies are the same, but the amplitude weights change. Exponential decay is the common graphics default; linear decay and no decay shift much more energy into the higher frequencies.

Exponential Decay

a_i = 0.5^i

Linear Decay

a_i = 1 - i / N

No Decay

a_i = 1

Solving Seams With Wrapped Gradient Lookup 8/9

The repeated field on the left reuses a non-tileable gradient lattice, so opposite edges disagree. On the right, gradient lookup wraps at the boundary, making the repeated texture continuous across tile edges.

Seamed Repeat

Wrapped Lookup

fBM: Perlin Noise vs Sin-Based Noise 9/9

Both images use multiscale summation, but the base signal is different. Perlin-based fBM builds from coherent gradient noise, while the sinusoid-based version is still visibly more periodic even after stacking octaves.

Perlin fBM

sum 0.5^i * perlin(2^i x)

Sin-Based fBM

sum 0.5^i * sin(2^i x + phi_i)