グラフィックス

参考:

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

設定

参考:

Unity のレンダリング設定 | 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再生状態にあるアニメーションの数

参考:

Unity の Stats ボタンでレンダリング統計ウィンドウを確認する | MR が楽しい

レンダリング統計ウィンドウ | Unity マニュアル [公式]

Rendering Statistics Window | Unity 2020.3 マニュアル [Official]

プロファイラー (Profiler)

メニューから「Window > Analysis > Profiler」を開く。

参考:

Profiler と Frame Debugger 触ってみた – Qiita

アプリが重い時は Profiler や Frame Debugger を活用しよう | KAZUPON 研究室

F9 で Profiler の Record の開始/終了ができる | コガネブログ

プロファイラー概要 | Unity 2018.4 マニュアル [公式]

Profiler ウィンドウ | Unity 2018.4 マニュアル [公式]

よく使われるプロファイラーマーカー | Unity マニュアル [公式]

アプリケーションのプロファイル | Unity 2020.3 マニュアル [公式]

分析 | Unity マニュアル [公式]

ドローコールバッチング

  • 動的バッチ処理
  • 静的バッチ処理
レンダリング統計ウィンドウ

ゲームビューの右上方にある 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 マニュアル [公式]

ライト | 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
  • キャスト
  • メンバーキャッシュ

参考:

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

VS GetComponent おじさん – Qiita

オクルージョンカリング

参考:

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

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

インポスター (Imposters)

こちらのページを参照

参考:

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

アニメーション

参考:

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

メモリ使用量

参考:

Memory Profiler の見方 Simple View 編 | Unity でいってみよう!

メモリ最適化に関して、あう可能性のある問題 – Qiita

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) を減らす方法まとめ | おもちゃラボ

描画の効率化について | しゅみぷろ

モバイルゲーム開発最適化メモ | くものす

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 のパッケージが利用可能になった | コガネブログ

Memory Profiler | トマシープが学ぶ

Unity のメモリ消費状況を確認する | ネコロモーフ

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