🏎️ Unity でパフォーマンスを最適化する方法
以下の方法では、GPU パフォーマンスをある程度最適化できます。
マテリアルで使用する機能 / テクスチャ数を減らす
edge detection の種類を減らす
以下の方法は、CPU と GPU の両方を大きく最適化できます。
skinned mesh の頂点数 / 頂点情報を減らす
skinned mesh に LOD を設定する
GPU Skinning を有効にする(GPU Bound でない場合)
同じキャラクター内の複数 material を統合し、skinned mesh renderer と material の総数を減らす
Skinned Mesh LOD の例
以下は CPU skinning(Unity のデフォルト設定)を使ったプロジェクトの例です。シーン内に 15 体のキャラクターを配置しており、各キャラクターモデルは 19,000 ポリゴンです。
Runtime 時の FPS はおよそ 85 でした。
3 段階の LOD を使用すると、FPS はおよそ 120 まで向上し、CPU に対して大きな改善が見られます。


異なる LOD の mesh を同一キャラクターの骨格にバインドする方法については、以下を参照してください。
Reuse skeletons for Unity LODGroup
In this holiday themed blog post we'll showcase how to reuse skeletons for different LOD levels in Unity. As an extra spice we will also throw in Bone Reduction for our last LOD level.
GPU Skinning
Unity には GPU Skinning 機能があります。skinning の計算を CPU から GPU の compute shader に移すことで処理を高速化できます。対象ハードウェア / プラットフォームに独立した GPU(グラフィックカード)があり、かつプロジェクトが GPU Bound でない場合に効果的です。
3 段階の LOD を使用し、さらに GPU Skinning を有効化すると、パフォーマンスはおよそ 200 FPS まで向上しました。

💡 このページのテスト環境は以下の通りです。
CPU : Ryzen 7 5800H
GPU : RTX 3060 Laptop