Unity Skinned Mesh Renderer & Rendering Optimization

I have been researching for a long time about how to run min 100-200 characters (skinned mesh) on mobile in an optimized way.

Ways i tried:


  • Animation Instancing
  • LOD
  • Decimating Meshes (3000-6000 tris max I got)
  • Culling
  • Instanced blob shadows (just quads)
  • Simple Shaders (Just texture no extra things like mobile shaders)
  • Mipmaps

I don’t have a problem with the code (2-3 ms max) 200-300 NPCs going around are just structs and a different mono behavior manipulates them.


But while trying all these, all the usability of the game almost disappeared thanks to the animation instance. I can’t use Animator the way I want, animations have become pure torture.


And also in the SRP batcher, I guess it doesn’t cover skinned mesh.

I’m very curious what you can suggest.


Thanks

You could try Vertex Animation Textures to allow instancing of animated characters, however I’ve been researching a similar problem recently (I even had a target of 200 characters), testes various techniques, evaluating their pros and cons… and ended up doing skinned meshes with animator. The triangle count was a bottleneck and instancing, SRP batches, dynamic batching, or any draw call reduction technique had basically no effect on the final FPS. Animator ended up being more performant than VAT, although not by much.


I convinced the art team to produce 500 triangle characters for the lower end devices, and it works.