Fractional Brownian motion is a zero-mean Gaussian process BH(t), indexed by the Hurst parameter H ∈ (0, 1), fully specified by its covariance kernel
For H = ½ it reduces to ordinary Brownian motion, with independent increments. For H > ½ increments are positively correlated (persistent, smooth); for H < ½ they are negatively correlated (anti-persistent, rough). Equivalently, fBM is a power-law-weighted moving average of white noise — the Mandelbrot–Van Ness integral representation
which makes the memory explicit: the value now is an integral over the entire past of the noise, so fBM is non-Markovian. The two properties this demo is really about follow from the kernel: self-similarity and stationary increments,
Zoom into any point and rescale amplitudes by spanH: in distribution, nothing changes. There is no characteristic scale — that is what you are exploring here. (Definitions and much more in my PhD thesis, Sec. 3.2.1, and Mandelbrot & Van Ness, 1968.)
This demo renders the isotropic 2-D generalisation (a Lévy fractional Brownian field): a Gaussian random field B(x), x ∈ ℝ², with the same kernel with |·| read as Euclidean distance, hence the structure function
The field is a sum of hashed gradient-noise octaves with the fBM power law,
which reproduces the r2H structure function across the represented band (each octave gets a golden-angle rotation Rj to stay isotropic). The randomness is computed from lattice coordinates by a hash, so the infinite plane needs no storage, and the view centre is kept in arbitrary-precision fixed point — zoom and pan are unbounded, in both directions.
The field is never rescaled. Only ~14 octaves are visible between screen and pixel scale and are evaluated per pixel; every octave coarser than the view is, over the viewport, just its local slope — accumulated exactly into one gradient — and octaves finer than a pixel fade in as you zoom (anti-aliasing). So the value at a world point never drifts: zooming only reveals finer refinements, and zooming back out returns exactly the previous picture.
At deep zoom the local fluctuations shrink ∝ spanH while the offset accumulated by your journey stays. So the value is laid onto an endless looping ribbon of palettes whose band spacing rescales ∝ spanH (~2–3 bands visible at any depth) and which re-anchors at the cursor on every gesture: the point under your cursor keeps its exact color while you zoom. Panning lets the local mean random-walk (∼σ DH over D screens), sliding you along the ribbon into new palettes — the legend’s band odometer tells you where you are, in local σ units.
scroll = zoom at cursor · drag = pan · H = roughness · press i or Esc to close