次の項目は別ページに分割しました。
関連ページ:
グラフィックス
ドキュメント:
グラフィックスパフォーマンスの最適化 | Unity 2020.3 マニュアル [公式]
設定
ドキュメント:
レンダリング設定 | Unity 2019.4 マニュアル [公式]
レンダリング統計ウィンドウ (Stats)
ゲームビューの右上方にある「Stats」ボタンで「レンダリング統計ウィンドウ」の表示/非表示を切り替える。
Graphics
- FPS:フレームレート
- CPU
- Main:1フレームの処理に掛かった合計の時間
- Render:ゲームビューの描画に要した時間
- Batches:1フレームに処理が必要なバッチ数 (静的バッチ、動的バッチ、GPU インスタンシングの全てを合計した値)
- Saved by Batching:バッチングにより節約されたバッチの数
- Tris and Verts:三角ポリゴンの数、及び、頂点の数 (ローエンドデバイスでは重要となる)
- Screen:画面サイズ、及び、使用しているメモリ量
- SetPass Calls:セットパスコール (シェーダーパスを切り替える回数)/シェーダーパスの切り替えにより CPU オーバーヘッドが発生する。
- Shadow Casters:影を生じるオブジェクトの数
- Visible Skinned Meshed:Skinned Mesh Renderer の数
- Animations:再生状態にあるアニメーションの数
ドキュメント:
Rendering Statistics Window | Unity 2020.3 マニュアル [Official]
参考:
Stats ボタンでレンダリング統計ウィンドウを確認する | MR が楽しい
レンダリング統計ウィンドウ | Unity マニュアル [公式]
ドローコールバッチング
- 動的バッチ処理
- 静的バッチ処理
レンダリング統計ウィンドウ
ゲームビューの右上方にある「Stats」ボタンで表示/非表示を切り替える。
- Batches:処理が必要なバッチ数
- Saved by batching:バッチングにより節約されたバッチの数
ドキュメント:
ドローコールバッチング | Unity マニュアル [公式]
レンダリング統計ウィンドウ | Unity マニュアル [公式]
参考:
ダイナミックバッチングによる描画順序の処理最適化 – Qiita
バッチングでドローコールを減らす | りつかのゲーム開発雑記ブログ
ドローコールを減らすためにいま僕たちができること | エクスプラボ
負荷対策をしたいからレンダリングの仕組みを調べてみた | gracetory’s blog
ライティング (Lighting)
- 頂点ライティング:メッシュの頂点でのみライティングの計算を行い、サーフェス上では頂点における計算結果を補間する。
- ピクセルライティング:全てのスクリーンピクセルにおいてライティングの影響を個別に計算する。
Render Mode
- Auto:ライトの明るさと Quality の設定に応じて自動的に決定する
- Important:ピクセルライティングを優先的に使用する
- Not Important:ピクセルライティングを使用しない (頂点ライティングあるいはオブジェクト単位のライティングが使用される)
ドキュメント:
ライトのトラブルシューティングとパフォーマンス | Unity 2018.4 マニュアル [公式]
ライティングの手法 | Unity 2019.4 マニュアル [公式]
シャドウ
シャドウディスタンス
「シャドウディスタンス」 (Shadow Distance) で指定されたよりカメラから離れているオブジェクトの影は描画されない。
シャドウマップのサイズ
スポットライトあるいはポイントライトは、スクリーン上に投影されたライトの形状の幅、あるいは高さのどちらか大きい方がそのライトのピクセルサイズとなる。
Unity 2018
解像度 High
の場合に、シャドウマップのサイズは次のように決定される。
- ディレクショナルライト:ピクセルサイズの
1.9
倍より大きな最小の 2 のべき乗/最大2048
- スポットライト:ピクセルサイズより大きな最小の 2 のべき乗/最大
1024
- ポイントライト:ピクセルサイズの
0.5
倍より大きな最小の 2 のべき乗/最大512
グラフィックスカードが 512 MB 以上のビデオメモリを持っている場合、シャドウマップの最大値は、ディレクショナルライトで 4096
、スポットライトで 2048
、ポイントライトで 1024
まで拡大される。
- 解像度
Middle
:High
の半分 - 解像度
Low
:High
の4分の1
ポイントライトはシャドウマップとしてキューブマップを使用するため、6面のシャドウマップを使用する。
ドキュメント:
ライティングの手法 | Unity 2019.4 マニュアル [公式]
シャドウのトラブルシューティング | Unity 2019.4 マニュアル [公式]
ライトのトラブルシューティングとパフォーマンス | Unity 2018.4 マニュアル [公式]
シェーダー
ドキュメント:
シェーダーのパフォーマンス | Unity マニュアル [公式]
シェーダーを書く場合のパフォーマンスのヒント | Unity マニュアル [公式]
PIX
→ Download
動画:
入手:
Download – PIX on Windows | Microsoft DevBlogs [Official]
ドキュメント:
PIX を使った DirectX 12 シェーダーのデバッグ | Unity マニュアル [公式]
Documentation – PIX on Windows | Microsoft DevBlogs [Official]
参考:
GPU Captures – PIX on Windows | Microsoft DevBlogs [Official]
Introduction – PIX on Windows | Microsoft DevBlogs [Official]
視聴:
モデル/アセット
ドキュメント:
最適なパフォーマンスのためのモデル作成 | Unity 2020.3 マニュアル [公式]
アートアセットのベストプラクティスガイド | Unity 2019.4 マニュアル [公式]
物理演算
ドキュメント:
物理演算のパフォーマンス最適化 | Unity マニュアル [公式]
キャスト/メンバーキャッシュ
- GetComponent
- キャスト
- メンバーキャッシュ
参考:
Rect Transform をなるはやで取得したい – Qiita
オクルージョンカリング
ドキュメント:
オクルージョンカリング | Unity 2018.4 マニュアル [公式]
Occlusion Culling | Unity マニュアル [公式]
インポスター (Imposters)
参考:
アニメーション
ドキュメント:
パフォーマンスと最適化 – アニメーション | Unity マニュアル [公式]
スクリプト (C#)
参考:
今日からできる C# のパフォーマンス改善小ネタ 11選 – Qiita
Unity 開発における C# のパフォーマンス最適化の Tips | 夜中に Unity
foreach が for 文に処理速度で勝つとき | はなちるのマイノート
文字列 (String Builder)
ドキュメント:
StringBuilder クラスを使用する | Microsoft Learn [公式]
StringBuilder | Microsoft Learn [公式]
参考:
ループ内での文字列結合は + じゃなく String Builder を使っとけ | LIGHT11
リスト (List)
参考:
List オブジェクトの Capacity の変化を観察する | 創造的プログラミングと粘土細工
LINQ
参考:
LINQ のパフォーマンス検証 | KAYAC engineers’ blog
メモリ/ヒープ (GC)
ドキュメント:
ガーベジコレクターの概要 | Unity マニュアル [公式]
インクリメンタルガベージコレクション | Unity マニュアル [公式]
リンク:
インクリメンタルガベージコレクション – 機能プレビュー | Unity Blog [公式]
参考:
Unity で採用されている GC の仕組みと Unity 2019 からのインクリメンタル GC について | LIGHT11
Unity の GC はどんな実装になっているのか | Aiming 開発者ブログ
Garbage Collector Integration – IL2CPP Internals | Unity Blog [Official]
ベストプラクティス
ドキュメント:
ベストプラクティスガイド | Unity 2019.4 マニュアル [公式]
Unity Learn
Fixing Performance Problems | Unity Learn [Official]
Optimizing for Performance | Unity Learn [Official]
Optimizing Graphics | Unity Learn [Official]
Optimizing Unity UI | Unity Learn [Official]
Diagnosing Performance Problems | Unity Learn [Official]
まとめ/Tips
GPU のボトルネック
- フィルレート
- メモリ帯域
- 総頂点数:モバイルでは 10 万以下、PC では数百万程度は場合によって可能だがなるべく減らす
CPU のボトルネック
- バッチ数
負荷の高い要素
- スキンメッシュ (Skinned Mesh Renderer)
- クロスシミュレーション (Cloth)
- パーティクル (Particle System)
- ゲームオブジェクトやメッシュを大量に使用する場合は負荷となることがある。
対策
- 不要な影 (シャドウ) を無効化する
- 静的バッチング → シーン内で動かないゲームオブジェクトを「Static」に指定する
- マテリアルをまとめる
- テクスチャをまとめる → テクスチャアトラスを使用する
- メッシュを統合する
- ポストプロセスを最適化する
- ミップマップテクスチャを使用する
- LOD
- レイヤー別にカリング距離を設定する
- リアルタイムシャドウを最適化する
- オクルージョンカリング
リンク:
モバイルゲームのパフォーマンスを最適化しよう | Unity Blog [公式]
参考:
今日からできる C# のパフォーマンス改善小ネタ 11選 – Qiita
Unity 開発における C# のパフォーマンス最適化の Tips | 夜中に Unity
ドローコール (Set Pass Call) を減らす方法まとめ | おもちゃラボ
Scene Optimization | Procedural Worlds
資料
一歩先の Unity でのパフォーマンス/メモリ計測、デバッグ術 – SlideShare
最適化をする前に覚えておきたい技術 – SlideShare
その最適化、本当に最適ですか!? 正しい最適化を行うためのテクニック – SlideShare
ドキュメント
グラフィックスパフォーマンスの最適化 | Unity マニュアル [公式]
チュートリアル
実践的なパフォーマンス分析と最適化 (Unite Tokyo 2018)
Introduction Profiler (Official)
Practical Guide to Profiling Tools
Adaptive Performance
公式サイト:
Adaptive Performance | Unity Manual [Official]
パフォーマンスチューニングバイブル
リポジトリ:
参考:
社内研修書籍「Unity パフォーマンスチューニングバイブル」の PDF 公開 & オープンソース化しました! | CyberAgent Developers Blog
PVR Shader Editor
公式サイト:
PVR Shader Editor | Imagination Developers [Official]
ドキュメント:
User Manual – PVR Shader Editor | PowerVR Developer Documentation [Official]