Study: Domain Warping
2026 · 7×7 in · 0.5 mm pen

Instead of sampling noise(x, y) directly for the flow angle, the input coordinates are first displaced by another noise call:

warpedX = x + strength · noise(x, y)
warpedY = y + strength · noise(x+offset, y+offset)
angle = noise(warpedX, warpedY) · 2π

This makes the field fold back on itself — lines that would run parallel get pulled into the same attractor. The result looks like marble veins, folded rock strata, or pooling liquid.

Sometimes a second warp layer is applied (warp the warped coordinates again), adding another level of folding and complexity.

Key variables: noiseScale (feature size), warpStrength (how violently coordinates are displaced), warpLayers (1 or 2).