グラフィックス

参考:

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

設定

参考:

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

レンダリング統計ウィンドウ (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」を開く。

参考:

Profiler と Frame Debugger 触ってみた – Qiita

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

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

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

ドローコールバッチング

  • 動的バッチ処理
  • 静的バッチ処理

レンダリング統計ウィンドウ

ゲームビューの右上方にある Stats ボタンで切り替える。

  • Batches:処理が必要なバッチ数
  • Saved by batching:バッチングにより節約されたバッチの数

参考:

ダイナミックバッチングによる描画順序の処理最適化 – Qiita

バッチングでドローコールを減らす | りつかのゲーム開発雑記ブログ

ドローコールを減らすためにいま僕たちができること | エクスプラボ

Unity で負荷対策をしたいからレンダリングの仕組みを調べてみた | gracetory’s blog

ドローコールバッチング | Unity マニュアル [公式]

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

ライティング (Lighting)

  • 頂点ライティング:メッシュの頂点でのみライティングの計算を行い、サーフェス上では頂点における計算結果を補間する。
  • ピクセルライティング:全てのスクリーンピクセルにおいてライティングの影響を個別に計算する。

Render Mode

  • Auto:ライトの明るさと Quality の設定に応じて自動的に決定する
  • Important:ピクセルライティングを優先的に使用する
  • Not Important:ピクセルライティングを使用しない (頂点ライティングあるいはオブジェクト単位のライティングが使用される)

参考:

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

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

Light インスペクター | Unity 2018.4 マニュアル [公式]

シャドウ

シャドウディスタンス

Shadow Distance で指定されたよりカメラから離れているオブジェクトの影は描画されない。

シャドウマップのサイズ

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

解像度 High の場合:

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

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

  • 解像度 Middle:High の半分
  • 解像度 Middle:High の4分の1

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

参考:

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

シェーダー

参考:

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

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

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

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

参考:

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

オクルージョンカリング

参考:

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

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

アニメーション

参考:

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

メモリ使用量

参考:

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 マニュアル [公式]

まとめ/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

動画/チュートリアル

参考:

Introduction to the Profiler – Unity Official Tutorials – YouTube

Practical Guide to Profiling Tools in Unity – YouTube

Memory Profiler

参考:

Memory Profiler | Unity Manual [Official]

Memory Profiler でメモリにロードされているオブジェクトを可視化する | LIGHT11

Memory Profiler でメモリを使いすぎなオブジェクトを特定する | LIGHT11

ゲーム内で何がどの程度メモリを消費しているのか確認する Memory Profiler | テラシュールブログ

新しい Memory Profiler のパッケージが利用可能になった | コガネブログ

Memory Profiler | トマシープが学ぶ

Unity のメモリ消費状況を確認する | Unity の使い方 (ame-name.com)

Adaptive Performance

参考:

Adaptive Performance | Unity Manual [Official]

Performance Logger

参考:

Performance Logger | Unity Asset Store [Official]

QFSW/PerformanceLogger: A simple and powerful logging tool for Unity games – GitHub

Advanced Render System

参考:

Advanced Render System | Unity Asset Store [Official]

Presentation – YouTube

Tutorial – YouTube

Optimizers

参考:

Optimizers | Unity Asset Store [Official]

Optimizers – Easy to use and functional components to optimize any other components! | Unity Forum

Optimizers – Give your project more FPS and more Detail! – YouTube

Saving milions of tris count in few minutes! – YouTube

Basics #1 Setting up First Optimizer – YouTube

Example with Spine Animator – YouTube

Performance Tools

次の3つのアセットのバンドル

参考:

Performance Tools | Unity Asset Store [Official]

Unity Occlusion Culling vs Advanced Culling – YouTube

Advanced Render System Presentation – YouTube

Super Level Optimizer Tutorial – YouTube

FPS Graph

参考:

FPS Graph – Performance Analyzer | Unity Asset Store [Official]

FPS Graph – Performance Analyzer Tool | Unity Forum

FPS Graph – Performance Analyzer for Unity3D – YouTube

Advanced FPS Counter

参考:

Advanced FPS Counter | Unity Asset Store [Official]

Overview – YouTube

X-Frame FPS Accelerator

参考:

X-Frame FPS Accelerator | Unity Asset Store [Official]

Android Demo – YouTube

iOS Demo – YouTube

Test Scene – YouTube

BatchRenderer

参考:

i-saint/BatchRenderer – GitHub

Pseudo-Instanced Drawing in Unity | primitive: blog

Unite 2015 Tokyo | primitive: blog

Demo | BatchRenderer (primitive-games.jp)

Exception Reboot C87 – YouTube

タグ:

コメントを残す

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