Devlog #2.1: Procedural Noise in Action


“Noise” might sound messy, but in game development it’s a powerful tool. Procedural noise generates patterns that are random yet structured, perfect for creating natural landscapes, textures, and worlds—letting us simulate nature’s complexity without placing every detail by hand.

Basically, noises need a seed to generate consistent and repeatable patterns, and for 2D noises (used on surface height maps or biomes) they take a float2 input, while 3D noises (used for caves, volumetric effects, etc.) take a float3 input.

The world of noise is vast, but only some types are commonly used in terrain generation. Let’s take a look at some famous noises:

🔷 White noise

This is just a collection of random point values calculated using a hash function. It has no continuity and is useful for randomness like scattered objects (flowers, trees, etc) or initial value seeds.

To implement it, you take the input position and seed, scramble them with bitwise operations and hash functions, then normalize the result into a 0–1 float.

🔷 Perlin noise / Gradient noise

A smooth, continuous noise generated using gradients at lattice points. Used for smooth terrain like rolling hills, highlands, or gentle valleys.

Unlike white noise, Perlin noise creates smooth, continuous patterns instead of pure randomness:

  • Split space into a grid.
  • At each grid corner, pick a gradient vector (pseudo-random but consistent from a seed).
  • For a point inside a grid cell, calculate how it relates to the gradients (dot products).
  • Smoothly interpolate those values using a fade curve, so the edges blend naturally.

🔷 Fractal noise / Fractal Brownian Motion (FBM)

Multi-layered Perlin noise added together at different frequencies and amplitudes. Produces complex, natural patterns. Used for sloped peaks, varied hills, and more detailed terrain features.

Combine multiple Perlin noises with different octaves to create more natural textures

🔷 Voronoi noise

Also called cell-distance noise, it divides space into regions based on the closest feature points. Produces cracked surfaces, island-like patches, or cell-based patterns.

  • Divide the space into a grid, each cell has a feature point, slightly perturbed to ensure randomness.
  • For any position, find the nearest feature point (check the distance).
  • Use that distance to determine the value, with options like edge sharpness or contrast to control the look of the cell border.

🔷 Cellular noise

Similar to Voronoi but with more control over distances and patterns. Used for broken ice, stone tiles, or organic cell-like structures.

  • Scatter feature points in space (one per grid cell, with random offset).
  • For any position, measure the distances to the closest and second closest feature points.
  • Subtract them → this highlights the “edges” between cells.
  • Adjust sharpness and contrast to control how smooth or pronounced the edges are.

🔷 Billow noise

A variation of Perlin noise where the absolute value of each octave is taken, creating soft, puffy shapes. Used for eroded mountains, clouds, or soft hills.

  • Start with layered Perlin noise (like fBM).
  • Take the absolute value of each octave, so all negative valleys become positive hills.
  • Blend the octaves with persistence (amplitude decay) and lacunarity (frequency growth).

🔷 Ridge noise

A modified Perlin noise where valleys are inverted into sharp ridges. Creates ridge mountains, sharp peaks, or sand dunes.

  • Project the input point onto a main direction and its perpendicular, creating a warped coordinate space.
  • Compress one axis to stretch the noise, forming elongated ridge-like shapes.
  • Sample Perlin noise in this space.
  • Apply a ridging function (invert and sharpen the noise curve) to highlight peaks and valleys.

Leave a comment

Log in with itch.io to leave a comment.