There are many types of noise one can use for procedural generation.

Types of noise that are good to use as-is:

  • Simplex
  • OpenSimplex(2)(S)
  • Cellular/Voronoi Noise

Other types of noise may require rotating the noise in a higher dimension (ex: for 2D noise, rotate in 3D) and then taking a slice out of it, to ensure that no square bias artifacts are visible:

  • Perlin
  • Value
  • Value-Cubic

Noise Composition

Using a single type of noise might be a bit boring so, usually, one combines multiple layers of noise through mathematical formulas.

Common ways to modify noise are:

  • Spline Mapping, wherein the noise is passed trough a non-constant curve function.
  • Ridged Noise, which is the flipped absolute value of noise (1 - abs(v)).
  • Billow Noise, which is simply the absolute value (abs(v)) of the output.
  • Flat Middle Noise; smoothstep( ℝ>0 , ℝ<1 , v).
  • Fractal Brownian Motion, which is... a bit more complicated.
  • Domain Warping: the warping of noise coordinates with more noise -- perhaps a specialized vector-outputting implementation.