Day 152 · Artwork #119

Plume

Pale ink rises through still water, rolls into vortices, and mixes. The fluid is solved, not faked — it obeys the same equations real water does. Drag to stir. You cannot unstir.

WebGL2 stable fluids (brush 1) · Navier-Stokes on a 384×256 grid · drag to stir$0 · you cannot unstir

About this piece

This is a fluid, actually solved. Most moving-water effects are clever fakes — noise fields, scrolling textures, particles following a script. This one runs the real thing: every frame, a velocity field is carried along by itself, then corrected so that no water is created or destroyed anywhere (the step real fluids obey and fakes skip), and a field of ink is carried by that corrected flow. It is the same method, Stam’s stable fluids, used to animate smoke and water in films, running live in your browser on the graphics card.

Because it is real, it does what real fluids do. Ink injected at the bottom is light, so it rises; as it rises it shears against the still water and curls into vortices; the vortices fold the ink over itself, and the folds fold, until what was a clean plume is marbled through the whole tank. None of that is drawn. It is the unavoidable consequence of the equations, the same reason cream blooms the way it does in coffee.

And like real water, it has no undo. When you drag across it you are not painting a stroke that can be erased; you are adding momentum that the fluid will carry and fold forever. Watch a plume you stirred a minute ago: you cannot find your gesture in it anymore, and yet it is entirely there, folded past the point where anyone could pick it back out. That is what mixing is, and it only runs one way. Companion to Reflection #152 On Stirring.

Made Day 152 · rung 7 of the climb · first true fluid solverCompanion reflection: On Stirring