This looks really good! Implementing a physically accurate free surface fluid model (Volume-of-Fluid in lattice Boltzmann) was one of the hardest things I've ever done. Literature is full of errors and one particular paper with wrong equations did cost me months. But in the end it was all worth it and I could significantly improve the state-of-the-art method on GPU.
This has been used in games for decades. Check out PixelJunk Shooter or Fluidity for some fun examples of games with 2D water physics based on particle systems
Wow! This is very impressive! I do remember times when I did try to write code to simulate fluid using navier stokes / finite elements in University 20 years ago and it took more than year to make things stable for simple setups.
These tutorials are amazing! Compared to the traditional paper, using videos, interactive demos and code samples really improves the accessibility of physics simulations, which can be a very hard topic to get into. Thank you so much for doing these tutorials Matthias, very inspiring both from a coding and teaching perspective.
Awesome video as always! I'd love to see you cover the shallow water equations for simulating a fluid surface. Can produce some convincing results too!
Great video! Thanks a lot for all your videos! Where do I look if I want to simulate both air and water at the same time? Would you add other particles for air or would you simulate air where there aren't any particles?
I experimented with the project and added a fixed obstacle 90% of the way across the middle of the page and generated water particles above it. The problem I have is the solid obstacle leaks. While most water runs to the end of the obstacle and falls to the lower chamber. a significant fraction falls as 'rain' from the bottom of the obstacle. Is there any easy way to stop the leaks? I think the same is happening with the round obstacle as well.
Your explanations are so clear! Can you give us a clue on how to incorporate the effect of forced convection (wind) on the surface of the fluid? Thank you! 🎉🎉❤❤
Nice approach using the same grid, but it doesn't mean you have to ignore the gas cells! I just assume fluid velocity has a larger weight than gas and combine them wherever the fluid goes. Accuracy and speed is always a tradeoff, but it is possible to compromise to keep average error low and give plenty of room to make it very, very fast and highly parallel. For example, boundary condition correction can be quite heretical without sacrificing much visual fidelity, which sounds horrible, but it's a simple as something similar to signed distance field, but in a texture that can be sampled and added to position. I researched all of this and well, I'm no Carmack :D. It all depends on your objective.
Is there any way to combine this with XPBD or use some of the lessons of XPBD together with FLIP? How about combining simulations of solids and fluids? Let's say you want to simulate some boats on top of the ocean, but the boats should have some small swimming pools within themself, and some toy boats in the swimming pool. How would one simulate all of this together knowing what we know about XPBD?
Has anyone looked at non-uniform grid update? I'd be interested to see how that breaks down, or if it happens to be useful. Not in terms of scale of the simulation, but like crazy ignoring the speed of sound globally and assuming it matters more locally.
Why deal with multiple particles in a grid cell, just deal with density, pressure and momentum to get a velocity, then your grid is the resolution and pressure is the color, for air and water separation you can add gravity to each cell and pull down based on density.
can you please consider refactoring the older liquid sim tutorial, it works great but I had hard time understanding it... I would suggest separating the code into smaller functions and descriptive variable names
Definitely yes! I will do it for the 3d implementation. It is a bit trickier than using it for neighbor search because you have to handle hash collisions. Two cells must not end up in the same slot.
Great video as always. Is the k*(rho - rho_0) term a standard trick? I don't believe I've seen it before in FLIP solvers. It seems like it wouldn't actually converge in the limit to the zero divergence solution unless all local particle densities converge to the global average particle density. Would you use it like this in practice with fixed k (your code seems to use k = 1) or would you drive k to zero over multiple solver iterations so as to avoid this seemingly non-physical behavior? Thanks!
Very good question. Fighting volume loss in fluid simulation is a difficult problem. Many methods have been proposed. I should have mentioned that mine isn't the final answer. It has the problems at the boundaries for instance as sph or pbf methods have due to the fact that the density is too small there. 10 minutes are too short to discuss this field but maybe I will do a separate tutorial on this interesting subject.
@@TenMinutePhysics But isn't the lower densities at the fluid edges what creates surface tension in real-life fluids? It appears so from the simulations I have implemented over the years.
Vortices persist for a long time in reality in fluids with low viscosity. At airports, planes are forced to wait for the wingtip vortices of the prior departing plane to dissipate sufficiently before they are allowed to takeoff. When a really large plane takes off (which produces strong vortices), this delay can be on the order of minutes before it is safe for another plane to take off.
So-called "incompressible" fluids aren't truly incompressible, as they manage to compress themselves under their own weight, more the deeper the fluid pool.
“Kid codes a water simulation, parents FLIP!!”
Each of these videos is like a small present. Please keep on doing this!
This looks really good!
Implementing a physically accurate free surface fluid model (Volume-of-Fluid in lattice Boltzmann) was one of the hardest things I've ever done. Literature is full of errors and one particular paper with wrong equations did cost me months. But in the end it was all worth it and I could significantly improve the state-of-the-art method on GPU.
I'm very much hoping the one article youre talking about is not Frederico.
Once again, another excellent tutorial.
Big fan of this style of math tutorial where the goal is clarity and understanding instead of obtuse rigor.
Some game somewhere will have a really cool water level because of your amazing explanation.
This has been used in games for decades. Check out PixelJunk Shooter or Fluidity for some fun examples of games with 2D water physics based on particle systems
Really cool! Your code is elegant! By the way, happy new year and wish you an excellent new year 2023!
Thank you, to you too!
Wow! This is very impressive!
I do remember times when I did try to write code to simulate fluid using navier stokes / finite elements in University 20 years ago and it took more than year to make things stable for simple setups.
These tutorials are amazing! Compared to the traditional paper, using videos, interactive demos and code samples really improves the accessibility of physics simulations, which can be a very hard topic to get into. Thank you so much for doing these tutorials Matthias, very inspiring both from a coding and teaching perspective.
Gas, Liquid, ... This channel is FIRE!
Excellent presentation and implementation!
This channel is amazing, great videos.
Wow thank you so much for sharing this knowledge!
Awesome video as always! I'd love to see you cover the shallow water equations for simulating a fluid surface. Can produce some convincing results too!
Your work is absolutely amazing. Can't wait what you come up next
Most informative! Thank you.
Awesome simulator. Thank you very much. Greetings from Popayan, Colombia.
Thanks for sharing your knowledge. I hope one day I will be able to understand and do it by my self.
Thanks for the videos and the explanations, these are super clear and easy to follow.
Your tutorials are amazing! Please keep teaching. :)
great job mat! so very appreciate your sharing this👏
This is super interesting, thanks for filling a gap in my knowledge
Wonderful, thankyou!
Very cool. Thanks for sharing
@mitxela sent me here
I hope you're going to cover a method for ridged bodies in xpbd soon, anxiously waiting for that!
I will definitely do that 🙂
Thank you so much!
This makes me os happy!
Great video! Thanks a lot for all your videos! Where do I look if I want to simulate both air and water at the same time? Would you add other particles for air or would you simulate air where there aren't any particles?
I experimented with the project and added a fixed obstacle 90% of the way across the middle of the page and generated water particles above it. The problem I have is the solid obstacle leaks. While most water runs to the end of the obstacle and falls to the lower chamber. a significant fraction falls as 'rain' from the bottom of the obstacle. Is there any easy way to stop the leaks? I think the same is happening with the round obstacle as well.
Really great video! I must do one myself... 🙂
5:57 why is it called "(semi) implicit"? Is it not pretty explicit the formula I mean.
Half of of the formula can be computed explicitly but the other half has to be done differently (cause it unfortunatly it's notnexplicit)
Your explanations are so clear! Can you give us a clue on how to incorporate the effect of forced convection (wind) on the surface of the fluid? Thank you! 🎉🎉❤❤
Nice approach using the same grid, but it doesn't mean you have to ignore the gas cells! I just assume fluid velocity has a larger weight than gas and combine them wherever the fluid goes. Accuracy and speed is always a tradeoff, but it is possible to compromise to keep average error low and give plenty of room to make it very, very fast and highly parallel. For example, boundary condition correction can be quite heretical without sacrificing much visual fidelity, which sounds horrible, but it's a simple as something similar to signed distance field, but in a texture that can be sampled and added to position. I researched all of this and well, I'm no Carmack :D. It all depends on your objective.
Is there any way to combine this with XPBD or use some of the lessons of XPBD together with FLIP? How about combining simulations of solids and fluids? Let's say you want to simulate some boats on top of the ocean, but the boats should have some small swimming pools within themself, and some toy boats in the swimming pool. How would one simulate all of this together knowing what we know about XPBD?
This is so cool! Thanks!
Has anyone looked at non-uniform grid update? I'd be interested to see how that breaks down, or if it happens to be useful. Not in terms of scale of the simulation, but like crazy ignoring the speed of sound globally and assuming it matters more locally.
Very cool
came here from mitxela's video
Hi, could you please deal with the Maxwell Eq for interference of waves?
Can you make simulation of fish inside 2D fluid.
Have you any experience doing cool things like you do, but rendered in THREEJS?
Amazing channel!
Why deal with multiple particles in a grid cell, just deal with density, pressure and momentum to get a velocity, then your grid is the resolution and pressure is the color, for air and water separation you can add gravity to each cell and pull down based on density.
Wait a sec for the demo link to work and the hd version...
The demo link should work now
I love ur videos!
Have you studied computational physics ?
can you please consider refactoring the older liquid sim tutorial, it works great but I had hard time understanding it...
I would suggest separating the code into smaller functions and descriptive variable names
Would this technique work with the Spatial Hash grid to get it out of the rectangular simulation domain?
Definitely yes! I will do it for the 3d implementation. It is a bit trickier than using it for neighbor search because you have to handle hash collisions. Two cells must not end up in the same slot.
Great video as always. Is the k*(rho - rho_0) term a standard trick? I don't believe I've seen it before in FLIP solvers. It seems like it wouldn't actually converge in the limit to the zero divergence solution unless all local particle densities converge to the global average particle density. Would you use it like this in practice with fixed k (your code seems to use k = 1) or would you drive k to zero over multiple solver iterations so as to avoid this seemingly non-physical behavior? Thanks!
Very good question. Fighting volume loss in fluid simulation is a difficult problem. Many methods have been proposed. I should have mentioned that mine isn't the final answer. It has the problems at the boundaries for instance as sph or pbf methods have due to the fact that the density is too small there. 10 minutes are too short to discuss this field but maybe I will do a separate tutorial on this interesting subject.
@@TenMinutePhysics But isn't the lower densities at the fluid edges what creates surface tension in real-life fluids? It appears so from the simulations I have implemented over the years.
I noticed that vortices seem to persist for a very long time in the simulation, is that intended?
Vortices persist for a long time in reality in fluids with low viscosity. At airports, planes are forced to wait for the wingtip vortices of the prior departing plane to dissipate sufficiently before they are allowed to takeoff. When a really large plane takes off (which produces strong vortices), this delay can be on the order of minutes before it is safe for another plane to take off.
disabling seperate particles with PIC approximates how boiling looks like
Has nothing to do with boiling at all
this is a greaaat video
3D?
So-called "incompressible" fluids aren't truly incompressible, as they manage to compress themselves under their own weight, more the deeper the fluid pool.
please do this also in excel🙏😇
this is much difficult than it seems.
it's not explained well imo.
Send me more simulations.
confusing.
beware re: 2d fluid sims - many fluid behaviors are fundamentally different in 2d than in 3d.
That's correct. What I am saying is that the simulation method isn't.
So interesting, please sir can I have your email....