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 ?
Answer by Murcho
Jan 02, 2010 at 12:42 PM
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.
Thank you very much. Your answer clears up many things. I wasn't aware that draw calls were actually a cpu issue.
Ideally, I would like my game to run on recent notebooks with the ion platform, which often come with really light cpus, so I don't think I am fill rate limited, and reducing cpu charge is definitely an issue for what I am trying to do.
Thanks again for a very instructive post.
According to unity docs (http://docs.unity3d.com/Manual/DrawCallBatching.html) "Draw calls are often seen as expensive [...] However this is not the case. [...] The emphasis should be on reducing the batch count, rather than the draw call count. [...] Only objects sharing the same material can be batched together. Therefore, if you want to achieve good batching, you need to share as many materials among different objects as possible."
Answer by MoliCat
Nov 24, 2014 at 11:31 AM
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
Answer by David 3
Mar 31, 2010 at 01:55 PM
Maybe someone could details ways to reduce Draw Calls here ?
for example combining meshes
Separate issue, I'd actually recommend opening a question on "what's the best way to reduce draw calls", or something to that effect.
Done - see http://answers.unity3d.com/questions/7247/whats-the-best-way-to-reduce-draw-calls
Answer by kolmich
Jun 29, 2013 at 07:15 AM
This answer is more related for mobile than PC:
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: http://u3d.as/4Wg
If you have any questions or suggestions just contact us here: email@example.com
Which devices have max 30 DCs?
Any 2nd Generation Iphone, I think even the Iphone3G, anything below an ARMv7 CPU, I've never heard of a max amount of DCs but more than 30 with ~10000 tris will drop below 30FPS for sure on any pre ARMv7 device
I think here in 2013 we can safely ignore iPhone2 and still make a profit, right? :P
The Xperia Z (Android ofc) can stack ~450 DCs and around 400k tris before you see an impact, providing physics arent heavy. Of course, the technology is much more advanced.
Answer by MrRoboBrain
Oct 05, 2013 at 12:36 PM
if you use NGUI toolkit from asset store you can pack all your needs in 1 draw call, i know it sounds crazy, but it is that awesome :D
Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.
The best place to ask and answer questions about development with Unity.
To help users navigate the site we have posted a site navigation guide.
If you are a new user to Unity Answers, check out our FAQ for more information.
Make sure to check out our Knowledge Base for commonly asked Unity questions.
If you are a moderator, see our Moderator Guidelines page.
We are making improvements to UA, see the list of changes.
Answers and Comments
5 People are following this question.
Floor tiles - one big texture or many different prefabs?
what's the best way to reduce draw calls?
Help with performance
Will unity sort Drawcalls to reduce overhead ?
Drawcalls or Batched, which is more important to performace?