Hi,
I've been working on my own indie game (Shh,Zombies) for over a year now, recently released on the Windows Store (
shameless plug).
Being a completed noob with all things art related, I chose to use a program called Qubicle (
http://www.minddesk.com/qubicle1/). I like the style I've "created" with Qubicle, and it allows me to throw together models quite quickly.
However, as this example shows, it's exporting isn't that great:
http://www.screencast.com/t/jJMgPQTcS1DB In Qubicle, there are several different matrices making up the model, which I then exported as 1 model/ mesh.
And as you can see, in game this has an extremely high amount of Tris/ Verts.
http://www.screencast.com/t/rhatF2ci5Nh
To help lower Tris and Verts, I went back into Qubicle and simplified many aspects (changing the fence so it's just a cube, removing raised elements from the house, etc) and exported segments seperately. This improved things greatly (from 14k verts down to 1.6k)
http://www.screencast.com/t/pgdJAOM0Bs
Looking at the same scene in Unity, using this new model, lowered the verts vastly too, from 1.7M down to 345.9k. However, the draw calls shot up a lot too, from 748 (438 batched) to 1452 (1209 batched);
http://www.screencast.com/t/8i4Q2wkv (there are other models in this scene I haven't attempted to optimise yet).
I can account for some of the new draw calls, because I've gone from 1 mesh to 8 unique meshes (more if the fence/ gate aren't being batched like I think), each with their own material.
So, to my actual question: What should I be doing to get as low a draw call as possible, along with as few tris/verts?
As I said previously, I'm a complete noob with all things art related - it took me ~30mins to find how to display stats (by pressing 7) in 3DS Max - so please feel free to dumb things right down.
Hopefully this is all clear and understandable, I will be greatly appreciative of any help offered.
Replies
The best thing you can do to optimize for mobile, for starters, is having as few materials as possible in your scene...unless you're clever about creating one large texture for a large swath of objects at once, you'll likely have to look into a process called "atlasing" to do this (short version...shifting UVs on your meshes around to all fit in one large UV space, then baking down your textures from the current to the new ones to end up with one mega texture).
On mobile you ideally want to use the cheapest shader possible. It's a general rule for us to use the "mobile unlit (supports lightmaps)" shader for static objects in the world, and then as cheap as a shader as you can for dynamic objects that supports light probes (mobile diffuse, for example).
Anything skinned should only ever have one material on it, you get an extra draw call per material added on.
Cutting the native resolution down a third or even half will help you a lot with performance, too. I really recommend bracketing this with a real low-end resolution, then jump up and see if you truly notice a big difference.
Everything in our game at my studio is using lightmaps for baked and light probes for dynamic and no post processing. We don't use spec maps or normal maps, detail is baked into the textures. We've not been great about using a small handful of materials, that's a goal I'd like our art team to try and tackle next. We're maintaining a solid 30-45 frames for the most part.
Hope this helps!
--Josh