fbm: Multi-Scale Pattern Generation
Hierarchical Noise Composition Through Octave Layering
Fractional Brownian Motion constructs complex organic patterns by accumulating multiple octaves of noise functions at varying frequencies and amplitudes. Each successive layer contributes finer detail while maintaining coherent structure across different scales.
Mathematical Foundation
FBM accumulates octaves of noise function with geometric progression parameters:
Where:
- (amplitude progression)
- (frequency progression)
- (amplitude reduction factor, persistence)
- (frequency scaling factor, lacunarity)
Parameter Configuration
Parameter | Default | Description |
---|---|---|
Octaves | 4 | Number of noise layers |
Initial Amplitude | 0.5 | Starting amplitude value |
Amplitude Scalar | 0.5 | Amplitude reduction per octave |
Scale Scalar | 2 | Frequency increase per octave |
Function Variants
Function | Input Type | Purpose |
---|---|---|
fbmVec2 | vec2 | 2D FBM using simplex noise |
fbmVec3 | vec3 | 3D FBM using simplex noise |
fbmVec3Tiled | vec3, float | Tileable 3D FBM using gradient noise |
Implementation
Live Editor
const fragment = () => { const p = uv.mul(3) const base = fbmVec2(p.add(iTime)) const warped = fbmVec2(p.add(vec2(base))) const detail = base.add(warped) return vec4(detail.mul(0.5).add(0.5), base.mul(warped), detail.pow(2), 1) }
Live Editor
const fragment = () => { const p = vec3(uv.mul(2), iTime.mul(0.1)) const layers = fbmVec3(p) const ridged = layers.abs().mul(-1).add(1) const turbulence = fbmVec3(p.mul(2)).mul(0.3) const final = ridged.add(turbulence) return vec4(vec3(final), 1) }