Unity Performance Tips: Draw Calls

Поділитися
Вставка
  • Опубліковано 21 лис 2024

КОМЕНТАРІ • 231

  • @Kapthos
    @Kapthos Рік тому +194

    I was always so worried about poly count, always trying to keep it to a minimum, but I love it that in this video you went from 0.5 FPS to hundreds without reducing a single polygon, always kept with those 21M.

    • @Domarius64
      @Domarius64 Рік тому +26

      There are various bottlenecks to be aware of, polycount is still one of them, but the aim is to solve the one affecting your particular situation.

    • @xomvoid_akaluchiru_987
      @xomvoid_akaluchiru_987 Рік тому +1

      @@Domarius64 why not apply all of the performance techniques at once? As soon as you solve the original problem, shouldn't you apply the other techniques?

    • @Domarius64
      @Domarius64 Рік тому

      @@xomvoid_akaluchiru_987 if you have infinite time, sure, you can do everything. But in the real world you are always making trade offs to get something produced in a way that still turns a profit.

    • @xomvoid_akaluchiru_987
      @xomvoid_akaluchiru_987 Рік тому +1

      @@Domarius64 Ok, time constraints, sure, but if a product is finished and you're coming back to fix some things then I don't see why implementing all of them would be an issue if the product really does benefit from it. If it doesn't benefit much then I just trust myself to have common sense and see that it's not worth it.

    • @Domarius64
      @Domarius64 Рік тому

      @@xomvoid_akaluchiru_987 that "extra time at the end" literally never happens in game dev :) you always end up releasing the game when its good enough, not because its finished, because it never is. And so you cant justify spending time on things that have no tangible benefit - remember, you said "why not do all of them?" Well, thats why not. If the game runs on the target hardware acceptably, there is no reason to optimise. Plus when you say "why noy do all techniques" like there are only 5 or something. Every different programmer could know any number of techniques they learned about somewhere, too numerous to list, you cant just "do them all".
      And more importantly, those changes will not have zero impact, there will always be knock on changes related to that, and plenty of opportunity for new bugs to be introduced at every step of the way, all which will have to be fixed, taking even more time. If its working, you leave it alone.

  • @samkwok2538
    @samkwok2538 3 роки тому +80

    The best Unity Performance tips on UA-cam ever

  • @TurboMakesGames
    @TurboMakesGames 3 роки тому +183

    Great overview. I liked how you you showed multiple levels of improvement and how each setting improved frame rate and batches 👍

  • @Imry0411
    @Imry0411 2 роки тому +41

    This will definitely be added to my greatest-unity-tutorials-of-all-time list.

  • @ivo435
    @ivo435 Рік тому +28

    You single-handedly saved my project. I went up from average 28-30 fps to 160 lol. Thank you so much

    • @dertobbe1176
      @dertobbe1176 5 місяців тому

      How are you doing mate? Is your game realesed yet?

  • @jeffstienstra3615
    @jeffstienstra3615 29 днів тому

    wow, simply checking 'Enable GPU Instancing' on a few materials dropped my batches from about 3000 to about 50 and increased FPS by 23%! Super helpful!

  • @andreamarini9940
    @andreamarini9940 25 днів тому

    I know this video is years old, but still, thank you. all I did was adding a net wall object to my game and the fps number sundently dropped from 200 to 22 everytime I looked at it and it was driving me crazy. You saved me from going completely insane man, thanks

  • @raploky
    @raploky Рік тому +2

    I CAN'T EXPLAIN HOW EFFICIENT IT IS!
    THANK YOU!

  • @iLikeCoffee777
    @iLikeCoffee777 3 роки тому +10

    Okay these are some really good tips explained very well and I absolutely love the cat at the end!

  • @Foxyzier
    @Foxyzier 3 роки тому +6

    the simplest and most understandable video on that topic thanks

  • @TTVSquonkBot94
    @TTVSquonkBot94 6 місяців тому

    It's men like you that make the world a better place, I watch tons of videos on the same thing but you broke it down simple and easy to digest.

  • @harrykingsley7915
    @harrykingsley7915 3 роки тому +28

    These are very professional and excellent quality tutorials. Keep up the good work!

  • @thatsalot3577
    @thatsalot3577 2 роки тому +2

    This video is a gem, small but extremely valuable.

  • @baldipogchamp8926
    @baldipogchamp8926 2 роки тому

    Been making jam games in unity for 2 years now, did not realise how important the Static tickbox was. Never used it before, changing that now!

  • @suicune2001
    @suicune2001 7 місяців тому

    Thank you! One of the reasons I'm hesitant to try 3D is because I'm worried about performance. 2D is just so much easier and you don't need to worry about performance as much.

  • @BelieveGamesStudios
    @BelieveGamesStudios 2 місяці тому

    Best optimization video on UA-cam

  • @gneisskitty9359
    @gneisskitty9359 2 роки тому +3

    Helpful, concise, and clear. Thank you for taking the time to make this video.

  • @kurtdevries9182
    @kurtdevries9182 3 роки тому +2

    the ultimate guide to go from seconds per frame to frames per second.

  • @TheSateef
    @TheSateef Рік тому +1

    i love these short concise videos full of great info, thanks so much

  • @howtogamedev_
    @howtogamedev_ Рік тому

    This was really cool, finally got to know why batching

  • @kedidjein
    @kedidjein 6 місяців тому

    i learnt more with your video than a lot of time on unity docs and asset store...thanks a lot perfect explanations

  • @Reeality09
    @Reeality09 2 роки тому +22

    Btw. GPU Instancing will NOT work, if you have enabled SRP Batching in the Render Pipeline Settings. The SRP Batching is also better in performance reasons, because your gameobjects do not need to share the same Mesh/Material.. just the same Shader.

    • @antonovivan3008
      @antonovivan3008 10 місяців тому

      I’ve never tried to measure the difference in performance by myself. But according to what people write at Unity forum, SRP batcher is generally slower than static batching. It has less memory footprint and easier to use though. And in some cases GPU instancing may be more efficient than SRP batching. In case of dense grass field made of 1 instanced mesh, for example.

  • @aleksandrpipchenko426
    @aleksandrpipchenko426 Рік тому

    Genius! Such important stuff in a nice and short video. Thanks

  • @Foxtrot6624
    @Foxtrot6624 Рік тому

    Absolutely fantastic. I had no idea that marking an object as static actually did anything without scripts or rigid body’s applied to them

  • @faiqali4915
    @faiqali4915 3 роки тому

    The only good video about batches on youtube

  • @ThefamousMrcroissant
    @ThefamousMrcroissant Рік тому

    This is a very nice format to explain performance though: gradual improvement.

  • @cristhiancantillo4922
    @cristhiancantillo4922 3 роки тому +1

    Short and clear. Nice vídeo man

  • @peteyoshea
    @peteyoshea 3 роки тому +4

    This is so well explained. Great video!

  • @Sail_VR
    @Sail_VR 2 роки тому +1

    SO USEFUL THANK YOU!!!

  • @FireFox64000000
    @FireFox64000000 Рік тому +1

    Woah nelly this is going to be so useful.

  • @Nightmare_Developer
    @Nightmare_Developer Рік тому +1

    Loved it !! when i was about to upload my game i searched this and all the top results were just making the game look like potato 🥔 and today i found this video :) honestly UA-cam should push this video more...

  • @piyushguptaji402
    @piyushguptaji402 4 місяці тому

    ngl that funnel animation was mesmerizing asf 🤤

  • @gddhyper4913
    @gddhyper4913 Рік тому

    Back after lots of months and now i understand

  • @ELEMENTLHERO
    @ELEMENTLHERO 2 роки тому +1

    Best 5 min ever spent!

  • @IslamAudioStation
    @IslamAudioStation 2 роки тому +1

    Very important and very helpful lesson.

  • @andreidaniel687
    @andreidaniel687 Рік тому

    Thank this is amazing I've been looking for something like this for a while now!

  • @Louis-ko4yq
    @Louis-ko4yq 3 роки тому +2

    Great work, the overall quality of the video is really high, please continue :)

  • @glebparshikov1351
    @glebparshikov1351 2 роки тому

    That is brilliant. Finally, I understand!

  • @dreamisover9813
    @dreamisover9813 2 роки тому +2

    Great overview, quick and to the point, thanks

  • @specialgorilla
    @specialgorilla 2 роки тому

    Dang I had no idea this was even a thing! Fantastic tutorial

  • @FireJojoBoy
    @FireJojoBoy 3 роки тому

    This is optimization-heaven

  • @Juss_Chillin
    @Juss_Chillin 2 роки тому +1

    Thank youuu, I needed this soooo much for my mobile app! So, thank you ^-^

  • @DARK_AMBIGUOUS
    @DARK_AMBIGUOUS 2 роки тому +1

    Please make more videos about optimizing your games to make them run smoother, thank you

  • @TobeasJ
    @TobeasJ 8 місяців тому

    Very clean and easy to understand.

  • @captaincommando9839
    @captaincommando9839 2 роки тому

    insanely useful considering i was using multiple materials for flat coloring instead of just using a texture.

  • @MAINRAGAMES
    @MAINRAGAMES Рік тому

    hatur nuhun bang. ilmunya mudah dipahami dan singkat

  • @aaronjenkins2225
    @aaronjenkins2225 2 роки тому

    i wish i saw this video months ago, great advice!!!

  • @dertobbe1176
    @dertobbe1176 5 місяців тому

    You accidently exolained what happened to my scene. Ty I got it ans will make use of it ❤

  • @Trashloot
    @Trashloot 2 роки тому

    So much good information in such a short video. Just wow.

  • @DevDunkStudio
    @DevDunkStudio 3 роки тому +10

    If you have rooms I recommend using a tileset, not joining then into 1 object
    Just set all the not moving objects to static and enable static batching. That way they can be combined into just a few draw calls! (Same as your windows. All windows and the building should take 2 draw calls if I'm not wrong)

    • @Tymon0000
      @Tymon0000 3 роки тому

      Can you elaborate on the tiles part? :) What is it and how to use it, some link would be helpful

    • @DevDunkStudio
      @DevDunkStudio 3 роки тому +3

      @@Tymon0000 instead of 1 big 3D model you can make it into modular parts. That way unity can cull them with occlusion culling or just batch them with static batching

  • @vikaskumarpatel5017
    @vikaskumarpatel5017 2 роки тому +1

    Thank you for such a single explanation. Amazing! I do have a few questions though,
    1. How much duplicate objects with the same mesh, materials and settings?
    2. Are duplicate objects different draw calls?
    3. Are duplicates affect the CPU/CPU in the same way? For eg. two buildings with different materials which has the same mesh and two building with exactly the same mesh and material.
    4. What about complex meshes? What is people just use this technique on a mesh which is complex?
    5. What if I mark an object Static and turn on GPU instancing?
    6. Also, fbx vs obj in this case?

    • @jamesthiel5721
      @jamesthiel5721 2 роки тому +1

      Well, make a PREFAB of any multi-duplicate object you are planning to use. So 1 object with it's material(s) for ex. (note: prefabs can be a parent object with "nested child objects" too)
      Set it correctly, (Optimizing/combining, Static or GPU instancing) and use that prefab to build/compose.
      Make a second prefab for the different materials using the same mesh.. it's another batch for each material/mesh relation if I understand correctly.
      Unity will batch each of these separately but they will batch since a prefab is made for optimization and for batching.
      Complex meshes: just like the multiple window objects, you should combine/join all the objects like so:
      Static and or whole unbreakable objects should be combined/joined as ONE mesh. (NO need to connect all vertices like a sphere is). the breakable object would need to be seperate chunks objects which each a rigidbody component.
      Separate moving parts (animation) for car-wheels, windmills for exemples. nested in a parent object.
      Cars probably are all non-static so use gpu instancing. But not for the windmill structure -> static structure, and just for the rotating object -> gpu instancing. (although: you probably not gonna spawn 15 windmills so no real need of batching these. lol 🤣)
      Characters: usually one mesh for the body skin. for more life: 1 mesh for each eyes, and even more: the tongue and teeth/gum.
      Then customization of each cloth and bags, wearables ... is another story.. diff. approaches..
      5. GPU instancing allows object to move while Static is static cant move. there is conflict right there.. but I don't know try it.
      6. I have no clue which is best.

  • @thescribblersdiary
    @thescribblersdiary 3 місяці тому

    Great knowledge bro! Thanks a lot!

  • @nikbivation
    @nikbivation 2 роки тому

    thank you for this! so much info in so little time

  • @liulinzhifu
    @liulinzhifu 2 роки тому +1

    very informative, thank you!

  • @zlotey6485
    @zlotey6485 3 роки тому +13

    I have a question about your 3rd point.
    4:05
    What should I use for organic material? For example, grass, trees, bushes, etc. - but these only "move" by a shader.
    should I use GPU instancing or static mesh?

    • @LofiDev
      @LofiDev  3 роки тому +22

      Good question, static batching should work for them. When I say no movement what I mean is that objects transforms should not change. Any movement done through the shader is fine.

    • @Escanor__
      @Escanor__ 6 днів тому

      @@LofiDevWas searching exactly this. I did everything in my mobile game grass. It is still counting every grass , saved batching always 0 . I tried both way static and enabling gpu instancing. Results are the same . Mesh and material are the same. Idk why it is not working

  • @ethankendall7575
    @ethankendall7575 2 роки тому

    Thanks this means a lot to me when I am developing on a Intel i5 2gb gpu appreciated

  • @jamesthiel5721
    @jamesthiel5721 2 роки тому

    Nice thank you, this is very clear, easy to understand and successfully removes doubts on the subject.👍🏼

  • @ObviousDev
    @ObviousDev 3 роки тому

    Great tutorial! Very underrated channel in my opinion :)

  • @PedroL.Rosario
    @PedroL.Rosario 2 роки тому

    Really nice, tutorials for enhance the game performance is one of my favorites, very useful!

  • @fakename3208
    @fakename3208 3 роки тому +1

    Awesome video thank you bro. Loved the visuals and explanations. I now know exactly what I need to do for my use case.

  • @schizoscope8703
    @schizoscope8703 2 роки тому

    Thanks for clear explanantion!

  • @ArranAsh
    @ArranAsh 3 роки тому

    Thank you so much, my game had a lot of belts in it and this was a great way of cutting down usage

  • @potaterjim
    @potaterjim 2 роки тому +6

    But what about occlusion culling? If you've got an interior level made up of several walls and rooms, is it better to user lots of smaller meshes and occlusion culling?
    Or what about the middle ground: making each room a large static object, and then using occlusion culling to turn off entire rooms at a time?

  • @NevRS32
    @NevRS32 Рік тому

    After a few Unity courses, a few mini games and a whole lot of youtube tutorials, than you! I've come across some tips, but nothing as relevant (and clear) as this one. One thing I struggle with is doing performant UI. I made a small game where the UI uses the same assets as the game, but my god the main menu is slow.

    • @LofiDev
      @LofiDev  Рік тому +1

      Thank you! If you're looking for tips on UI performance I strongly recommend watching this talk from Unite: Squeezing Unity Tips for Raising Performance.
      ua-cam.com/video/_wxitgdx-UI/v-deo.htmlm38s

  • @__Hay_Dar__
    @__Hay_Dar__ 2 місяці тому

    crystal clear to be honest

  • @GabrielDias0223
    @GabrielDias0223 2 роки тому

    Incredible video, thank you so much!

  • @HonorLone
    @HonorLone Рік тому

    short and informative
    thanks!

  • @shobeon
    @shobeon 2 роки тому

    What a nice tips! gonna try it

  • @INeatFreak
    @INeatFreak 2 роки тому

    Quick and accurate! Great video 👍

  • @ZeroStas
    @ZeroStas Рік тому

    Perfect tutorial

  • @marshallross3373
    @marshallross3373 Рік тому

    Great tips! Thanks!

  • @AndrewDreamKeeper
    @AndrewDreamKeeper 6 місяців тому

    thnks dude! powerfull information 👍

  • @gabangang5093
    @gabangang5093 3 роки тому

    Nice tips, 800th subscriber. :D

  • @luizfellipe1206
    @luizfellipe1206 3 роки тому

    Very intuitive instructions 10/10

  • @magickomchanell4556
    @magickomchanell4556 Місяць тому

    this is super helpful!

  • @jusdoit967
    @jusdoit967 2 роки тому

    Thank you man i wish if i saw your video before now

  • @limsengyong2122
    @limsengyong2122 3 роки тому

    very well-explained, thanks for the tips!

  • @bambusz0131
    @bambusz0131 2 роки тому

    Very good and helpful! Thanks!

  • @Banaaani
    @Banaaani Рік тому

    Thanks. This is insanely helpful.

  • @mimsii4200
    @mimsii4200 8 місяців тому

    Really cool, thanks!

  • @refi350
    @refi350 Рік тому

    I would probably add a fifth point to optimization to disable your own custom gizmo, when checking performance. I was wondering why my project was staying at 30 FPS, when I had very unoptimised gizmo running in background 😅

  • @gameplayhubindia
    @gameplayhubindia 2 роки тому

    Awesome Tutorial

  • @aussieraver7182
    @aussieraver7182 2 роки тому

    This is amazing!

  • @kevinramirez-rq8sy
    @kevinramirez-rq8sy 2 роки тому

    Very well explained!

  • @yatah
    @yatah 3 роки тому

    Very clear and helpful vid! thx!

  • @TruGameRage
    @TruGameRage 2 роки тому

    wow this was informative! thanks a lot

  • @StarkTech47
    @StarkTech47 Рік тому

    Awesome video, short, detailed with very good explanations and demonstrations, great job ! I have a question, for the GPU instancing on the material. We see in the video all building moving but how did you do that ? I suppose it thanks to compute shaders or by C# script ?

  • @muazzamshahzaad6309
    @muazzamshahzaad6309 3 роки тому

    need more content!

  • @missing_the_texture
    @missing_the_texture 2 роки тому

    thank you

  • @jonajo261
    @jonajo261 3 роки тому

    GREAT VIDEO MAN

  • @mohammedmurad7725
    @mohammedmurad7725 2 роки тому

    Thanks, REALLLLLY THANKSSSS.

  • @Iboshido
    @Iboshido 2 роки тому +1

    Can i set objects to static which are animated, but still dont move. For example a 2D character who has a child object arm that is waving

  • @in801fo5
    @in801fo5 2 роки тому

    Thank you, keep up the good work! :)

  • @narendrakumarjha734
    @narendrakumarjha734 2 роки тому

    you saved me. thanks man!

  • @ClintochX
    @ClintochX Рік тому

    Thanks so much for this video

  • @user-uk9er5vw4c
    @user-uk9er5vw4c Рік тому

    awesome!

  • @onemanonmars6478
    @onemanonmars6478 Рік тому

    Great video! Thanks-

  • @a6gittiworld
    @a6gittiworld 7 місяців тому

    thanx for these tips

  • @oozly9291
    @oozly9291 3 роки тому

    Great help!

  • @nanoux
    @nanoux 9 місяців тому

    Hey there! thanks for the great tutorial, really helped me understand this concept, but i have a question now... what if my game is 3d tile based, and these tiles are destructible and walkable? i need them to be individual units but a scene can have around 100K of those tiles... how can i go about it? the tiles are pretty simple already! would really appreciate your input. 🙏🏽