Can't get dynamic batching to work unless the mesh has a crazy low vert count.

I’m making a mobile game for Android that constantly has 50-100 cloned prefabs on screen at once. I read the documentation on getting dynamic batching to work and my objects that I want to batch are all well within the guidelines, but they won’t batch. The materials are shared, they’re not scaled, under 450 vertices, simple mobile shaders, etc.

I found I could get the batching to work if I replaced the mesh with a cube and realized that maybe the problem was my mesh had too many vertices. So I started reducing verts in the modeling program to see how low I need to get it and I found the magic number was 128!

This was with no other changes, just deleting verts in the original model and exporting. When I changed the model it would go from batching to not and back again even while the game was still running.

I was also able to get slightly different results with a few different shaders, but none of the shaders (not even the mobile/unlit shader) could batch with more than 180 vertices. This is way too low, there needs to be a better way.

So is there a shader out there that can put a basic texture on a mesh with under 450 verts (or at least 300) and hopefully also a specular level and still batch? Is there something else I’m missing? Or am I asking for too much and I should just expect the 100+ draw calls this causes?

@DFledermaus Just to show you what @tanoshimi meant, following is from the Draw Call Batching from the manual.

  • Batching dynamic objects has certain overhead per vertex, so batching is applied only to meshes containing less than 900 vertex attributes in total.
  • If your shader is using Vertex Position, Normal and single UV, then you can batch up to 300 verts; whereas if your shader is using Vertex Position, Normal, UV0, UV1 and Tangent, then only 180 verts.