fbmField

function fbmField
field.ts:295
fbmField(seed: Seed, x: number, y: number, z: number, options: Partial<FieldOptions>) → FieldSample

Fractional Brownian motion with its gradient, normalized to roughly [-1, 1].

With damping > 0 this is Quilez's derivative-damped fBm. The returned gradient then treats the damping factor as locally constant: differentiating it properly needs the second derivatives of every earlier octave, which the noise does not return. The error is second order in the damping and shows up as a slightly under-stated slope on the steepest ground — which is exactly where the damping has already flattened the detail that slope would come from. Undamped, the gradient is exact.

norm accumulates the raw amplitude, not the damped one, because that is the difference between attenuating detail and merely re-mixing it. Dividing by the damped sum renormalizes every sample back to full range — the amplitude the damping removed leaves the numerator and the divisor, so the octave ratios barely move and the position-varying divisor injects structure of its own. Measured as total variation along a 4,000-sample line at eight octaves, that version got rougher as the damping rose: 29.3 undamped, 30.6 at damping: 1.2, 41.7 at 24. Against the undamped norm it falls the way the name says — 29.3, 11.9, 2.5 — and "roughly [-1, 1]" becomes an upper bound rather than a target, which is what a worn landscape is.

The bias that argued for the damped divisor is real and belongs to the ridge fold rather than to the norm; ridgedField remaps per octave and the comment there carries the arithmetic.

seedSeed
Undocumented
xnumber
Undocumented
ynumber
Undocumented
znumber
Undocumented
optionsPartial<FieldOptions>
Undocumented

Generated from the source of @inertialref/procedural and its comments. Nothing on this page is written by hand.