How To Render 2 Million Objects At 120 FPS

Sdílet
Vložit
  • čas přidán 25. 03. 2023
  • Project files: github.com/Matthew-J-Spencer/...
    Let's discover the true potential of Unity by pushing its limits. In this video, we'll explore a variety of techniques, from straightforward tweaks like data-oriented design, to more advanced methods such as direct GPU rendering and compute shaders. Join us as we uncover the power and flexibility that Unity has to offer!
    Some techniques used:
    Unity DOTS (burst, jobs, ecs)
    RenderMeshInstanced
    DrawMeshInstancedIndirect
    Data-Oriented Design
    Avoiding extern calls
    ❤️ Become a Tarobro on Patreon: / tarodev
    =========
    🔔 SUBSCRIBE: bit.ly/3eqG1Z6
    🗨️ DISCORD: / discord
    ✅ MORE TUTORIALS: / tarodev

Komentáře • 430

  • @Tarodev
    @Tarodev  Před rokem +76

    Let me know if you'd like to see anything else benched, or whatever else you'd like me to cover :)
    My specs:
    Ryzen 9 5950X 16-core
    GeForce RTX 3090
    64GB Memory

    • @sima19995
      @sima19995 Před rokem +7

      How about the forgotten Quaternions?

    • @gemidytwins
      @gemidytwins Před rokem +4

      Sure, mesh baking vs instances vs gpu instances, material batching, light baking, all these stuff. Also triplanar mapping with 3 textures, with 6 textures (albedo+normal), simple vs. with blending. LOD solutions: unity lod, vs other solution (like progressive mesh) + billboard + impostors. All these are very interesting.

    • @fourthgearvibez4343
      @fourthgearvibez4343 Před rokem +1

      There's no way my laptop with 12 fps on blender has quadruple your space with half of it being free and STILL only runs at 12-25 fps on blender.

    • @ChronoCZ
      @ChronoCZ Před rokem

      Hey, cool video. I think you could squeeze out more performance out of mono behavior game objects by parenting them to some object.
      Maybe add that as a benchmark case. I believe that incorrect hierarchy might cause a few % slowdown.

    • @pieTone
      @pieTone Před rokem

      Wait, I don't get it. Are you mental checkpoint?

  • @purplexy
    @purplexy Před rokem +277

    I love how you prepare all these scenes to make them look so appealing and eye-catching for us. Good stuff, keep this up! 😛

    • @Tarodev
      @Tarodev  Před rokem +32

      The poor bitrate couldn't keep up when it reached 90k cubes ><
      Glad you enjoy the visuals :)

  • @fabiencrescent6503
    @fabiencrescent6503 Před rokem +69

    Increased Performance Strategies :
    1:30 - Manager script instead of monobehaviours (only 1 Update() call)
    2:49 - Reducing external calls (Caching position instead of asking repeatedly the transform position)
    3:50 - GPU Instancing
    5:21 - Multi-threading (Unity "Jobs" & "Burst")
    6:58 - ECS (part of Unity Dots)
    8:29 - GPU Instancing Indirect
    13:09 - Camera Cache

    • @Tarodev
      @Tarodev  Před rokem +1

      Awesome. Thanks ❤️

    • @fabiencrescent6503
      @fabiencrescent6503 Před rokem +1

      You're welcome and thanks for helping Unity devs ! 😉
      I'm having trouble with rendering 9 chunks of 16x16x10 cubes for a simple prototype (I didn't find the way to implement simple GPU instancing..) so I don't know yet how to use all the work you did but it seems really great !

  • @MidasButSilver
    @MidasButSilver Před rokem +5

    Your vids are amazing; fun to watch, very interesting and always filled with info.
    Also love that you always include similar scenarios with the different tools we have available to show their drawbacks/advantages

  • @gamecreatorc
    @gamecreatorc Před rokem +1

    I'll have to keep this in mind. Love what you do for the community!

  • @KonaiNobi
    @KonaiNobi Před rokem +1

    WOW!! This was a fantastic video. I've been dabbling in learning Jobs+Burst but this demo was just amazing, gonna have to put more effort into getting my head around that .

  • @minhmino6445
    @minhmino6445 Před rokem +1

    your video is really great , help me learn a lot, and seeing 10k objects on screen at the same time with high fps is so awesome and fun to watch

  • @simoncodrington
    @simoncodrington Před 7 měsíci +4

    This one was fascinating mate, really liked the visually focused explanations, showcasing the tangible FPS improvement along the way.

  • @Blushter
    @Blushter Před rokem +22

    You're the programmer with a great teaching and visualization skill sir. You're fantastic, After Breakkeys i kind of lost hope in tutorials but after discovering your channel you're indeed a blessing for Unity developers.

    • @Goomero
      @Goomero Před rokem

      dis foo stuck in tutorial hell

  • @COL4NTUOMO
    @COL4NTUOMO Před rokem +1

    Man! I think you are one of the best unity creators in yt..
    Your explanation is clear and you really know what you talking about
    I would love to watch a serie where you create a game from scratch using all those techniques

  • @Astoaria
    @Astoaria Před rokem

    Great work! One of the best gamedev videos I stumbled upon in a while!

  • @antijulius
    @antijulius Před rokem +2

    Absolutely love this content. Thanks for taking the time to systematically clear these things up and visually show the difference.

    • @Tarodev
      @Tarodev  Před rokem

      No problem, it was a lot of fun 😊

  • @iHeartGameDev
    @iHeartGameDev Před rokem +28

    Taro, you explained all of this so well!! I admittedly don't know a single thing about ECS, Dots, GPU instancing but even from that position, I came out of this seeing the real benefits of those systems. Awesome job and love having you back making vids :)

    • @Tarodev
      @Tarodev  Před rokem +1

      Ahh, thanks Nicky ❤️

  • @lavisch837
    @lavisch837 Před rokem +123

    Man, I really want to get into DOTS. Really seems like it's the future of Unity development.

    • @Tarodev
      @Tarodev  Před rokem +51

      More performance than you could ever really need, to be honest

    • @mrslake7096
      @mrslake7096 Před rokem +10

      I think it's not worth the cost of time & complexity for most projects

    • @Tarodev
      @Tarodev  Před rokem +43

      @@mrslake7096 Yup, 90% of indie games will never need to touch it. The ones which do will most likely only need jobs & burst.
      Even for a game like vampire survivors, ECS is not really a requirement.

    • @MuhammadHosny0
      @MuhammadHosny0 Před rokem

      not worth it unfortuantely

    • @maxfun6797
      @maxfun6797 Před rokem +9

      ​@@MuhammadHosny0 it's absolutely worth it if you want to make games with multiplayer and mlagent ai. Infact it is necessary, my game lags so much without it, and I used a small count of very simple ai.
      Yes without these 2 things, it's probably not worth it. BUT... dots isn't actually hard to figure out. The hardest thing imo in unity is multiplayer (but only because my game is complex), everything else takes a day to learn.

  • @VEETEEGameStudio
    @VEETEEGameStudio Před rokem +1

    I love these new test and experiment videos , keep it up man💜

  • @Jalechah
    @Jalechah Před rokem +1

    wow! This blows my mind, and gives me a lot to think about and research. Cheers mate. great Vid.

  • @MrZtapp
    @MrZtapp Před 6 měsíci

    Every time I watch your videos I learn something new. A lot to try to understand but this is uber usable for my next project, Bookmark. Thanks.

  • @stevennassef
    @stevennassef Před rokem +1

    GREAT VIDEO!. i really like these comparison videos.
    very useful and descriptive thank you!

  • @orangejuicetech-qdtgs6669

    So love your channel Taro ❤ it could touch my feeling again about development industry

  • @jujhar.
    @jujhar. Před rokem +5

    You're one of the best devs in the pass it on challenge, awesome work man

  • @supairo6539
    @supairo6539 Před 6 měsíci +2

    This is actually very helpful. I am currently working on a Game that has to update the position of many thousands of GameObjects. I will definetly try to implement some of these things to boost the performance.

  • @Tharky
    @Tharky Před rokem +1

    Amazing video again, I was wondering how to do gpu instancing and this really helped :)

  • @TaAnderson-Google
    @TaAnderson-Google Před rokem +2

    Yes, it was fun and yes, I learned something.
    This is to be expected from Tarodev, but NEVER taken for granted.
    Thank you Sir. Stellar as always.

    • @Tarodev
      @Tarodev  Před rokem

      Good to see you're still here, Tristan 😊

  • @alaslipknot
    @alaslipknot Před rokem +45

    Very insightful as usual, thanks a lot!
    there is really not a lot of good in depth resources about doing GPU Instancing, it would be amazing if you can a video exclusively about that.

    • @Tarodev
      @Tarodev  Před rokem +27

      I can do that :)

    • @Louis-nh1ei
      @Louis-nh1ei Před rokem +1

      @@Tarodev Please do good sir :)

    • @YoupiMatos2
      @YoupiMatos2 Před 5 měsíci +1

      @@Tarodev I'm gonna second this suggestion, the lack of resources is really sad, it feels like there's an abyss between a mid level Unity developer and an advanced one, because these techniques are only shown through examples but barely explained in detail. Please do! Thanks in advance!

  • @vdvgames
    @vdvgames Před 11 měsíci +1

    Great vid! :) Was always undecided over individual scripts compared to a single loop.

  • @flynnmc9748
    @flynnmc9748 Před 10 měsíci

    Insanely helpful to see these steps broken down like this, thanks for the video :)

  • @agustinlado
    @agustinlado Před rokem +2

    What an excellent video! Advanced concepts, smooth implementation and succinct.
    I'd love to have this exact same thing for Unreal Engine and to be able to compare both, but I see you focus exclusively on Unity.I've got a bit to learn about Unreal and shaders before I can do this but I definitely will at some point.
    Thanks for sharing your knowledge!

    • @Tarodev
      @Tarodev  Před rokem +1

      I would absolutely love to see an Unreal comparison. UE is looking INSANE recently.

  • @yaarrghmematey
    @yaarrghmematey Před 6 měsíci +1

    Thank you! Thank you! Thank you! I never knew of GPU Instancing Indirect! Bloody hell, that is a game changer for our Voxel Engine, so glad to have found your video and can't wait to implement this indirect instancing. 😊

  • @Hazzel31337
    @Hazzel31337 Před rokem +1

    i knew from jason weinmanns gamedev show that you should do your own game loop instead of the monobeheaviours and that ECS ist fast, but your video is like a massiv sun shinning light on this topic and helping me understand, 100/10 quality content! thank you so much

  • @OG_Space_Viking
    @OG_Space_Viking Před 8 měsíci +1

    This is massive, I'm making a satellite tracker that I've been trying to optimize forever and this is what I've been looking for, thank you.

  • @xanderlinhares
    @xanderlinhares Před rokem +1

    That was rad. Keep up the awesome work!

  • @TurboMakesGames
    @TurboMakesGames Před rokem +1

    Awesome performance comparison man!! Very thorough 💪💪

    • @Tarodev
      @Tarodev  Před rokem +1

      The DOTS 🐐 has landed

  • @airONAIR
    @airONAIR Před rokem +1

    Amazing video, thank you so much for making this!

  • @riddheshzaveri8103
    @riddheshzaveri8103 Před rokem +1

    Wow, its so mind blowing that often its not about the engine but the developer himself regarding how much can you extract the performance out of the engine.

  • @talal2245
    @talal2245 Před rokem +1

    Legend mate. Very insightful!

  • @bluzenkk
    @bluzenkk Před rokem +6

    I learned something.
    Thanks.
    I love your videos. very informative.
    looking forward to your next video.
    DOTS are hard.
    Amazing how you can write them as if its nothing.
    I hope I can become a great coder like you one day~
    if possible, please make more video on dots in the future.
    or other performance related topics are fine too.

  • @gemidytwins
    @gemidytwins Před rokem +1

    Subscribed, just another very cool content. Thank you.

  • @kaasronald3623
    @kaasronald3623 Před rokem +1

    great video as always. super useful to get started choosing optimisation techniques. It's so tempting to implement ECS once it enters 1.0, even for just the sub-scenes, but it's probably way too risky for games that release within 12 months... >:(

  • @enitalp
    @enitalp Před 9 měsíci +1

    Very nice video, this is the way I always work, Test everything , learn the best practices, from actual experimentation. I’m caching everything, coded for years on mobile/ switch, and those caches have an impact on a 10 to 20 times, slower Cpu. Input. For exemple is costly, more on some hardware. Plus it’s not just the call of an external function, taking time, it’s also the need for the cpu to trash the data and code cache. Making the functions coming after slower, because of it

  • @bkky9
    @bkky9 Před 6 měsíci +2

    Awesome video! It reminds me of Dyson Sphere Program, the devs offload everything they can to the GPU to get insane performance out of Unity

  • @swalscha
    @swalscha Před rokem +11

    Thanks for this insight on performance! It's a huge aspect of development I'm personally interested in :D
    If you need new topics, you could share tips to reduce the final data volume used by the build (sometimes I see games that take so many Go that I don't even understand how they have reached so much! Even considering a lot of textures midmaps and full assets integration).

    • @Tarodev
      @Tarodev  Před rokem +12

      Damn, that's a great video idea. It's something I could also learn a bit about, too. I've done this a few times on previous project deployments, but I feel there's a lot to learn.

  • @twinjuke
    @twinjuke Před rokem

    Now subscribed, very useful stuff here! Thank you.

  • @chuteapps1
    @chuteapps1 Před 7 měsíci +1

    Really great and intelligent video, I can tell you really know what you're doing which is refreshing to see on youtube :)

    • @Tarodev
      @Tarodev  Před 7 měsíci

      Glad you enjoyed ❤️

  • @thisisKushagr
    @thisisKushagr Před 6 měsíci

    This is so well explained, omg I didn't even know that half the things I was already doing were optimizations in the first place.

  • @GrayFoxware
    @GrayFoxware Před rokem +2

    Man, I missed you!
    This video is Amazing!

  • @jubinjajoria2870
    @jubinjajoria2870 Před rokem +28

    Can we expect some ECS DOTS Tutorials?

    • @Tarodev
      @Tarodev  Před rokem +19

      This could be in the cards

    • @Louis-nh1ei
      @Louis-nh1ei Před rokem +1

      @@Tarodev I was going to ask the same thing ! Just want to push this haha

    • @gavintantleff
      @gavintantleff Před 9 měsíci

      ECS DOTS is dead. It’s never coming out. I promise you. Not worth investing in

    • @jubinjajoria2870
      @jubinjajoria2870 Před 9 měsíci

      @@gavintantleff I respect your opinion, but you can't just put your opinion as facts. I would like to hear some stats/facts/ research that can back your answer.

    • @gavintantleff
      @gavintantleff Před 9 měsíci

      @@jubinjajoria2870 the fact that most dots libraries are not getting any real work done, there are no updates or information about dots, deadlines missed significantly. Of course I can’t know that Unity is dropping it, but it sure seems to me like they are. Why they don’t just come out and say it, I have no clue.
      The only dots related feature that seems like it’s being kept is tasks and burst

  • @libiroli
    @libiroli Před rokem

    Video idea related to this: how to properly benchmark & profile. Recently there are new tools like memory profiling. A deep dive especially by you who has shipped actual titles would be very interesting. Thank you again!

  • @hoody4289
    @hoody4289 Před rokem +1

    I will treasure this video like Golum treasures the ring.
    Thank you so much, the visuals and explanations are perfect !

  • @rolandinnamorato1953
    @rolandinnamorato1953 Před rokem +2

    love this style of incremental enhancement.

  • @paulmeynckens6676
    @paulmeynckens6676 Před 10 měsíci

    Waouh! What an amazing and instucting video ! Thank you so much.

  • @TedThomasTT
    @TedThomasTT Před rokem +2

    Great video 👏 It would be interesting comparing these techniques to using VFX graph.

  • @Banaaani
    @Banaaani Před rokem

    Insane how big difference some of these technologies make. It really opens up options for new games or features while keeping really good performance.

  • @smittywerbenjj1
    @smittywerbenjj1 Před rokem +2

    This is really good. Please more!

  • @ewwitsantonio
    @ewwitsantonio Před rokem +1

    You just converted me to a DOTS believer. I didn't really care until this video + knowing some stable release seems to be on the horizon... :) I'm diving in!!

  • @edmundjr.salcedo7854
    @edmundjr.salcedo7854 Před rokem +1

    This is the best AD for Dots and ECS

  • @Bergosaurus
    @Bergosaurus Před rokem +1

    Another great vid. Would love more coverage of Jobs / burst.
    eg similar but instead of a single cube maybe a raycast car (casting rays on each wheels) etc. Really hoping the doco/framework starts to cement abit this year

  • @DLPLORD
    @DLPLORD Před 10 měsíci

    This video is pure gold 🥇, thank you❕

  • @YouCodeThings
    @YouCodeThings Před rokem +1

    Fantastic - great examples!

  • @publicalias8172
    @publicalias8172 Před 6 dny

    Thank you for just getting to the point.. my attention span is fried I was reluctant to even watch this, but you drew me in with the up-front examples this was awesome!

    • @Tarodev
      @Tarodev  Před 6 dny

      I'm catering to people like myself (and you), who don't want to hear the life story of the dev

  • @HiddenExp
    @HiddenExp Před 6 měsíci

    Nice vid Taro! I'm curious, would you get a considerable performance improvement by implementing a force directed graph using ECS? Or would the physics involved make things messy?

  • @beardordie5308
    @beardordie5308 Před rokem

    Some big surprises here, thanks!

  • @DarkSmugLoser
    @DarkSmugLoser Před rokem +1

    Solid work, subscribing.

  • @the0neskater
    @the0neskater Před 8 měsíci

    Incredible video, well done!

  • @chosencode5881
    @chosencode5881 Před rokem +2

    Thank you so much! This is so helpful!!

  • @user-uz7cv7uf2o
    @user-uz7cv7uf2o Před 5 měsíci

    Im an indie game dev, who was working on a voxel game, and my biggest issue was rendering. This will definitely help. Thanks!

  • @D-Dev
    @D-Dev Před rokem +1

    Really impresive experiment!

  • @Trashloot
    @Trashloot Před 6 měsíci

    I haven't programmed anything in Years and never used unity but this video was still auper interesting:D. Amazing presentation:D

  • @WeslomPo
    @WeslomPo Před rokem +3

    Caching variable does make a difference. Especially on mobile devices, where we don't have much rich instruments to optimize our projects, and we need to be sure that it work across multiply devices.

  • @GoldSwordKiller
    @GoldSwordKiller Před 6 měsíci

    The numbers just feel so good to look at because the font you use is the supercell font, which is just hilarious. Makes me think 12 fps is good.

  • @mertkalak3730
    @mertkalak3730 Před rokem +1

    Awesome content, thank you!

  • @xaldioDev
    @xaldioDev Před rokem +1

    Love these tests!

  • @Dominik-K
    @Dominik-K Před rokem

    This was very interesting and I didn't know those APIs in Unity for GPU instancing yet

  • @ryancollins4243
    @ryancollins4243 Před rokem +1

    This dude always exploring the actually important shit. Thanks duder.

  • @user-uk9er5vw4c
    @user-uk9er5vw4c Před 8 měsíci +1

    terrific video! subbed

    • @Tarodev
      @Tarodev  Před 8 měsíci

      Welcome aboard 😊

  • @MafiaSniper
    @MafiaSniper Před rokem +1

    Hey Tarodev! Your videos are amazing!
    Can you do a video on performance for mobile games? That'd be great.

  • @bryanhooi9132
    @bryanhooi9132 Před rokem +2

    i not very good in English but the way you teach ..wow .! thank a lot Tarodev ..i love your video

    • @Tarodev
      @Tarodev  Před rokem +1

      Glad you enjoyed ❤️

  • @aliengarden
    @aliengarden Před rokem +1

    Yessss a new TaroDev video, instant like.

  • @jonasRedStar
    @jonasRedStar Před rokem +1

    thank you, I have learned A LOT

  • @FADIK1987
    @FADIK1987 Před 6 měsíci

    cool, thanks for this benchmark

  • @mfaxyz
    @mfaxyz Před 5 měsíci

    The most underrated technical tutorial.

  • @TextGuy
    @TextGuy Před rokem

    Thanks for the video, very informative.

  • @impheris
    @impheris Před rokem +1

    that is very nice! you should show how many polygons are there which is more accurate

  • @JimPlaysGames
    @JimPlaysGames Před rokem +1

    Wow, a really incredible difference. Thanks for the video!
    I haven't done anything with multithreading. Do you have a video about the job system, or one planned?

    • @Tarodev
      @Tarodev  Před rokem +1

      Lots of requests, so I'll do a jobs video 😊 shouldn't be too long

    • @JimPlaysGames
      @JimPlaysGames Před rokem

      @@Tarodev Awesome :D

  • @timurradman3999
    @timurradman3999 Před rokem +1

    Dude, that's crazy :,)
    I can see myself using it for bullets in my top-down shooter game

  • @Xankill3r
    @Xankill3r Před rokem

    One benefit of caching stuff is that it becomes much easier to rearchitect your code to use stuff like the Job System or even convert everything to ECS if needed.

  • @VALKRYSA
    @VALKRYSA Před rokem +3

    Already do my own manager loop instead of monobehaviors but seeing the jump that Jobs+Burst makes me want to stop being lazy and properly learn Jobs, thanks!

  • @JohnK68
    @JohnK68 Před rokem +1

    Great video, needs a follow up!!!

  • @bonecircuit9123
    @bonecircuit9123 Před 9 měsíci

    great content! thanks mate

  • @saqibbro5297
    @saqibbro5297 Před rokem +1

    Amazing Video !!

  • @thygrrr
    @thygrrr Před rokem

    Thank you so much! This is an amazing overview of the different methods, with beautiful examples.
    Regarding the "cached" Camera.main, do you think a million identical assignments of a local variable value to another unused local variable are not being optimized at all by the JIT or CLR?

    • @Tarodev
      @Tarodev  Před rokem +1

      It's very likely, now I think about it 🤔

  • @user-vd5pw4du2f
    @user-vd5pw4du2f Před 9 měsíci

    Amazing!! Thank you!

  • @omerertekin3994
    @omerertekin3994 Před rokem +1

    I’m 100% sure that we are not using same cubes with you. On every single video how can you manage to create amazing scenes with just cubes? Great work and great video !

    • @Tarodev
      @Tarodev  Před rokem +1

      I've trained in cubism for years

  • @illusivec
    @illusivec Před 7 měsíci

    Amazing stuff. I'd bet anything a lot of triple A devs would get to about 4 on your list and call it good enough. On that note, you should give Colossal Order a hand to fix the mess that is Cities Skylines II.

  • @ferremolenbeek
    @ferremolenbeek Před 11 měsíci

    Thank you so much for this! Would it be possible to do a tutorial about using jobs and burst without ecs?

  • @brandenimmerzeel8182
    @brandenimmerzeel8182 Před rokem +1

    tarodev is the real MVP

  • @TheArghnono
    @TheArghnono Před 4 měsíci

    I just discovered your channel today, and noticed there has not been a new video for a few months. I don't want to add to the youtuber-hamster-wheel pressure, so I'll just say I love your stuff, it is rare quality among lots of mediocrity, and if your life is in a place where you feel like continuing to make quality Unity gamedev content, I'll watch it immediately :)

  • @flurinjenal374
    @flurinjenal374 Před 3 měsíci +1

    Crazy, top video!

  • @Louis-nh1ei
    @Louis-nh1ei Před rokem

    I am counting on you for a 10 vidéo séries on GPU instancing and another series for DOTS now 😇

  • @Tristan559
    @Tristan559 Před 2 měsíci

    Excellent video!

  • @felfurion8624
    @felfurion8624 Před rokem +1

    Thank you for everything that you do