# Types of Noise

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.