I am making a game which I plan to distribute as a stand-alone pc application. I have put much effort into reducing processor charge for the game to be able to run on low end processors, but I have noticed I have nearly 400 draw calls in heavy scenes, which seems pretty high based on what I have read on the forums.
So, assuming processor charge is not a bottleneck, how many draw calls should I target in order for my game to run smoothly on low-end computers (say 3-4 years old graphic cards) ? what about recent configurations ?
The project I was working on recently managed just under 2000 draw calls on a 6800GS 128MB running at 1280x1024 resolution. The only thing that bottlenecked it was when the texture memory required rose over that 128MB mark, and obviously the card couldn't load everything in at once. That was our minimum target graphics card for what we were attempting to do.
At 400 draw calls, you shouldn't be stressing the system too much, but it all depends on what graphics cards you intend to target. Integrated GPU's with shared RAM may have issues with this level of draw calls. My best recommendation is to pick a target low end platform, and make sure your game runs smoothly on it at a decent resolution. You could pick up the parts to build such a system off eBay quite cheaply.
You should also note that Draw Calls are actually a bottleneck largely dependent on the CPU. They are generated each time the CPU has to send data to the GPU for processing. GPU's are very good at processing large amounts of data very quickly, but they are not good at changing what they are doing, hence why batching work into larger units can benefit your performance greatly. So don't apply all your testing based solely on GPU's, as CPU's have a greater effect when your performance is Draw Call limited. If it is fill rate limited, then it becomes a matter of the power of the GPU.
To determine if you are fill rate limited or draw call limited is simple. Run an FPS (Frames Per Second) monitoring program in the background like FRAPS to monitor your performance, and play through a sample of game at your highest available resolution, then again at a much lower resolution. If you game performance changes dramatically, then your game performance is fill rate limited, and you should look at the shaders you are using for better performance, along with the GPU. If the performance change is minimal, you are draw call limited, and should look at reducing the number of draw calls through batching or lower the number of objects visible at any one time.
It easy to check just build and play you can feel the speed and performance !
For mobile devices numbers should be 40 to 60 and for latest mobile devices you can go upto 120 to 160.
The good and i think best way i found to reduce drawcalls is to use purdyjo’s free plugin call"Drawcall minimizer" it amazing you can see it in action Here
We found out, that unity3d skybox is using up to 6 drawcalls! This is guite a problem on devices having limits of max 30DCs!
We solved this by implementing KGFSkyBox which reduces the drawcalls to 1 if you have terrain (Hides bottom sky hemisphere). If you do not use terrain KGFSkyBox will render using 2 drawcalls which is still better than 6!
Check it out here:
If you have any questions or suggestions just contact us here: support@kolmich.at
My Tomb Raider 1 FPS project run at ~8 drawcalls in game, ~12 menu config on medium settings, on lowest it runs at 4 and has even reached 3… xd (I wanted to test how much I could optimize my game hahaha guess I have achieved a good result…)