75 comments

[ 3.0 ms ] story [ 148 ms ] thread
Oxygen Not Included is a video game with some pretty good liquid and gas simulations along these lines.
i read the article and had exactly the same thought!

especially the part where the falling cells are being rendered as full cells made me go "waaait a minute, this would look slightly weird in exactly the same way that ONI water does when it falls". Does anyone maybe with ONI modding experience insights on wether that's really how the game implemented liquids? The release date certainly wasn't too far off.

Great writeup and a fun exercise to implement by oneself as a learning project.

My favorite 2D liquid simulator is this IOCCC2012 submission [1]... simply astonishing.

That is the source file shown at the beginning of the video... it compiles without warnings, runs a full blown fluid dynamics sim with surface tension and everything, can take itself as its own input... truly a work of art.

[1] https://youtu.be/QMYfkOtYYlg

It's got to be this one for me:

https://madebyevan.com/webgl-water/

That one is brilliant - I just realised you can change the light direction.

Another classic: http://david.li/fluid/

this is probably the best form of user interaction with simulated fluid I have seen
(comment deleted)
I was going to reply this is at least 10 years old and it was already butter smooth the first time I interacted with it (with even older hardware, from when webgl was still a novelty and not widely supported across browsers)

And indeed it's at least 11 years old according to this youtube video https://www.youtube.com/watch?v=R0O_9bp3EKQ

This one looks like a shallow water simulation, rather than a fluid simulation in the sense of handling pressure etc. Rendering is gorgeous though!
I think it’s way off. It looks surface waves propagate without dispersion — tap it and watch the caustics. Real water haves have the packet of waves and the individual peaks and valleys moving at dramatically different speeds.
It’s very impressive how well this works on mobile.
Holy hell that's cool. Thanks for sharing.
if you want waves..check out huygens principle. you'll need alot more cells though.
This is quite close to Terraria's implementation, earlier versions having the same falling water rendering 'glitch.' It does not implement pressurised water flowing upward on the other hand.
This has always annoyed me about Terraria a bit; it would have been so much cooler to have properly flowing water, with air pockets and all.
(comment deleted)
(comment deleted)
Very cool. I wonder if this, in some sense, is a numerical solution to the various differential equations that govern fluid flow (e.g. Navier–Stokes).
Key phrase: "in some sense". I mean clearly, yes, it looks fluid-ish to a layman, so in some sense it does simulate a fluid.

But as soon as you dive into a tiny bit of detail, no, this violates those equations at basically every iteration.

Not at all. Maybe if your fluid was magnetic Legos.
This is great, thanks for sharing. I'm planning on using this, or something similar, in a game I'm developing. It'll be waves of fog, but act like a fluid, and will encroach on simulated ants :)

I'm curious why the simulator never reaches a complete, steady state? It seems to settle mostly and then a few squares flicker rapidly. Is this just floating point math doing its thing, or ?

Why are 'pressurized' cells needed, vs having water not flow downwards when the cell undermeath is full? Does this help to add a slosh effect?
A falling stream generates outward flow without piling up.

Watch your faucet run into a partially full sink: there’s a small depression where the stream impacts it — while the pressurized region under the stream pushes the water out and away.

This is in contrast to honey, which will form a mound when a stream hits, because of its higher viscosity.

Consider a J-shaped tube, open on both ends. After you add some water to the taller end, the bottom loop fills up. When you add more water, what happens? The water flows downwards even though the cell underneath is full.
That makes sense. The counterintuitive part for me was a cell causing the one underneath to become pressurized and then flowing back up. You don’t usually think of water as compressible.
This must be how dwarf fortress does it
Shamelessly sharing some research I worked on a few years ago- Using ML to learn cellular automata which simulate a given system (uses neural cellular automata).

Code: https://github.com/PWhiddy/Growing-Neural-Cellular-Automata-...

Demo: https://transdimensional.xyz/projects/neural_ca/index.html

This is neat. Can you explain neural cellular automata? I’m familiar with neural networks and cellular automata. I’ve been interested in DNNs to analyze CAs but is this the other way around?
Doesn't model air pressure, so no siphon :(
This seems to be a version of a lattice gas fluid model. (Or, more precisely, lattice-boltzmann, since it allows for fractional values of fluid occupancy per cell.) I had a Santa Fe institute monograph on this back in the day, and I seem to recall that they ended up using a hexagonal grid, in order to achieve the required isotropy of fluid behaviour. Might be something to consider.
Reminds me of how liquids behave in Starbound.
Ha, yup, I enjoyed adding that to the game :) It was inspired by the system dwarf fortress used at the time extended with pressure to allow equalizing vessels.
Speaking as a cellular automation enthusiast, this is hot.

First questions on my mind : Can it do surface tension? Pressure?

Yes actually... i'm using a similar model right now to model bubbles dynamics (though my model is somewhat more complicated, and oh yes... it's in 3d)
(comment deleted)
Does this use the Lattice-Boltzmann method?
No... lattice-boltzmann discritizes the navier stokes equations. This is just a cellular automaton. It uses a small number of rules in order to determine the change of every cell. You can of course conceptualize an eulerian solver of navier stokes as a cellular automata... but this system simply uses a very small set of simple rules to get something that looks right.
(comment deleted)