Optimize 2000 animated enemies

I did a couple of tests a while ago with 2k enemies and my framerate didn’t go above 45.
They were composed of 2k GameObjects containing each: a Animator and another GameObject containing: SkinnedMeshRenderer(3 materials).

I heard that you can have a single object that calls Graphics.DrawMesh, but there is no ‘Graphics.DrawSkinnedMesh’. There is the ‘SkinnedMeshRenderer.BakeMesh’ but there is no place to send the Animator as a parameter.

I would consider increasing the number of enemies, but not decreasing it.

After about a day tweeking stuff, i’ve managed to get something done, though the solution is not what i’d want, it works.

Each frame, i set the Animator to play a certain clip at a certain timeframe, then on the next cycle, i fetch the updated and skinned mesh from the SkinnedMeshRenderer with BakeMesh.

That is a terrible solution, but it works, you can speed it up by making more Animator + SkinnedMeshRenderer, etc…

Now i can use Graphics.DrawMesh to draw the far away enemies, having only 50 or so being actually rendered by SkinnedMeshRenderer.