\

Navier-Stokes fluid simulation explained with Godot game engine

94 points - last Tuesday at 10:15 PM

Source
  • nlawalker

    today at 4:00 PM

    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/

    • markstock

      today at 5:07 PM

      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.

      • genxy

        today at 3:53 PM

        The unlinked Jos Stam paper is available from his website https://www.dgp.toronto.edu/public_user/stam/reality/Researc...

        • myzek

          last Tuesday at 10:15 PM

          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!

            • magicalhippo

              last Wednesday at 12:54 AM

              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

                u[idx] += backward.x * flame_velocity_amount * falloff * delta
                v[idx] += backward.y * flame_velocity_amount * falloff * delta
              
              You need to compensate by scaling up flame_velocity_amount, I used 85, seemed about the same.

                • myzek

                  last Wednesday at 8:39 AM

                  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

                    • magicalhippo

                      last Wednesday at 10:08 PM

                      It made it very fun to play with though :D

              • brandonpelfrey

                today at 3:49 PM

                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.

                • nick__m

                  today at 2:32 PM

                  excellent article, great vulgarisation and human written !

                  Thank you

              • amarant

                today at 4:46 PM

                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

                  • markstock

                    today at 5:03 PM

                    You are correct: Stable Fluids extends to 3d relatively easily.

                • Stevvo

                  today at 3:09 PM

                  For anyone wanting to dive further, Fluid Simulation for Computer Graphics by Robert Bridson is the definitive textbook.

                  • amelius

                    today at 3:17 PM

                    Did they test if it satisfies the relevant conservation laws?

                      • brandonpelfrey

                        today at 3:48 PM

                        It won’t satisfy those laws. It’s also not a goal though of this post.

                          • amelius

                            today at 4:09 PM

                            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.

                              • markstock

                                today at 5:02 PM

                                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.

                    • frankdlc222

                      last Tuesday at 10:25 PM

                      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!

                      • analog8374

                        today at 3:02 PM

                        Oh don't let us pinch zoom. That would be a disaster.

                          • zamadatix

                            today at 3:27 PM

                            Assuming you mean the site - pinch zoom & pan works for me on Windows and iOS?

                              • analog8374

                                today at 3:34 PM

                                well android chrome doesn't

                        • nryoo

                          today at 2:32 PM

                          [flagged]