For crowds, theres a few things you need to keep in mind for content creation -
Mainly, beyond skeleton complexity, amount of skinned vertices on screen plays into tanking your frame rate. LODs, generally cheaper meshes, and skinning influences help - but the amount of characters on screen regardless is going to give you issues and something you need to build assets around. Basically, find a budget that works for gameplay and create within that.
Then, the amount of unique assets being called will also lead to framerate issues. So. If you have different models, different materials, different textures, etc. the renderer is making those trips each time. Doing tricks like palette swapping (think L4D did this pretty heavily and actually did a talk on it), model visibility (like you have all elements within one model and toggle visibility on spawn so all of the zombies live in one file…) and texture reuse help out…
On Dead Rising 2, we used a few different techniques to render huge crowds, but you really need to create assets with this plan in mind. Essentially, we had the main group then stand out characters you can’t repeat (like cops or construction workers), the main group had basic clothing altogether and (if I remember correctly) had all of the clothing mapped to 1 or 2 texture sets which were then palette swapped for variety. We also used an incredibly aggressive LOD system that degraded rigged characters into a sea of moving static meshes through code, then sprites (like a card with a texture of a zombie on it way in the back…)
There is a balance to everything, and with crowds this massive you need to concede a bit of quality for quantity - like @jwatte says above. Look at it in context, though, even something like Days Gone is a sea of enemies where a super cheap mesh or light skeleton won’t matter, you’ll never see it. With the chaos and pure number of things trying to kill you on screen to look at, you won’t notice more harsh deformations.
Edit> Oh, and shader complexity LODs. Kill off extra textures and the bells and whistles you won’t notice at a distance. Remove things like forward pass shading (skin, hair, cloth…) and put it as a basic material. Sure, it’s not as cool, but it’s cheaper to render and most people won’t notice unless they really analyze it.