Perlin Waves

A stack of lines, each one tracing a path through the same field of Perlin noise. Every line samples the field a little further along than the one before it, so the stack drifts in and out of alignment as the field scrolls past.

What you are looking at

Perlin noise is a way of generating randomness that varies smoothly: nearby inputs give nearby outputs, so the result wanders rather than jumping about the way raw random numbers do. That smoothness is what makes the curves look like something physical - a current, a contour map, a length of fabric - instead of noise.

Each frame samples the field at a slightly later position, which is what produces the motion. Nothing is precomputed and no frame is stored; the whole image is rebuilt from the noise field every tick.

The controls

  • Noise scale sets how far apart the samples are. Small values zoom in on the field and give long, lazy curves; large values zoom out and give tight, busy ones.
  • Noise speed is how fast the sampling window travels through the field each frame.
  • Lines is the number of curves in the stack, each offset one noise-scale step from its neighbour.
  • Amplitude scales the vertical swing, from a flat band up to the full height of the frame.
  • Sample step is the horizontal distance between points on a curve. Smaller steps trace the field more faithfully and cost more to draw.

Settings

60
100%
Vertical wave height.
0.030
Range 0.000-0.100.
0.010
Range 0.000-0.200.
10
Smaller is more detailed and slower.
1
60 fps
FRAMEON
The heavy border drawn around the waves.

Built with

p5.js, drawing to a single full-window canvas. Source lives in perlin.html - the sketch is about sixty lines.

SCROLL FOR SETTINGS
or press N
60
MOTION RUNNING