グラフィックス

ドキュメント:

グラフィックスパフォーマンスの最適化 | Unity 2020.3 マニュアル [公式]

設定

ドキュメント:

レンダリング設定 | Unity 2019.4 マニュアル [公式]

レンダリング統計ウィンドウ (Stats)

ゲームビューの右上方にある「Stats」ボタンで「レンダリング統計ウィンドウ」の表示/非表示を切り替える。

Graphics
  • FPSフレームレート
  • CPU
    • Main1フレームの処理に掛かった合計の時間
    • Renderゲームビューの描画に要した時間
  • Batches1フレームに処理が必要なバッチ数 (静的バッチ、動的バッチ、GPU インスタンシングの全てを合計した値)
  • Saved by Batchingバッチングにより節約されたバッチの数
  • Tris and Verts三角ポリゴンの数、及び、頂点の数 (ローエンドデバイスでは重要となる)
  • Screen画面サイズ、及び、使用しているメモリ量
  • SetPass Callsセットパスコール (シェーダーパスを切り替える回数)/シェーダーパスの切り替えにより CPU オーバーヘッドが発生する。
  • Shadow Casters影を生じるオブジェクトの数
  • Visible Skinned MeshedSkinned 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 マニュアル [公式]

ライト | Unity 2020.3 マニュアル [公式]

シャドウ

シャドウディスタンス

「シャドウディスタンス」 (Shadow Distance) で指定されたよりカメラから離れているオブジェクトの影は描画されない。

シャドウマップのサイズ

スポットライトあるいはポイントライトは、スクリーン上に投影されたライトの形状の幅、あるいは高さのどちらか大きい方がそのライトのピクセルサイズとなる。

Unity 2018

解像度 High の場合に、シャドウマップのサイズは次のように決定される。

  • ディレクショナルライトピクセルサイズの 1.9 倍より大きな最小の 2 のべき乗/最大 2048
  • スポットライトピクセルサイズより大きな最小の 2 のべき乗/最大 1024
  • ポイントライトピクセルサイズの 0.5 倍より大きな最小の 2 のべき乗/最大 512

グラフィックスカードが 512 MB 以上のビデオメモリを持っている場合、シャドウマップの最大値は、ディレクショナルライトで 4096、スポットライトで 2048、ポイントライトで 1024 まで拡大される。

  • 解像度 MiddleHigh の半分
  • 解像度 LowHigh の4分の1

ポイントライトはシャドウマップとしてキューブマップを使用するため、6面のシャドウマップを使用する。

ドキュメント:

シャドウマッピング | Unity マニュアル [公式]

ライティングの手法 | Unity 2019.4 マニュアル [公式]

シャドウのトラブルシューティング | Unity 2019.4 マニュアル [公式]

ライトのトラブルシューティングとパフォーマンス | Unity 2018.4 マニュアル [公式]

シェーダー

ドキュメント:

シェーダーのパフォーマンス | Unity マニュアル [公式]

シェーダーを書く場合のパフォーマンスのヒント | Unity マニュアル [公式]

PIX

Download

動画:

Debug Tab

入手:

Download – PIX on Windows | Microsoft DevBlogs [Official]

ドキュメント:

PIX を使った DirectX 12 シェーダーのデバッグ | Unity マニュアル [公式]

Documentation – PIX on Windows | Microsoft DevBlogs [Official]

参考:

PIX を使って描画負荷を計測してみる | かもそば

GPU Captures – PIX on Windows | Microsoft DevBlogs [Official]

Introduction – PIX on Windows | Microsoft DevBlogs [Official]

視聴:

PIX on Windows – YouTube

モデル/アセット

ドキュメント:

最適なパフォーマンスのためのモデル作成 | Unity 2020.3 マニュアル [公式]

アートアセットのベストプラクティスガイド | Unity 2019.4 マニュアル [公式]

物理演算

ドキュメント:

物理演算のパフォーマンス最適化 | Unity マニュアル [公式]

キャスト/メンバーキャッシュ

  • GetComponent
  • キャスト
  • メンバーキャッシュ

参考:

Rect Transform をなるはやで取得したい – Qiita

VS GetComponent おじさん – Qiita

オクルージョンカリング

ドキュメント:

オクルージョンカリング | Unity 2018.4 マニュアル [公式]

Occlusion Culling | Unity マニュアル [公式]

インポスター (Imposters)

こちらのページを参照

参考:

Imposter をお試し実装 | コポうぇぶろぐ

アニメーション

ドキュメント:

パフォーマンスと最適化 – アニメーション | Unity マニュアル [公式]

スクリプト (C#)

参考:

今日からできる C# のパフォーマンス改善小ネタ 11選 – Qiita

Unity 開発における C# のパフォーマンス最適化の Tips | 夜中に Unity

foreach が for 文に処理速度で勝つとき | はなちるのマイノート

文字列 (String Builder)

ドキュメント:

StringBuilder クラスを使用する | Microsoft Learn [公式]

StringBuilder | Microsoft Learn [公式]

参考:

ループ内での文字列結合は + じゃなく String Builder を使っとけ | LIGHT11

文字列処理を高速に行う | DOBON.NET

リスト (List)

参考:

List オブジェクトの Capacity の変化を観察する | 創造的プログラミングと粘土細工

LINQ

参考:

LINQ のパフォーマンス検証 | KAYAC engineers’ blog

メモリ/ヒープ (GC)

ドキュメント:

メモリ | Unity マニュアル [公式]

ガーベジコレクターの概要 | 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 マニュアル [公式]

一般的な最適化 | Unity マニュアル [公式]

特殊な最適化 | Unity マニュアル [公式]

チュートリアル

パフォーマンス最適化入門 2021年版

実践的なパフォーマンス分析と最適化 (Unite Tokyo 2018)

Introduction Profiler (Official)

Practical Guide to Profiling Tools

Draw Calls (Lofi Dev)

Adaptive Performance

公式サイト:

Adaptive Performance | Unity Manual [Official]

パフォーマンスチューニングバイブル

リポジトリ:

CyberAgentGameEntertainment/UnityPerformanceTuningBible: Unity Performance Tuning Knowledge Book – GitHub

参考:

社内研修書籍「Unity パフォーマンスチューニングバイブル」の PDF 公開 & オープンソース化しました! | CyberAgent Developers Blog

PVR Shader Editor

公式サイト:

PVR Shader Editor | Imagination Developers [Official]

ドキュメント:

User Manual – PVR Shader Editor | PowerVR Developer Documentation [Official]

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA