so i tried a very simple low poly charcter but still number of verts and tris exploded when i tried to make it look like semi full stadium not even full.
Unity - Manual: GPU instancing and GitHub - sugi-cho/Animation-Texture-Baker: 頂点の位置と法線を、Texture2Dに保存しておく。ARGBFloatとか、HDR Textureを使用したバージョン
This is just me pointing you in the right direction. Instead of using skinned meshes and low poly characters, use low poly characters and GPU instancing with the animation data baked into a texture that changes vertex positions in a shader. You’ll still get high polycounts but you’ll be able to leverage the power of the GPU to handle it a lot better this way.
Instancing or cardboard cutouts. No skinned meshes.
If you feel like it, a single mesh group multiple character (cardboard or polygonal), animated with the shader math, and these group are instanced. Cheering animation are super simple and can be handled by very basic math (sin).