XaiJu
Maron_Vtuber
Maron_Vtuber

fanbox


【検証】Unityで何体までアニメーションできる?

こんにちはっ🌟八ツ橋まろんです


Unityを使ってちょっとした実験をします。


題して『Unityで大量のキャラクターをアニメーションさせると何体出せるのか?』


以下は、キャラクターを10体アニメーションさせた例です。

CPU: Core-i7 14700F

GPU: RTX4070 SUPER

10体程度では、320FPSと非常に高速に動いています。さすがハイエンドPC✨


次は100体です。78FPSまで下がってきました。


500体です。20FPS。このあたりが限界のようですね。


よくみると、Batchesが31895、Shadow castersが12400となっています。

・Batchesは描画処理の回数なので、1メッシュで1マテリアルのキャラクターにすれば軽量化できそうです。

・Shadow castersは影の描画なので、シャドウ無しにすれば軽量化できますね。


500体を1メッシュ1マテリアル、シャドウ無しでアニメーションしました。90FPSまで回復しています。


3000体を描画&アニメーションしています。18FPSです。


先ほどの20FPSと比べて、Batchesは6000程度、Shadow castersは0なのでかなり軽い状態なのですが、FPSが低いですね。


Skinned Mesh(ボーン変形できるメッシュ)が3000で、有効なAnimatorが3000なので、これらがFPS低下の原因のようです。


3000体をTポーズ状態(アニメーション無し)で並べても、22FPSであまり改善しません。


どうやら、Skinned Mesh(ボーン変形できるメッシュ)がボトルネックになっているようです。


Skinned Meshは、ボーン変形で頂点の位置が変わるので、頂点の位置を毎フレーム計算する必要があります(スキニングという)。これを3000体分計算するので重くなります。


以下のProfilerの内容を見ても、3000体のスキニングでGPUが50ms(= 20FPS)かかっていて、これがFPS低下の主な原因だとわかります。


このスキニングは、頂点の数を減らすと多少マシになります。


先ほど8000ポリゴンの身体を3000体スキニングして22FPSでしたが、

800ポリゴンにすると50FPSになりました(画像無し)


ただ、ここから5000体、10000体とキャラクターを増やすことはできなさそうです。

ということで、


『Unityで大量のキャラクターをアニメーションさせると何体出せるのか?』

➡『ハイエンドPCでは3000体が限界』という実験結果になりました。



、、、と言いたいところですが、これは通常のアプローチで愚直に行った場合の話💡


GPUアニメーション(シェーダーアニメーション)とUnity ECS(Entity Component System)を使うと、大量のキャラクターをアニメーションさせることができます✨


(以下は、約1万体の観客をアニメーションさせて110FPS)


ということで、いずれ紹介するのでお楽しみに!!

【検証】Unityで何体までアニメーションできる? 【検証】Unityで何体までアニメーションできる? 【検証】Unityで何体までアニメーションできる? 【検証】Unityで何体までアニメーションできる? 【検証】Unityで何体までアニメーションできる? 【検証】Unityで何体までアニメーションできる? 【検証】Unityで何体までアニメーションできる? 【検証】Unityで何体までアニメーションできる? 【検証】Unityで何体までアニメーションできる?

More Creators