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
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!
#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!
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.
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.
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 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'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...
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.
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 :')
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.
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.
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.
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.
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
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🙃
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 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😍😍😍😍😍
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!
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?
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 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.
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.
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.
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.
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
#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
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 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
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
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
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!:)
This was really nice to watch while I tried to copy what you did. My simulation is working perfectly, thanks
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!
This is a gteat example of a man who really love what he is doing.
#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.
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.
Mad respect. It's always hard to code infront of other people. Really enjoyed this video!
Having access to vectors, objects, and multidimensional arrays makes this all so much more pleasant to work with.
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.
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
Gotta admit. You have improved a lot since your firsts vídeos. You rock
Take all my assets . You are rocking man.
I was searching these kind of videos for long time. Thanks to MikeAsh as well.
This was so much fun, I didn't expect it to work this smoothly 😂😂
I just discovered this channel and I’m already liking it
I love this channel, thank you so much for these videos. You make topics that are complex feel accessible.
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 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'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 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.
53:51 "Noone is going to make it to the end of this video"
Still here, still fascinated :)
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
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 :')
currently in my master's for computer graphics, this video was a surprisingly great starting point to fluid sims! thank you so much!
As someone who is relativly new to C++ this was very helpful and cool to watch your workflow through these concepts with the whiteboard!
Wow, that was incredible! I loved this video, mostly because fluid mechanics is my area ❤️
Made it through the final and it was awsome! Looking very much forward for the next episode of the series! #teamturbulence
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.
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.
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.
37:16 sounds like poetry
32:37 What the heck?
this guy is the best
nice edit.
Thank you for doing both the DVD challenge and this! And, made it till the end!!
You've always been a great source of accessible and practical information. Thanks for being a great teacher.
Finally!!! I have been waiting for this vid for a looong time THANKS
Thank you so much! I was expecting this for so long and it's finally here!!!! :D
i made it to the end of this video
I am gobsmacked.
Make that last "a" an "e" and you're there!
Fred
32:38 love the edit, and the transition music, so funny
I know I've looked for something like this on your channel before but couldn't find it. Glad you uploaded one haha
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
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.
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!!!
Allot of great examples, i like that they all in KISS format, just pure algorithms , no nonsense.
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
When I watched this video I realized how much I still have to learn.
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!
Busy learning MongoDB atm but a mandatory thumbs up was given.
Where are parts 2 and 3? I can't find them! 😭
OMG every time I see this video is the same as stunning as the first time I saw it.
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😍😍😍😍😍
flute intro cracked me up, thanks for your awesomeness
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!
This is the first programming video I like xD
"Just let me take a quick look at the video..." 55 minutes later: #teamturbulence
Is there a part 2? Would love to see you go through the code in detail and refactor it!
Perfect coding spirit
Watched this live and I came specifically for 54:04 :) :) :)
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?
You did it! You crazy man! You did it!
"I'm sure youtube compression is totally ruining this."
Spot on unfortunately
I really liked this video! I studied aero dynamics for a while and it’s cool to see it in play.
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 was already Overwhelmed by the details of it...and then I got the Turbulent Song.
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 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 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.
You are very talented in using processing. ❤❤❤❤❤❤U Shiffman.
Love your content brother ❤️
beautiful, love it
Damn ! That result is awesome 😁
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.
This Video: *exists*
RUclips 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.
It's a shame programming is so nicce atm, content like this deserves so much more recognition and appreciation.
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.
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
#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.
Can we do something with freeform gradients? Like adobe released a year ago.
28:00 Is this a Dr. Seuss rhyme?
Please could someone remix this?!?
Top 10 Rappers Eminem is afraid to diss
YES!!! Excellent!!! I needed to understand this fluid simulation thing for my game 👍#teamturbulence *all the way* WOOHOO!!! 😄🤣😅
For rainbow colors you could do something like R = velocityX, G = velocityY, B = density
Awesome video! Thank you!
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...
The #TeamTurbulance dance was epic! 😂
Good job, a lot of info can be found in this video :D
you're dope🔥 All hail mr.shiffman🙌🏼
#teamturbulence
I have data structures exam tomorrow. But this looks fun can't stop myself from watching it
could you change the bounds function to make the fluid wrap around the edges or would that mess things up?
Oh that would be interesting to try!
I get an error at the top with " final int N 256;" Bad identifier. What is wrong with that?
power of editing!
How can I apply gravity to it?