UnityはLODGroupというコンポーネント使うことでLOD実現できます。一方でググってみたところキャラクターに関しては2種類のアプローチがあるみたいです。
複数ANimator持ち
単純かつ、正攻法です。
メリット
- ボーンの少ないモデルにも切り替えれる。(スキニングコストを減らせる!!、FadeMode=Noneの場合だけど…
デメリット
- Animatorが複数あるので、それぞれsyncさせるないといけない
- Ragdoll , Dynamicboneなどで破綻(そもそもsyncできない
一つのAnimator
メリット
- 複数Animatorのデメリットが無い
デメリット
- ボーンの少ないモデルに切り替えできない…
- もしかしたらメッシュをバインドすればするほどスキニングコスト上がる? ※後述の懸念点
まとめ
互いに相反関係にありますね(ちなみにどちらでも頂点負荷減らせます
実際に両方試した感じでは、
数が多く見た目多少破綻してもいいNPCは複数Animator(FadeMode=None
見た目の破綻許せない主人公や重要NPCは一つのAnimator(もしくはLOD無し)といった使い分けがよさそうです。
モバイルでは、キャラたくさん出すとスキニングコストが跳ね上がります。compute skinningやoptimize gameobjectしても限界あります。そういう時に骨の数を極限まで減らしたLODモデルを用意しておくと見た目のクオリティとパフォーマンスのバランスが良くなります。(もちろん元々骨少なければスキニングコストは問題にならないんですけどね
Culledのおかげで、遠すぎるやつは消えてスキニングコストも消えてくれます!
懸念点
『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について
LOD用メッシュをアニメーターに追加バインドした結果、スキニング更新に掛かる負荷によってFPSが下がった
この状況の詳細が分からなくてモヤモヤしてます。一つのAnimator手法でしょうか?