Question on GPU Compute Skinning vs. SRP Batching

Hey all, I’m working on a crowd scene with ~50 animated characters and I’m targeting mobile VR, so performance is important. It appears draw calls are my main bottleneck so I looked into reducing draw calls for skinned meshes, but am a bit confused around what the best practice is for URP.

All 50 characters use the same mesh and same materials. Here you can see the stats and frame debug without any optimization:
9187166--1280198--Group 2.png
The stats window reports ~50 FPS with 300+ batches. My first point of confusion is where the 300 batches comes from, since I believe that the characters are being rendered as part of the GPUSkinning call, and the debugger only reports ~180 of those.

My next step was to disable GPU Compute Skinning in the Player Settings:
9187166--1280207--Group 1.png
You can see here that the number of batches is more or less the same, but the draw calls (which are contained in the MainLightShadow, DrawOpaqueObjects, and DrawTransparentObjects categories in the debugger) is down to ~12. This seems way more efficient, yet my FPS goes down to 35.

So my main question is, what’s the best practice when rendering multiple of the same animated skinned mesh renderers when using the URP?

it depends on the platfrom.

If you can use instancing, and all character are identical, then you can draw them even from a script for maximum performance.

But if you cannot, and each character is unique, the only possible batching using the old method is to animate it by a shader ( which sucks generally )

The new GPU skinned mesh batcher as I understand just batches togheter the intermediate vertex transformations on the GPU, done with an hidden internal shader.

The mesh itself will always be batched by SRP, if you are using that method, or GPU instanced if you are using that instead.

You are rendering the same mesh TWICE, transforming the vertices first, then rendering the mesh.

Each are capable of being batched individually, in separate stages.