Is it impossible to keep Draw Calls low?

This is because of how the renderer works. The more features you have in your shading pipeline, the more draw calls will be needed for things like virtual textures, shadows, real-time light propagation, and so on. While there certainly exist cases where you can optimize draw calls (by using instancing, for example,) it seems to me like the reason Unity has fewer draw calls, is not that it’s “optimized more,” it’s that it “does less.”

(Which, if you’re targeting lighter weight clients, phones, and so on, might be exactly what you want. Not every player in the world has a D3D12 capable PC or console …)

Yes, “draw calls” can take GPU time, too; typically because of shader/state switching/setup time. So, as suggested above – if all you do is poke another scalar shader parameter in, the switching cost on the GPU will be minimal. If you need to set up different shaders, render targets, and texture formats, the switching cost on the GPU will be higher, potentially by many orders of magnitude.

“draw calls” isn’t a particularly helpful metric all on its own. You have to know what those calls are doing!

3 Likes