I love the scene at 43:38 when the code finally works. It's obvious how run down Daniel is after trying for so long and the joy / relieve that it all comes together is just tangible. As a coder myself I can fully get that, his mini celebration is hilarious to watch, brilliant as usual
@@TheCodingTrain believe me when i tell you lots of people probably did, your videos are awesome to watch, even more so when coding with you or when you are interested in the topic. at least i watched it all. Thank you for the awesome series!
I really appreciate your video style! There are a lot of dev content creators out there that I can't really bear to watch. You keep things succinct and interesting, and without fumbling around too much even when you're not entirely sure what's going on as you port this code. Great personality, great editing! Lucky me decided that I wanted to learn fluid sim today and found you in the process. Easy follow. Thank you for what you do. :) #TeamLaminar btw
#TeamTurbulance ! And it was very useful! I had no idea how to make a fluid simulator, but after this video, I still have no idea how to make it! But I at least know how it's supposed to work!
Super! Another wonderful train ride through some intricate mathematical territory! BTW, this brings back some memories, as my dad was one of the pioneers of doing fluid dynamics on computers, for the purpose of numerical weather prediction. He dealt with the Navier-Stokes equation constantly! As well as mass & energy conservation, and others. And with sculpting code to run at maximum possible efficiency, with a multi-layer, lon-lat grid on limited computing capability. Especially on the computers of the early 1950's! Of course, for the atmosphere, you've got a compressible fluid, and you also have to model evaporation & condensation of water, varying sunlight, radiated heat from ground & water, city "heat islands," the effects of ice & snow cover, clouds with their own radiation and heat dynamics, etc. Not to mention that your whole spherical grid is rotating, so there's the Coriolis effect to deal with . . . But the essential setup is the same as what you have here, just with a spherical surface instead of a square, flat box; and a third dimension, which was typically only a handful of altitudes. Fred
I have been going through Navier-Stroke's Equations for an entire day to write a simulation on my own. And I ended up here. I am so glad I ended up here!
It would be cool to see you get into those "tricks" to get better performance, a series of videos on optimizing and using things parallelization or whatever else would be really useful.
yea it would be, and it would be cool to see it with processing java rather than processing or p5 since ik js doesn't have threading and processing idk if it has threads like the original java
Nvidia has a very nice demo of this using shaders to compute the different steps using a 3d texture. It even goes the extra mile and accounts for moving obstacles within the fluid.
I found this video while trying to find out how simulate a river. Whether or not this is what i'm looking for, I made it to the end, and learned a lot.
This video helped give me some insight into very opaque code provided by my professor last year. I have a slight correction which in my implementation improved the resulting simulation. When changing from 3d to 2d the amount of neighbours each cell has changes from 6 to 4. In lin_solve() a weighted average is taken dependent on the amount of neighbours where c represents the total weight. So calls to lin_solve() should be changed such that c corresponds with the amount of neighbours. I.e. in project() it becomes "4" and in diffuse() "1 + 4 * a". Without the adjustment lin_solve() reduces, whatever you put into it, by 33% after each iteration.
For anyone wondering you don't need to constrain the IX function, you simply need to go into the advect function and make it so that you use N-2 to get floatN. That fixed it for me at least and is what someone else suggested on Mike Ash's blog.
Oh neat I am working on my own hydro code. These particle-in-cell methods of simulating fluids are almost mystically powerful, you can go from simulating plasma physics to predicting traffic flow just by changing a few ( complicated ) terms. Thanks for the video, I hope this gets more people excited about questioning the world around them. There is a whole world moving every time you stir your coffee in the morning.
@@aravindkarthik5120 Hey Aravind, it took me a couple days to remember some of the first resources I used. Ferziger's Computational Methods for Fluid Dynamics does a great job of breaking down some of the numerical methods you can use, and I think some of the older editions had the fortran code (which is what I played with to figure out what was going on). I believe some of the classical papers listed in that book are also good resources for learning. I'm sure there are other modern equivalents of that book, but I found Ferziger referenced in many papers of interest to me and I can see why. Writing codes is fun, but if you want to do any actual DNS of fluid simulation it becomes very expensive to do so.. It quickly goes from understanding the discretization of the DE to figuring out how to manage memory when you're implementing higher-order schemes.. which is something that I found isn't talked a lot about... This is something I wish someone told me from the start. You can solve a 100x100 grid pretty simply, and it will make pretty pictures, but trying to resolve turbulence requires a lot of computational power on top of the software development component of figuring out how to implement it. So don't be discouraged if it takes some time to figure out, and trying to build something yourself from nothing will teach you to appreciate a lot of the commercial tools and all the struggles they must have put up with to deliver what they can. Good luck.
This is crazy, I am two days into this tutorial and searching for a typing error which gave me a different result than in 43:35. Finally I have found the error and watching you after 43:35 means so much more to me. (P.S: me the dumbass missed one i in the 99 th line of the source code in Functions so that it was float i0i = int(0) instead of int(i0).) If it is frustrating to get error, it is so much more to get none but get the wrong result. Anyways, you are one of my heroes.
I'm not sure how much I'll use the fluid simulation part, but the stuff about diffusion really clarified my thinking about an old hobby project i had, which I may well try to resurrect...
I love the scene at 27:04 where he says lets take a deep breath. Sometimes when facing something very tedious or large we tend to shy away. It was very helpful to relax and take a big deep breath. Thank you very much :')
Learned the basics, built a few apps, then got bored of programming. Just going through your videos again and man it sparks that passion again. Thank you. Just thinking about adding something a little extra into my portfolio website. I'm thinking about something recursive. Maybe mandelbrot? That would be pretty cool me thinks.
I quite literally started processing like last week (never been very good with Java) to use as part of a design project. Came across this channel, absolutely loving it even though I have almost 0 idea what’s going on!
It’s so satisfying for me to actually see and understand the mathematical topics that were forced to study as part of my engineering degree, reminds me that they don’t make us take maths modules because they enjoy watching us suffer🙃
oh man, the references here are an absolute goldmine. I've been trying to figure out how to do a simple version of this for a few weeks, but I couldn't make sense of multivariable calculus if I had a trillion years. So a paper for dummies is exactly what i need.
Got to give it to you this was a great way of procrastinating from doing coursework, I'm supposed to be writing test plans and stuff for a program i've written. But design documentation is boring this was way more time. Don't think i've ever left a comment or made it live but long time sub as i find your videos a good way to learn some stuff when i'm supposed to be doing other things.
It is about 7 hours between our times but you are amazing and make everything more easy and beautiful ,thanks Dan for every tutorial, I search for your videos everyday and wait for them and download them ,even my kids loves your tutorials😍😍😍😍😍
old video, but I thought I might comment lol. Its crazy to think about how far AI and GPT-4o has brought us. I am using GPT to follow along with this in python. The ability to say 'create a diffusion method, based on the pre-existing conditions' and it output it, perfectly, is absolutely mind blowing. I am a CS undergrad, who plans on going into Quantum Engineering, things like this make my goals seem a lot more achievable LOL.
As long as you COULD implement it without the help of AI if you ever needed to, they yeah, it is an amazing tool to make small snippets of reusable modular code
no? this isnt the type of thing video compression struggles with, its actually the opposite. you should know this, your literally watching a video on coding.
If you really want to see some incredible fluid dynamics, drop some vitamin c powder into brown iodine. The color almost magically seems to disappear. Absolutely love this channel!
Very nice !! I actually had to optimize such a simulator last year. It was mostly about messing around with the linear solver, because it takes the longest to compute
i love this tutorials even if my basic programming skills are rusty.well explained.I wish you could do 3d fluid solid interaction in real time.had to subscribe immediately
I liked the dance of turbulence you did at the end of your video so much; I suddenly found myself dancing it in front of a mirror. I would be very happy if you'd try the Lagrangian particle approach as well, as I believe what you've created was an Eulerian grid-based simulation?
This is great. I've been trying to write my own fluid simulators in P3 but they aren't exactly intuitive or easy to get started with. I would love to see a video on the Lily Pad project.
FYI: `struct FluidCube` is C not C++. The typedef gives it away, which is not required in C++. Also the calloc etc used below that for memory initialization is C.
12:35: It's not quite that simple. That pointer points not to _all of the data,_ but just the _first element._ Then that first element intern has a pointer which points to the next one, which intern points to the third one, and so on. Until the last element, which just points to NULL. So it's a linked-list type structure.
I am not sure what the original C code uses but I am pretty sure it's an array. What you are describing is a linked list. For an array the pointer just points to the first element of the array. The second element is located right after it in memory so you don't need a pointer to tell you about the location of the second element.
I saw a video on slime simulation and think of you and your digital art. Not sure if you still do these videos, but it would be cool to see it on your channel some day.
#TeamTurbulence Some ideas for a potential part 2 of the video: (1) how to change the bound function to fit a more complex shape (vector) with obstacles (islands?); (2) how two fluid sources can mix and accumulate when they meet; (3) how to add "current" to the whole simulation.
I like the result! ❤️ The problem with the noise function is that it doesn't fill all the range [0,1). Maybe doing TWO_PI*2 will help covering the majority of the angles...
I love the scene at 43:38 when the code finally works. It's obvious how run down Daniel is after trying for so long and the joy / relieve that it all comes together is just tangible. As a coder myself I can fully get that, his mini celebration is hilarious to watch, brilliant as usual
Thank you, I was really wondering if anyone would actually make it this far into the video to see!
@@TheCodingTrain believe me when i tell you lots of people probably did, your videos are awesome to watch, even more so when coding with you or when you are interested in the topic. at least i watched it all. Thank you for the awesome series!
This guy always cracks me up. His enthusiasm is great.
No ... way! This is exactly what I was trying for the past 5 years!
:-( Did you spend most of your time researching fluid dynamics?
@@sethatkins3731 Well no, I saw that it was too much to understand and I moved on :D
@@kim15742 if you understand copy paste you understand everything :D
I spent quite some time trying this for a videogame. I failed miserably.
Me too
I have a C++ exam in 30min. I should probably watch this later haha.
theacp127 Good luck!
Good luck
How did you think you did?
@@justafighter1346 Pretty good. The professor makes a really fairly comprehensive review sheet so I as prepared for what was on the exam.
@@coolbrotherf127 always improve
This is the best channel ever. I never thought it would be so much fun watching someone else write code in real time, but you make it fun.
I really appreciate your video style! There are a lot of dev content creators out there that I can't really bear to watch. You keep things succinct and interesting, and without fumbling around too much even when you're not entirely sure what's going on as you port this code. Great personality, great editing! Lucky me decided that I wanted to learn fluid sim today and found you in the process. Easy follow. Thank you for what you do. :)
#TeamLaminar btw
#TeamTurbulance !
And it was very useful! I had no idea how to make a fluid simulator, but after this video, I still have no idea how to make it! But I at least know how it's supposed to work!
Ditto.
They got us in the first half not gonna lie.
This was really nice to watch while I tried to copy what you did. My simulation is working perfectly, thanks
Love how you explain the coding! Even though I am a beginner and am only able to code in C++, you are doing a fantastic job. Keep it on!:)
Super! Another wonderful train ride through some intricate mathematical territory!
BTW, this brings back some memories, as my dad was one of the pioneers of doing fluid dynamics on computers, for the purpose of numerical weather prediction.
He dealt with the Navier-Stokes equation constantly! As well as mass & energy conservation, and others. And with sculpting code to run at maximum possible efficiency, with a multi-layer, lon-lat grid on limited computing capability. Especially on the computers of the early 1950's!
Of course, for the atmosphere, you've got a compressible fluid, and you also have to model evaporation & condensation of water, varying sunlight, radiated heat from ground & water, city "heat islands," the effects of ice & snow cover, clouds with their own radiation and heat dynamics, etc.
Not to mention that your whole spherical grid is rotating, so there's the Coriolis effect to deal with . . .
But the essential setup is the same as what you have here, just with a spherical surface instead of a square, flat box; and a third dimension, which was typically only a handful of altitudes.
Fred
This is a gteat example of a man who really love what he is doing.
I have been going through Navier-Stroke's Equations for an entire day to write a simulation on my own. And I ended up here. I am so glad I ended up here!
Mad respect. It's always hard to code infront of other people. Really enjoyed this video!
It would be cool to see you get into those "tricks" to get better performance, a series of videos on optimizing and using things parallelization or whatever else would be really useful.
Agree,. I would love to watch that too.
yea it would be, and it would be cool to see it with processing java rather than processing or p5 since ik js doesn't have threading and processing idk if it has threads like the original java
Nvidia has a very nice demo of this using shaders to compute the different steps using a 3d texture. It even goes the extra mile and accounts for moving obstacles within the fluid.
Having access to vectors, objects, and multidimensional arrays makes this all so much more pleasant to work with.
HAVE BEEN WAITING FOR THIS LIKE FOREVER!!! THANK YOU DAN
I found this video while trying to find out how simulate a river. Whether or not this is what i'm looking for, I made it to the end, and learned a lot.
This video helped give me some insight into very opaque code provided by my professor last year. I have a slight correction which in my implementation improved the resulting simulation.
When changing from 3d to 2d the amount of neighbours each cell has changes from 6 to 4. In lin_solve() a weighted average is taken dependent on the amount of neighbours where c represents the total weight. So calls to lin_solve() should be changed such that c corresponds with the amount of neighbours. I.e. in project() it becomes "4" and in diffuse() "1 + 4 * a". Without the adjustment lin_solve() reduces, whatever you put into it, by 33% after each iteration.
I love this channel, thank you so much for these videos. You make topics that are complex feel accessible.
For anyone wondering you don't need to constrain the IX function, you simply need to go into the advect function and make it so that you use N-2 to get floatN. That fixed it for me at least and is what someone else suggested on Mike Ash's blog.
Ive been pulling my hair out just because of segmentation fault. You helped me. Thanks
Oh neat I am working on my own hydro code. These particle-in-cell methods of simulating fluids are almost mystically powerful, you can go from simulating plasma physics to predicting traffic flow just by changing a few ( complicated ) terms. Thanks for the video, I hope this gets more people excited about questioning the world around them. There is a whole world moving every time you stir your coffee in the morning.
Hey Chris, being a beginner, may I know as to where I could start to learn about fluid simulation in depth?
@@aravindkarthik5120 Hey Aravind, it took me a couple days to remember some of the first resources I used. Ferziger's Computational Methods for Fluid Dynamics does a great job of breaking down some of the numerical methods you can use, and I think some of the older editions had the fortran code (which is what I played with to figure out what was going on). I believe some of the classical papers listed in that book are also good resources for learning. I'm sure there are other modern equivalents of that book, but I found Ferziger referenced in many papers of interest to me and I can see why.
Writing codes is fun, but if you want to do any actual DNS of fluid simulation it becomes very expensive to do so.. It quickly goes from understanding the discretization of the DE to figuring out how to manage memory when you're implementing higher-order schemes.. which is something that I found isn't talked a lot about... This is something I wish someone told me from the start. You can solve a 100x100 grid pretty simply, and it will make pretty pictures, but trying to resolve turbulence requires a lot of computational power on top of the software development component of figuring out how to implement it. So don't be discouraged if it takes some time to figure out, and trying to build something yourself from nothing will teach you to appreciate a lot of the commercial tools and all the struggles they must have put up with to deliver what they can. Good luck.
This is crazy, I am two days into this tutorial and searching for a typing error which gave me a different result than in 43:35. Finally I have found the error and watching you after 43:35 means so much more to me. (P.S: me the dumbass missed one i in the 99 th line of the source code in Functions so that it was float i0i = int(0) instead of int(i0).) If it is frustrating to get error, it is so much more to get none but get the wrong result. Anyways, you are one of my heroes.
i found this great Chanel a few days ago by googling 132 to test my Internet connection... i have worked with processing before so i was lucky
Hah, that's amazing.
I'm not sure how much I'll use the fluid simulation part, but the stuff about diffusion really clarified my thinking about an old hobby project i had, which I may well try to resurrect...
At 23:11 the function only takes into account the cells above, below, left, and right of the cell we're interested in. Thank you for the great video
This was so much fun, I didn't expect it to work this smoothly 😂😂
Take all my assets . You are rocking man.
I was searching these kind of videos for long time. Thanks to MikeAsh as well.
Gotta admit. You have improved a lot since your firsts vídeos. You rock
Made it through the final and it was awsome! Looking very much forward for the next episode of the series! #teamturbulence
This is great because for the past few months I've been taking the code challenge videos and porting them to c++ and now you're porting c++ to java
32:37 What the heck?
this guy is the best
nice edit.
currently in my master's for computer graphics, this video was a surprisingly great starting point to fluid sims! thank you so much!
I just discovered this channel and I’m already liking it
I love the scene at 27:04 where he says lets take a deep breath. Sometimes when facing something very tedious or large we tend to shy away. It was very helpful to relax and take a big deep breath. Thank you very much :')
53:51 "Noone is going to make it to the end of this video"
Still here, still fascinated :)
As someone who is relativly new to C++ this was very helpful and cool to watch your workflow through these concepts with the whiteboard!
Thank you for doing both the DVD challenge and this! And, made it till the end!!
i made it to the end of this video
I am gobsmacked.
Make that last "a" an "e" and you're there!
Fred
Learned the basics, built a few apps, then got bored of programming. Just going through your videos again and man it sparks that passion again. Thank you.
Just thinking about adding something a little extra into my portfolio website. I'm thinking about something recursive. Maybe mandelbrot? That would be pretty cool me thinks.
I quite literally started processing like last week (never been very good with Java) to use as part of a design project. Came across this channel, absolutely loving it even though I have almost 0 idea what’s going on!
When I watched this video I realized how much I still have to learn.
You've always been a great source of accessible and practical information. Thanks for being a great teacher.
37:16 sounds like poetry
It’s so satisfying for me to actually see and understand the mathematical topics that were forced to study as part of my engineering degree, reminds me that they don’t make us take maths modules because they enjoy watching us suffer🙃
yea maths/phys can be interesting, esp when paired with visual programming
Wow, that was incredible! I loved this video, mostly because fluid mechanics is my area ❤️
Thank you so much! I was expecting this for so long and it's finally here!!!! :D
oh man, the references here are an absolute goldmine. I've been trying to figure out how to do a simple version of this for a few weeks, but I couldn't make sense of multivariable calculus if I had a trillion years. So a paper for dummies is exactly what i need.
"Just let me take a quick look at the video..." 55 minutes later: #teamturbulence
Allot of great examples, i like that they all in KISS format, just pure algorithms , no nonsense.
Got to give it to you this was a great way of procrastinating from doing coursework, I'm supposed to be writing test plans and stuff for a program i've written. But design documentation is boring this was way more time. Don't think i've ever left a comment or made it live but long time sub as i find your videos a good way to learn some stuff when i'm supposed to be doing other things.
Finally!!! I have been waiting for this vid for a looong time THANKS
32:38 love the edit, and the transition music, so funny
It is about 7 hours between our times but you are amazing and make everything more easy and beautiful ,thanks Dan for every tutorial, I search for your videos everyday and wait for them and download them ,even my kids loves your tutorials😍😍😍😍😍
I know I've looked for something like this on your channel before but couldn't find it. Glad you uploaded one haha
old video, but I thought I might comment lol. Its crazy to think about how far AI and GPT-4o has brought us. I am using GPT to follow along with this in python. The ability to say 'create a diffusion method, based on the pre-existing conditions' and it output it, perfectly, is absolutely mind blowing. I am a CS undergrad, who plans on going into Quantum Engineering, things like this make my goals seem a lot more achievable LOL.
As long as you COULD implement it without the help of AI if you ever needed to, they yeah, it is an amazing tool to make small snippets of reusable modular code
he liked!!!
Busy learning MongoDB atm but a mandatory thumbs up was given.
Is there a part 2? Would love to see you go through the code in detail and refactor it!
flute intro cracked me up, thanks for your awesomeness
"I'm sure youtube compression is totally ruining this."
Spot on unfortunately
OMG every time I see this video is the same as stunning as the first time I saw it.
Watched this live and I came specifically for 54:04 :) :) :)
I was already Overwhelmed by the details of it...and then I got the Turbulent Song.
Where are parts 2 and 3? I can't find them! 😭
I don’t know if you still look at this thread, but at 25:32 I was SCREAMING when at line 97 the singular k value just went unrecognized! 😂😂
I really liked this video! I studied aero dynamics for a while and it’s cool to see it in play.
This Video: *exists*
UA-cam compression: *dies*
no? this isnt the type of thing video compression struggles with, its actually the opposite. you should know this, your literally watching a video on coding.
This is the first programming video I like xD
If you really want to see some incredible fluid dynamics, drop some vitamin c powder into brown iodine. The color almost magically seems to disappear. Absolutely love this channel!
Very nice !!
I actually had to optimize such a simulator last year. It was mostly about messing around with the linear solver, because it takes the longest to compute
You are very talented in using processing. ❤❤❤❤❤❤U Shiffman.
Made it to the end. I think I learned something: that i'm not intelligent. But I loved this and will play with the code either way.
TeamTurbulance!!!!
It was very fun on stream
i love this tutorials even if my basic programming skills are rusty.well explained.I wish you could do 3d fluid solid interaction in real time.had to subscribe immediately
Damn ! That result is awesome 😁
Perfect coding spirit
I liked the dance of turbulence you did at the end of your video so much; I suddenly found myself dancing it in front of a mirror. I would be very happy if you'd try the Lagrangian particle approach as well, as I believe what you've created was an Eulerian grid-based simulation?
It's a shame programming is so nicce atm, content like this deserves so much more recognition and appreciation.
This is great. I've been trying to write my own fluid simulators in P3 but they aren't exactly intuitive or easy to get started with. I would love to see a video on the Lily Pad project.
FYI: `struct FluidCube` is C not C++. The typedef gives it away, which is not required in C++. Also the calloc etc used below that for memory initialization is C.
YES!!! Excellent!!! I needed to understand this fluid simulation thing for my game 👍#teamturbulence *all the way* WOOHOO!!! 😄🤣😅
I have data structures exam tomorrow. But this looks fun can't stop myself from watching it
The “Lattsman Boltzmann” at 1:02 😂😂😂
12:35: It's not quite that simple. That pointer points not to _all of the data,_ but just the _first element._ Then that first element intern has a pointer which points to the next one, which intern points to the third one, and so on. Until the last element, which just points to NULL. So it's a linked-list type structure.
I am not sure what the original C code uses but I am pretty sure it's an array. What you are describing is a linked list. For an array the pointer just points to the first element of the array. The second element is located right after it in memory so you don't need a pointer to tell you about the location of the second element.
Love your content brother ❤️
I saw a video on slime simulation and think of you and your digital art. Not sure if you still do these videos, but it would be cool to see it on your channel some day.
best education you can find on internet
Anyone else doesnt know how to code at all but still loves these videos?
Good job, a lot of info can be found in this video :D
For rainbow colors you could do something like R = velocityX, G = velocityY, B = density
you're dope🔥 All hail mr.shiffman🙌🏼
#TeamTurbulence Some ideas for a potential part 2 of the video: (1) how to change the bound function to fit a more complex shape (vector) with obstacles (islands?); (2) how two fluid sources can mix and accumulate when they meet; (3) how to add "current" to the whole simulation.
That final dance is basically me everytime I fix a bug.
I like the result! ❤️
The problem with the noise function is that it doesn't fill all the range [0,1).
Maybe doing TWO_PI*2 will help covering the majority of the angles...
You did it! You crazy man! You did it!
42:05 Sets diffusion to zero
@
Didn't I say it'd diffuse anyway?
The #TeamTurbulance dance was epic! 😂
Moral: You can achieve anything if you just don't sit until its done....
hi thank you very much it's difficult but you made it easy that's the genius work go ahead for the best have a nice day
2:45 the compression died because of all the tiny arrows