If you haven't tried Animal Well, give it a shot. The whole game and its custom engine are like 35MB and it's filled with really cool visuals and physics powered by fluid equations.
So once upon a time I stumbled upon simulating fluids in gamedev and I really wanted to learn how it works. Fast forward 2 months and I decided to write down everything I learned to hopefully make it easier for others in the future!
Great job. I have spent a lot of time working on fluid simulations (I still am). Glad to see more people still mesmerized. If you’re interested, this rabbit hole goes very deep.
Before you go adding vorticity confinement, consider performing a higher-order backward advection scheme (Runge-Kutta 2nd or similar), and using a higher-order interpolation method (triangle-shaped cloud instead of bilinear).
In my implementations I use 4th order for both and vortices stick around a lot longer.
This is great! When I have some leftover time I want to try copying this implementation for 3D. I reckon I could get away with minimal modifications to support the third axis...I think...
That'll perform even worse though, hopefully my CPU can handle it or I'm gonna need a lot of leftover time to make a shader
I mean if you're writing a ray tracer and the reflected light has more intensity than the light sources, then that's not desired. You can have the same sort of thing going on with a fluid simulation.
One of the nice aspects of Stable Fluids is that you don't need to iterate the pressure correction terms to convergence. Just run a fixed number of Jacobi or Gauss-Seidel sweeps and keep performance consistent. The only drawback of this is some mass loss in areas, which for the present purposes is acceptable.
This is really cool. I love how much detail you went into explaining the setup and walking through each piece of the simulation. Definitely bookmarking this to play around with later!
If you haven't tried Animal Well, give it a shot. The whole game and its custom engine are like 35MB and it's filled with really cool visuals and physics powered by fluid equations.
https://store.steampowered.com/app/813230/ANIMAL_WELL/
The unlinked Jos Stam paper is available from his website https://www.dgp.toronto.edu/public_user/stam/reality/Researc...
So once upon a time I stumbled upon simulating fluids in gamedev and I really wanted to learn how it works. Fast forward 2 months and I decided to write down everything I learned to hopefully make it easier for others in the future!
Fluid sims are just so darn fun! Nice writeup, very accessible.
Couple of notes, I think you forgot to apply timestep when adding rocket exhaust velocity, pretty sure it should be
You need to compensate by scaling up flame_velocity_amount, I used 85, seemed about the same.Yeah it seems I missed that, adding the rocket at the end was a cherry on the top and I was so exhausted already I'm surprised it even works lol
It made it very fun to play with though :D
Great job. I have spent a lot of time working on fluid simulations (I still am). Glad to see more people still mesmerized. If you’re interested, this rabbit hole goes very deep.
excellent article, great vulgarisation and human written !
Thank you
Before you go adding vorticity confinement, consider performing a higher-order backward advection scheme (Runge-Kutta 2nd or similar), and using a higher-order interpolation method (triangle-shaped cloud instead of bilinear).
In my implementations I use 4th order for both and vortices stick around a lot longer.
This is great! When I have some leftover time I want to try copying this implementation for 3D. I reckon I could get away with minimal modifications to support the third axis...I think...
That'll perform even worse though, hopefully my CPU can handle it or I'm gonna need a lot of leftover time to make a shader
You are correct: Stable Fluids extends to 3d relatively easily.
For anyone wanting to dive further, Fluid Simulation for Computer Graphics by Robert Bridson is the definitive textbook.
Did they test if it satisfies the relevant conservation laws?
It won’t satisfy those laws. It’s also not a goal though of this post.
I mean if you're writing a ray tracer and the reflected light has more intensity than the light sources, then that's not desired. You can have the same sort of thing going on with a fluid simulation.
One of the nice aspects of Stable Fluids is that you don't need to iterate the pressure correction terms to convergence. Just run a fixed number of Jacobi or Gauss-Seidel sweeps and keep performance consistent. The only drawback of this is some mass loss in areas, which for the present purposes is acceptable.
This is really cool. I love how much detail you went into explaining the setup and walking through each piece of the simulation. Definitely bookmarking this to play around with later!
Oh don't let us pinch zoom. That would be a disaster.
Assuming you mean the site - pinch zoom & pan works for me on Windows and iOS?
well android chrome doesn't