アセットは別ページに分割しました。
関連ページ:
目次
- 1 グラフィックス
- 2 設定
- 3 レンダリング統計ウィンドウ (Stats)
- 4 プロファイラー (Profiler)
- 5 ドローコールバッチング
- 6 ライティング (Lighting)
- 7 シャドウ
- 8 シェーダー
- 9 モデル/アセット
- 10 物理演算
- 11 キャスト/メンバーキャッシュ
- 12 オクルージョンカリング
- 13 インポスター (Imposters)
- 14 アニメーション
- 15 メモリ使用量
- 16 メモリリーク対策
- 17 Unity Learn
- 18 ベストプラクティス
- 19 まとめ/Tips
- 20 資料
- 21 ドキュメント
- 22 チュートリアル
- 23 Memory Profiler
- 24 Adaptive Performance
グラフィックス
参考:
グラフィックスパフォーマンスの最適化 | Unity 2020.3 マニュアル [公式]
設定
参考:
Unity のレンダリング設定 | 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:再生状態にあるアニメーションの数
参考:
Unity の Stats ボタンでレンダリング統計ウィンドウを確認する | MR が楽しい
レンダリング統計ウィンドウ | Unity マニュアル [公式]
Rendering Statistics Window | Unity 2020.3 マニュアル [Official]
プロファイラー (Profiler)
メニューから「Window > Analysis > Profiler」を開く。
- CPU Usage プロファイラー
- Rendering プロファイラー
- Memory プロファイラー
- Audio プロファイラー
- Physics プロファイラー
- GPU プロファイラー
- グローバルイルミネーション (GI) のプロファイラー
- UI プロファイラー
参考:
Profiler と Frame Debugger 触ってみた – Qiita
アプリが重い時は Profiler や Frame Debugger を活用しよう | KAZUPON 研究室
F9 で Profiler の Record の開始/終了ができる | コガネブログ
プロファイラー概要 | Unity 2018.4 マニュアル [公式]
Profiler ウィンドウ | Unity 2018.4 マニュアル [公式]
よく使われるプロファイラーマーカー | Unity マニュアル [公式]
アプリケーションのプロファイル | Unity 2020.3 マニュアル [公式]
ドローコールバッチング
- 動的バッチ処理
- 静的バッチ処理
レンダリング統計ウィンドウ
ゲームビューの右上方にある Stats ボタンで切り替える。
- Batches:処理が必要なバッチ数
- Saved by batching:バッチングにより節約されたバッチの数
参考:
ダイナミックバッチングによる描画順序の処理最適化 – Qiita
バッチングでドローコールを減らす | りつかのゲーム開発雑記ブログ
ドローコールを減らすためにいま僕たちができること | エクスプラボ
Unity で負荷対策をしたいからレンダリングの仕組みを調べてみた | gracetory’s blog
ドローコールバッチング | Unity マニュアル [公式]
レンダリング統計ウィンドウ | Unity マニュアル [公式]
ライティング (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 マニュアル [公式]
モデル/アセット
参考:
最適なパフォーマンスのためのモデル作成 | Unity 2020.3 マニュアル [公式]
アートアセットのベストプラクティスガイド | Unity 2019.4 マニュアル [公式]
物理演算
参考:
物理演算のパフォーマンス最適化 | Unity マニュアル [公式]
キャスト/メンバーキャッシュ
- GetComponent
- キャスト
- メンバーキャッシュ
参考:
RectTransform をなるはやで取得したい – Qiita
オクルージョンカリング
参考:
オクルージョンカリング | Unity 2018.4 マニュアル [公式]
Occlusion Culling | Unity マニュアル [公式]
インポスター (Imposters)
参考:
アニメーション
参考:
パフォーマンスと最適化 – アニメーション | Unity マニュアル [公式]
メモリ使用量
参考:
Memory Profiler の見方 Simple View 編 | Unity でいってみよう!
Memory プロファイラー | Unity 2018.4 マニュアル [公式]
メモリリーク対策
参考:
メモリリークを分析するための簡単で強力な方法 | GRIPHONE ENGINEER’S BLOG
How to Find Memory Leaks | Memory Profiler 0.2 Manual [Official]
Unity Learn
参考:
Fixing Performance Problems | Unity Learn [Official]
ベストプラクティス
参考:
ベストプラクティスガイド | Unity 2019.4 マニュアル [公式]
まとめ/Tips
GPU のボトルネック
- フィルレート
- メモリ帯域
- 総頂点数:モバイルでは 10 万以下、PC では数百万程度は場合によって可能だがなるべく減らす
CPU のボトルネック
- バッチ数
負荷の高い要素
- スキンメッシュ (Skinned Mesh Renderer)
- クロスシミュレーション (Cloth)
- パーティクル (Particle System)
- ゲームオブジェクトやメッシュを大量に使用する場合は負荷となることがある。
対策
- 不要な影 (シャドウ) を無効化する
- 静的バッチング → シーン内で動かないゲームオブジェクトを「Static」に指定する
- マテリアルをまとめる
- テクスチャをまとめる → テクスチャアトラスを使用する
- メッシュを統合する
- ポストプロセスを最適化する
- ミップマップテクスチャを使用する
- LOD
- レイヤー別にカリング距離を設定する
- リアルタイムシャドウを最適化する
- オクルージョンカリング
参考:
Unity でドローコール (Set Pass Call) を減らす方法まとめ | おもちゃラボ
Unity 3D Scene Optimization | Procedural Worlds
資料
参考:
一歩先の Unity でのパフォーマンス/メモリ計測、デバッグ術 – SlideShare
最適化をする前に覚えておきたい技術 – SlideShare
その最適化、本当に最適ですか!? 正しい最適化を行うためのテクニック – SlideShare
ドキュメント
グラフィックスパフォーマンスの最適化 | Unity マニュアル [公式]
チュートリアル
Introduction to the Profiler – Unity Official Tutorials
Practical Guide to Profiling Tools in Unity
Memory Profiler
公式サイト:
Memory Profiler | Unity Manual [Official]
参考:
Memory Profiler でメモリにロードされているオブジェクトを可視化する | LIGHT11
Memory Profiler でメモリを使いすぎなオブジェクトを特定する | LIGHT11
ゲーム内で何がどの程度メモリを消費しているのか確認する Memory Profiler | テラシュールブログ
新しい Memory Profiler のパッケージが利用可能になった | コガネブログ
Adaptive Performance
公式サイト: