← Iris

Visualization

Presets

Parameters

Scale 50
Octaves 4
Persistence 0.50
Lacunarity 2.00

What is noise?

Pure randomness is useless for generating natural-looking textures. If you assign a random color to every pixel, you get static — television snow. Nature does not look like that. Mountains are rough, but neighboring points on a mountainside are similar in height. Clouds are irregular, but they blur smoothly from thick to thin.

Noise functions solve this by producing randomness that is continuous — nearby inputs produce nearby outputs. The result looks random at a distance but smooth up close. Ken Perlin invented the most famous variant in 1983 while working on the film Tron, earning an Academy Award for the technique.

Gradient noise vs. value noise

Value noise assigns a random scalar to each grid point and interpolates between them. It works, but tends to look blocky — the grid structure shows through.

Gradient noise (Perlin noise) assigns a random gradient vector to each grid point instead. The noise value at any location is computed by taking dot products between these gradients and the offset vectors from the grid corners, then interpolating with a smooth fade curve. The result is smoother and more organic, with no preferred axis alignment.

The fade function is critical. Perlin’s improved version (2002) uses 6t⁵ − 15t⁴ + 10t³, which has zero first and second derivatives at the grid boundaries — eliminating visible seams.

Fractal Brownian motion (fBm)

A single layer of noise is too smooth to look natural. Real terrain has detail at every scale — continental shapes, mountain ranges, individual peaks, rocks, pebbles. Fractal Brownian motion creates this multi-scale detail by summing multiple layers of noise at different frequencies.

value = 0, amplitude = 1, frequency = 1 for each octave: value += amplitude * noise(x * frequency, y * frequency) frequency *= lacunarity // each octave is higher frequency amplitude *= persistence // each octave contributes less

Octaves control how many layers are summed — more octaves means more fine detail. Persistence controls how quickly amplitude falls off — high persistence means rough, detailed textures; low persistence means smooth, gentle shapes. Lacunarity controls the frequency ratio between octaves — typically 2.0, meaning each octave is twice the frequency of the last.

Applications

Procedural noise is everywhere in computer graphics. Terrain generation uses fBm directly as a heightmap — threshold the noise to separate ocean from land, add color ramps for elevation, and you have a plausible landscape. Cloud rendering uses 3D noise animated through the z-axis. Texture synthesis creates marble by feeding noise into a sine function, and wood grain by using noise to perturb cylindrical coordinates.

Beyond graphics: procedural noise drives particle effects, camera shake in games, procedural animation, generative music, and the infinite worlds of games like Minecraft and No Man’s Sky. The same simple idea — continuous randomness layered at multiple scales — generates an inexhaustible supply of natural-looking complexity from a handful of parameters and a seed.