Need help to understand drawcalls in my scene

I’m gonna mark the above as a solution although there’s no single solution/answer to this.
I’m still working on the entire thing and (again) made some findings on the way, this time regarding the ‘inter-frame’ load, increased by redundant calls on animations and stuff.

Quick update: I’m done now with my ‘rooms/interiors cleaning’ phase and got some very good results on the number of draw calls in most situations (30-50% less draw calls). At this point, I’m still wondering (QUESTION) if it’s better to make the hierarchy notVisible or not Enabled while having to get all descendants to set the state OR simply push the parent out of the maxZ of the camera? May be @Evgeni_Popov you could once again enlight me towards this?

Else, as per the title of the post, and for anyone reading this, I will try to resume some of my findings:
DRAW CALLS in a scene can be added to the original single draw call of mesh or instance by:

  1. Post-process. Anything in PP that creates another pass in the depth renderer such as gl, hl, glow
  2. Depth renderer. A custom depth renderer to sort objects in scene
  3. Showing bouding-boxes (one of my very late findings when I suddenly realized that showing the bouding box of mesh in the Inspector to help me identify the mesh actually creates an additional draw call)
  4. Merged meshes with multimat set to ‘true’ (even though all meshes would use the same material)
    … And then the list most probably extends.

For the sake of others finding their way around this (rather complex) topic, I’m also gonna link this post with this previous one:


At this moment, as a conclusion - and whilst I still have loads to learn about perf gain and scene optimization - my thought are that:

  1. There is no single, one-fits-all, way of optimizing a scene.
  2. I also think that in most cases, the strategy and the methods used are “a compromise”. I.E. Older and low-perf GPU’s eventually deal better with clones rather than instances (up to a certain amount). I.E It might be better to try balance the FPS between the case where all objects are in frustrum or only few. Seeing FPS drop from 200 to 15 or the other way round doesn’t feel like a good experience to me.
  3. Multiple calls on pseudo scene-optimization features with exceptions on each frame might not always be a good method (and could even harm perf). Colliders and complex checks on runtime should also be avoided if possible.
  4. It’s sometimes better to have less meshes (even a bit bigger) rather than lots of instances.
  5. There seem to be kind of a limit to avoid with the number of meshes and drawcalls (above which normal/average GPU perf will start to drop quite dramatically).
  6. Of course, not discussed here - the load on textures and materials also needs to be considered…

So, ‘Yes’, a fairly complex topic for a simple designer like me… and to be honest, one I do not really enjoy working-on. :sweat_smile: Though, I agree it is of great importance to the overall experience - reason why I will continue to work it until I get at least a reasonable quality towards this aspect.

Again, Thanks (Everyone) for your insight and support on this.

1 Like