Coding Challenge

Поделиться
HTML-код
  • Опубликовано: 3 авг 2024
  • In this video, I follow Mike Ash’s guide to Fluid Simulation and port Jos Stam’s "Real-Time Fluid Dynamics for Games" algorithm and code in Processing (Java). Code: thecodingtrain.com/challenges...
    🕹️ p5.js Web Editor Sketch: editor.p5js.org/codingtrain/s...
    🎥 Previous video: • Coding Challenge 131: ...
    🎥 Next video: • Coding Challenge #133:...
    🎥 All videos: • Coding Challenges
    References:
    💾 GitHub Issue: github.com/CodingTrain/Rainbo...
    💻 Real-Time Fluid Dynamics for Games: www.dgp.toronto.edu/people/sta...
    💻 MSAFluid: www.memo.tv/msafluid/
    💻 Lily Pad: github.com/weymouth/lily-pad
    📓 Fluid Simulation for Dummies: mikeash.com/pyblog/fluid-simu...
    Videos:
    🎥 Why Laminar Flow is AWESOME: • Why Laminar Flow is AW...
    🎥 What DO we know about turbulence?: • Why 5/3 is a fundament...
    🚂 Perlin Noise: • Perlin Noise in p5.js
    🔴 Livestream Archive: • Coding Train Live 167...
    Related Coding Challenges:
    🚂 #24 Perlin Noise Flow Field: • Coding Challenge #24: ...
    🚂 #102 2D Water Ripple: • Coding Challenge 102: ...
    🚂 #103 Fire Effect: • Coding Challenge #103:...
    Timestamps:
    0:00 Introduction
    0:59 Topic suggestion from deardanielxd
    3:30 Mike Ash's "Fluid For Dummies" thesis
    6:42 Incompressible fluid
    8:45 Velocity field
    9:12 Density of dye
    11:14 Port the code to Processing
    15:47 addDensity() function
    19:34 Diffuse
    23:35 Project
    25:52 Advect
    30:17 Set bounds
    33:05 Mirror velocity in edge layers
    36:19 Time set function
    38:58 Render the density
    44:10 Add fade
    46:40 Add perlin noise
    48:00 Add Pvector
    50:35 Recap and next steps
    52:22 Adjustments to code
    Editing by Mathieu Blanchette
    Animations by Jason Heglund
    Music from Epidemic Sound
    🚂 Website: thecodingtrain.com/
    👾 Share Your Creation! thecodingtrain.com/guides/pas...
    🚩 Suggest Topics: github.com/CodingTrain/Sugges...
    💡 GitHub: github.com/CodingTrain
    💬 Discord: / discord
    💖 Membership: ruclips.net/user/thecodingtrainjoin
    🛒 Store: standard.tv/codingtrain
    🖋️ Twitter: / thecodingtrain
    📸 Instagram: / the.coding.train
    🎥 Coding Challenges: • Coding Challenges
    🎥 Intro to Programming: • Start learning here!
    🔗 p5.js: p5js.org
    🔗 p5.js Web Editor: editor.p5js.org/
    🔗 Processing: processing.org
    📄 Code of Conduct: github.com/CodingTrain/Code-o...
    This description was auto-generated. If you see a problem, please open an issue: github.com/CodingTrain/thecod...
    #fluidsimulation #turbulentfluidflow #processing

Комментарии • 441

  • @coolbrotherf127
    @coolbrotherf127 5 лет назад +955

    I have a C++ exam in 30min. I should probably watch this later haha.

    • @l0m-dev
      @l0m-dev 5 лет назад +18

      theacp127 Good luck!

    • @aidanhind4620
      @aidanhind4620 5 лет назад +10

      Good luck

    • @justafighter1346
      @justafighter1346 5 лет назад +4

      How did you think you did?

    • @coolbrotherf127
      @coolbrotherf127 5 лет назад +28

      @@justafighter1346 Pretty good. The professor makes a really fairly comprehensive review sheet so I as prepared for what was on the exam.

    • @justafighter1346
      @justafighter1346 5 лет назад +3

      @@coolbrotherf127 always improve

  • @tlace0392
    @tlace0392 20 дней назад +4

    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.

  • @DerSpielerMabuse
    @DerSpielerMabuse 5 лет назад +153

    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
      @TheCodingTrain  5 лет назад +21

      Thank you, I was really wondering if anyone would actually make it this far into the video to see!

    • @scuidthesquid
      @scuidthesquid 2 года назад +11

      @@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!

  • @bitterbob30
    @bitterbob30 2 года назад +13

    This guy always cracks me up. His enthusiasm is great.

  • @kim15742
    @kim15742 5 лет назад +122

    No ... way! This is exactly what I was trying for the past 5 years!

    • @sethatkins3731
      @sethatkins3731 5 лет назад +3

      :-( Did you spend most of your time researching fluid dynamics?

    • @kim15742
      @kim15742 5 лет назад +20

      @@sethatkins3731 Well no, I saw that it was too much to understand and I moved on :D

    • @osimmac
      @osimmac 5 лет назад +12

      @@kim15742 if you understand copy paste you understand everything :D

    • @haaly7245
      @haaly7245 5 лет назад

      I spent quite some time trying this for a videogame. I failed miserably.

    • @TokiSamurai
      @TokiSamurai 3 года назад

      Me too

  • @FractalWoman
    @FractalWoman 4 года назад +5

    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.

  • @laurenz5451
    @laurenz5451 5 лет назад +9

    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!:)

  • @Gamekid321
    @Gamekid321 2 года назад +8

    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

  • @InferiorPotassium93
    @InferiorPotassium93 4 года назад +4

    I love this channel, thank you so much for these videos. You make topics that are complex feel accessible.

  • @glitchedjson4042
    @glitchedjson4042 5 лет назад +189

    #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!

  • @OzieCargile
    @OzieCargile 3 года назад

    You've always been a great source of accessible and practical information. Thanks for being a great teacher.

  • @TheDetonadoBR
    @TheDetonadoBR 5 лет назад +8

    This was really nice to watch while I tried to copy what you did. My simulation is working perfectly, thanks

  • @rozmowastudio
    @rozmowastudio 5 лет назад +3

    HAVE BEEN WAITING FOR THIS LIKE FOREVER!!! THANK YOU DAN

  • @TheAwakeningMission
    @TheAwakeningMission 5 лет назад

    Thank you so much! I was expecting this for so long and it's finally here!!!! :D

  • @alialsaffar6090
    @alialsaffar6090 5 лет назад +1

    Thank you for doing both the DVD challenge and this! And, made it till the end!!

  • @dominick253
    @dominick253 4 месяца назад +1

    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.

  • @01binaryboy
    @01binaryboy 3 года назад

    Take all my assets . You are rocking man.
    I was searching these kind of videos for long time. Thanks to MikeAsh as well.

  • @juvusart
    @juvusart Год назад +1

    This is a gteat example of a man who really love what he is doing.

  • @Grynjolf
    @Grynjolf 5 месяцев назад +6

    Where are parts 2 and 3? I can't find them! 😭

  • @toastom
    @toastom 5 лет назад

    I know I've looked for something like this on your channel before but couldn't find it. Glad you uploaded one haha

  • @salahsoliman5752
    @salahsoliman5752 Год назад +1

    This was so much fun, I didn't expect it to work this smoothly 😂😂

  • @Squidcat777
    @Squidcat777 Год назад

    currently in my master's for computer graphics, this video was a surprisingly great starting point to fluid sims! thank you so much!

  • @matheussilvacarvalhodeoliv7339

    Wow, that was incredible! I loved this video, mostly because fluid mechanics is my area ❤️

  • @mackycheese3582
    @mackycheese3582 5 лет назад

    Finally!!! I have been waiting for this vid for a looong time THANKS

  • @soliderarmatang5664
    @soliderarmatang5664 2 года назад

    I just discovered this channel and I’m already liking it

  • @MarushiaDark316
    @MarushiaDark316 11 месяцев назад

    Having access to vectors, objects, and multidimensional arrays makes this all so much more pleasant to work with.

  • @prafulsrivastava7684
    @prafulsrivastava7684 2 года назад +1

    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!

  • @danh9676
    @danh9676 5 лет назад +1

    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.

  • @maserb5
    @maserb5 5 лет назад

    I really liked this video! I studied aero dynamics for a while and it’s cool to see it in play.

  • @dripcode2600
    @dripcode2600 Год назад +2

    Mad respect. It's always hard to code infront of other people. Really enjoyed this video!

  • @josenicolasagustingarciama9185
    @josenicolasagustingarciama9185 2 года назад

    Gotta admit. You have improved a lot since your firsts vídeos. You rock

  • @erzzam
    @erzzam 4 года назад +4

    Made it through the final and it was awsome! Looking very much forward for the next episode of the series! #teamturbulence

  • @Rumplestiltzchen
    @Rumplestiltzchen 2 года назад

    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

  • @Ghaz002
    @Ghaz002 5 лет назад

    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.

  • @term477
    @term477 5 лет назад +16

    37:16 sounds like poetry

  • @ffggddss
    @ffggddss 5 лет назад +6

    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

  • @cware1817
    @cware1817 2 года назад

    As someone who is relativly new to C++ this was very helpful and cool to watch your workflow through these concepts with the whiteboard!

  • @r.d.machinery3749
    @r.d.machinery3749 4 года назад +13

    53:51 "Noone is going to make it to the end of this video"
    Still here, still fascinated :)

  • @nostravis2770
    @nostravis2770 2 года назад +2

    "I'm sure youtube compression is totally ruining this."
    Spot on unfortunately

  • @greenpixel556
    @greenpixel556 4 года назад

    Allot of great examples, i like that they all in KISS format, just pure algorithms , no nonsense.

  • @bigrafati1221
    @bigrafati1221 5 лет назад +5

    When I watched this video I realized how much I still have to learn.

  • @Maex2k
    @Maex2k 5 лет назад +27

    "Just let me take a quick look at the video..." 55 minutes later: #teamturbulence

  • @Dennis4Videos
    @Dennis4Videos 4 года назад +1

    flute intro cracked me up, thanks for your awesomeness

  • @FrozenGale
    @FrozenGale 3 года назад +2

    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.

  • @v0ldelord
    @v0ldelord 4 года назад +4

    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.

  • @jacksparrow440
    @jacksparrow440 5 лет назад

    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

  • @austineadah2843
    @austineadah2843 3 года назад

    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

  • @Confuseddave
    @Confuseddave 5 лет назад +2

    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...

  • @Behiri
    @Behiri 5 лет назад

    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

  • @kacperozieblowski3809
    @kacperozieblowski3809 5 лет назад +2

    32:38 love the edit, and the transition music, so funny

  • @uhwlrz
    @uhwlrz 5 лет назад +1

    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😍😍😍😍😍

  • @Mortagus
    @Mortagus 5 лет назад +1

    Damn ! That result is awesome 😁

  • @rashmiranjannayak3251
    @rashmiranjannayak3251 2 года назад

    Perfect coding spirit

  • @bernatrosello4375
    @bernatrosello4375 5 лет назад +38

    This Video: *exists*
    RUclips compression: *dies*

    • @zh9664
      @zh9664 3 года назад

      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.

  • @justgame5508
    @justgame5508 5 лет назад +8

    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🙃

    • @tx6723
      @tx6723 5 лет назад +1

      yea maths/phys can be interesting, esp when paired with visual programming

  • @tejonBiker
    @tejonBiker 4 года назад

    Good job, a lot of info can be found in this video :D

  • @ThatChristopher
    @ThatChristopher 5 лет назад +4

    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
      @aravindkarthik5120 2 года назад

      Hey Chris, being a beginner, may I know as to where I could start to learn about fluid simulation in depth?

    • @ThatChristopher
      @ThatChristopher 2 года назад

      @@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.

  • @jordy15322
    @jordy15322 5 лет назад +1

    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.

  • @Hyuts
    @Hyuts 5 лет назад +2

    Busy learning MongoDB atm but a mandatory thumbs up was given.

  • @germandavidmurillasmondrag4004
    @germandavidmurillasmondrag4004 2 года назад

    OMG every time I see this video is the same as stunning as the first time I saw it.

  • @oBCHANo
    @oBCHANo 5 лет назад +75

    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.

    • @thedotisblack
      @thedotisblack 5 лет назад +2

      Agree,. I would love to watch that too.

    • @tx6723
      @tx6723 5 лет назад

      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

    • @haaly7245
      @haaly7245 5 лет назад

      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.

  • @ZerofeverOfficial
    @ZerofeverOfficial 5 лет назад +120

    i made it to the end of this video

    • @TheCodingTrain
      @TheCodingTrain  5 лет назад +7

      I am gobsmacked.

    • @ffggddss
      @ffggddss 5 лет назад

      Make that last "a" an "e" and you're there!
      Fred

  • @AJ-et3vf
    @AJ-et3vf 2 года назад

    Awesome video! Thank you!

  • @swayamsingh4650
    @swayamsingh4650 2 года назад

    Love your content brother ❤️

  • @kingtarekdz
    @kingtarekdz 5 лет назад

    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

  • @HZLTV
    @HZLTV 4 года назад +1

    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!

  • @guzman-do
    @guzman-do 5 лет назад +1

    YES!!! Excellent!!! I needed to understand this fluid simulation thing for my game 👍#teamturbulence *all the way* WOOHOO!!! 😄🤣😅

  • @israeltettehakrong9082
    @israeltettehakrong9082 7 месяцев назад

    You are very talented in using processing. ❤❤❤❤❤❤U Shiffman.

  • @memoochoaprime
    @memoochoaprime 10 месяцев назад +1

    beautiful, love it

  • @newyorkart
    @newyorkart 4 года назад

    Great! Work! Thanks for sharing it! :)

  • @NZAnimeManga
    @NZAnimeManga 5 лет назад

    This was really interesting!

  • @Toknus
    @Toknus 2 года назад +1

    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! 😂😂

  • @animated.stories.reddit
    @animated.stories.reddit 3 года назад

    This is the first programming video I like xD

  • @_abdul
    @_abdul 2 года назад

    I was already Overwhelmed by the details of it...and then I got the Turbulent Song.

  • @avi12
    @avi12 5 лет назад +140

    32:37 What the heck?

  • @paull007
    @paull007 5 лет назад +5

    It was very fun on stream

  • @dirk9787
    @dirk9787 5 лет назад

    Can't wait to recreate it :)

  • @sahiltrivedi69
    @sahiltrivedi69 3 года назад

    You did it! You crazy man! You did it!

  • @jordanscarrott3749
    @jordanscarrott3749 4 года назад

    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

  • @prashanthkumar5987
    @prashanthkumar5987 5 лет назад

    you're dope🔥 All hail mr.shiffman🙌🏼

  • @illiasolohub3225
    @illiasolohub3225 2 года назад +1

    this feeling when you are doing the same thing but in python

  • @kyle5210
    @kyle5210 5 лет назад +3

    Watched this live and I came specifically for 54:04 :) :) :)

  • @RAWRCoding
    @RAWRCoding 5 лет назад

    Great video!

  • @michaelsalais7393
    @michaelsalais7393 2 года назад

    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!!!!

  • @umangjain293
    @umangjain293 4 года назад

    You're awesome man

  • @a_random_voice_in_the_void
    @a_random_voice_in_the_void 5 лет назад +2

    The #TeamTurbulance dance was epic! 😂

  • @egebayraktar6620
    @egebayraktar6620 10 месяцев назад

    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.

  • @MrRobbyvent
    @MrRobbyvent 3 года назад

    power of editing!

  • @awaisahmed1871
    @awaisahmed1871 2 года назад

    I have data structures exam tomorrow. But this looks fun can't stop myself from watching it

  • @freddurstedgebono4589
    @freddurstedgebono4589 3 года назад

    This is very impressive.

  • @Retr0sp3ct
    @Retr0sp3ct 2 года назад

    It's a shame programming is so nicce atm, content like this deserves so much more recognition and appreciation.

  • @Andrea-Giachetto
    @Andrea-Giachetto 4 года назад +1

    That final dance is basically me everytime I fix a bug.

  • @theaveragemegaguy
    @theaveragemegaguy Год назад +1

    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 :')

  • @wassimbourbia9780
    @wassimbourbia9780 3 года назад

    You are awesome thanks a lot, I need that

  • @gianlucarossimorano5208
    @gianlucarossimorano5208 5 лет назад

    Very cool!

  • @artistpw
    @artistpw 2 года назад

    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!

  • @coltonhenry3636
    @coltonhenry3636 7 месяцев назад

    The “Lattsman Boltzmann” at 1:02 😂😂😂

  • @anonanon3066
    @anonanon3066 5 лет назад

    Great video! I am probably going to try this code myself, after i ported it back to C++ xD
    Maybe going to try working with colors and particles

  • @DuniC0
    @DuniC0 3 года назад

    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...