Plain Perlin/simplex noise looks like smooth, isotropic static — pleasant, but
structureless. Domain warping (popularised by Inigo Quilez) feeds the
output of one noise field back in as an offset to the coordinates fed
into the next noise evaluation. Instead of sampling noise at position p,
you sample it at p + k·noise(p). Repeating this recursively bends straight
contours into swirling, marbled, flame-like or fluid-looking structures — with no
actual fluid simulation involved.
q = fbm(p) is computed and used to offset the sampling point before a second fbm evaluation.r = fbm(p + k·q) is computed from the already-warped field and fed in again, producing the classic marbled/fire look.Domain warping is the trick behind most "trippy" procedural shader art you see in demo scenes and shader galleries — the marble, fire and cloud textures are almost never hand-painted, they're one or two extra noise lookups feeding back into themselves.
A GPU-shaded 3D surface where the output of one Perlin/simplex noise field is recursively fed back in as a coordinate offset for the next, turning flat isotropic noise into swirling, marbled, flame-like or fluid-looking terrain.
Each extra warp layer samples noise at p + k·noise(p) instead of p, bending straight contours into swirls. The same scalar field displaces the mesh in 3D and colours it, so structure and texture come from one function.
Adjust warp depth to add recursive feedback layers, warp strength to control how far each layer bends the sampling coordinate, and noise scale/flow speed to zoom and animate. Switch palettes to recolour the same underlying field.
Domain warping was popularised by Inigo Quilez's shader-art tutorials and needs no fluid solver at all — the "flow" you perceive is an illusion produced entirely by feeding noise back into itself.