MRが楽しい

MRやVRについて学習したことを書き残す

UnityのStatsボタンでレンダリング統計ウィンドウを確認する

本日は Unity の調査枠です。
[Stats]ボタンで表示されるレンダリング統計ウィンドウの情報を記事にします。

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

レンダリング統計ウィンドウは Unity の[Game]ウィンドウにある[Stats]ボタンで有効化できます。
f:id:bluebirdofoz:20190509092127j:plain
本ウィンドウの[Graphics]項目には以下の情報が含まれます。

フレームあたりの時間とFPS

1つのフレームを処理とレンダリングするのに要した時間と、相互関係にあるフレーム数/秒(FPS)を表示します。
この数字にはフレーム更新とゲームビューのレンダリングに要した時間のみが含まれます。
エディターが Scene ビューと Inspector の描画、エディター専用の処理を行うのに要した時間は含みません。

Batches

バッチングによる Batch の統合数を表示します。
「バッチング」とはエンジンが複数オブジェクトをチャンクにして、まとめてレンダリングしようと試みるものです。
リソース切り替えの為に発生する CPU のオーバーヘッドを減らすために用いられます。
まとめたメッシュごとの処理単位を Batch と呼びます。

Saved by batching

ドローコールバッチングで統合されたドローコールの数を表示します。
バッチングを確実に行うためには異なるオブジェクトでもできる限りマテリアルを共有します。
レンダリングステートを変更すると、同じステート集団の batches は分割されます。

Tris and Verts

描画する三角形数(Tris)および頂点数(Verts)を表示します。

Screen

画面サイズ、およびメモリ使用量を表示します。

SetPass

レンダリングパスの数を表示します。
これは CPU から GPU に対して描画命令を送る回数を意味します。
Batch 毎に SetPass Call -> Draw Call の処理が実行されます。
SetPass Call で CPU から GPU にマテリアルの設定値などが通知されます。
Draw Call は CPU が GPU に対して設定値によるメッシュの描画を命令することです。
異なる Batch であっても同じマテリアルの SetPass Call などは統合されます。

Visible Skinned Meshes

レンダリングされたスキンメッシュの数を表示します。

Animations

再生しているアニメーションの数を表示します。

レンダリング統計ウィンドウの変化を確認する

一通り、その意味合いを確認したところで、実際に統計の変化を確認してみます。
まずは試しに1つの Cube オブジェクトを配置してレンダリング統計ウィンドウを確認します。
すると、Batches と Set Pass Call の値が 6 になりました。
f:id:bluebirdofoz:20190509092143j:plain

Cube オブジェクトを1つ配置しただけの変化にしては増え過ぎのように感じます。
メニューから Window -> Frame Debugger を起動してレンダリングの内容を細かく確認してみます。
f:id:bluebirdofoz:20190509092152j:plain

すると、Shadows.RenderShadowMap で Batches が 4 増えていることが分かりました。
Unityではライトで照らされるオブジェクトには自動的に影が描画されます。
この影を描画する際にも Batches や Set Pass Call が増加します。
f:id:bluebirdofoz:20190509092202j:plain

試しに[Directional Light]オブジェクトの[Shadow Type]を[No Shadows]に変更して、影の描写を止めてみます。
f:id:bluebirdofoz:20190509092211j:plain

影を描画を止めると、Shadows.RenderShadowMap の処理が消えて、Batches と Set Pass Call の値が 2 になりました。
f:id:bluebirdofoz:20190509092222j:plain

Cube オブジェクトを1つ描画するには、まだ Batches が1つ多いです。
こちらも Frame Debugger で確認すると、これはレンダリングバッファのクリア処理であることが分かります。
f:id:bluebirdofoz:20190509092231j:plain

これで Cube オブジェクトは 1 の Batches で処理されていることが確認できました。
f:id:bluebirdofoz:20190509092241j:plain