Rendering Profiler は、シーンをレンダリングするために CPU と GPU が行う処理に関するレンダリングの統計や情報を表示します。これらの統計情報を利用して、シーンのさまざまな領域のリソース強度を測定し、最適化に役立てることができます。
Profiler ウィンドウを開くにはメニューから、Window > Analysis > Profiler の順に移動します。
チャートには、アプリケーションがレンダリングしたバッチ数、SetPass 呼び出し数、三角形の数、頂点数が表示されます。下のペインには、より多くのレンダリング統計 (ゲームビューの Rendering Statistics ウィンドウに表示されているものと同等) が表示されます。
Rendering プロファイラーモジュールのチャートは、以下の 4 つのカテゴリに分かれています。
| Chart | 説明 |
|---|---|
| Batches Count | フレームの継続時間中に Unity が処理したバッチ処理の数。 |
| SetPass Calls Count | 対象のフレームでゲームオブジェクトのレンダリングに使用したシェーダーパスを Unity が切り替えた回数。1 つのシェーダーには複数のシェーダーパスが含まれている場合があり、それぞれのパスでシーンのゲームオブジェクトのレンダリングが異なります。 |
| Triangles Count | フレームの継続時間中に Unity が処理した三角形の数。 |
| Vertices Count | フレームの継続時間中に Unity が処理した頂点の数。 |
Rendering Profiler モジュールをクリックすると、ウィンドウの下半分にある詳細ペインに詳細なレンダリング統計が表示されます。これらの統計情報は、Rendering Statistics ウィンドウに表示される統計情報と類似しています。
詳細ペインの左上の Open Frame Debugger を選択すると、Frame Debugger が開き、フレームをレンダリングした個別のドローコールに関する情報が表示されます。
これらの統計情報は、ProfilerRecorder API や Profiler Module Editor でも入手可能であり、カスタムの Profiler モジュールに追加することができます。
| 統計 | 説明 | リリースプレイヤーでのアクセス |
|---|---|---|
| SetPass Calls Count | 対象のフレームでゲームオブジェクトのレンダリングに使用したシェーダーパスを Unity が切り替えた回数。1 つのシェーダーには複数のシェーダーパスが含まれている場合があり、それぞれのパスでシーンのゲームオブジェクトのレンダリングが異なります。 | はい |
| Draw Calls Count | フレームの継続時間中に Unity が送信したドローコールの総数。Unity はゲームオブジェクトを画面にレンダリングする際にドローコールを送信します。この数には、バッチ処理形式でないドローコールと、動的および静的なバッチ形式ドローコールが含まれます。 | はい |
| Total Batches Count | フレームの継続時間中に Unity が処理したバッチ処理の総数。この数には、動的および静的なバッチ形式ドローコールが含まれます。 | はい |
| Triangles Count | フレームの継続時間中に Unity が処理した三角形の数。 | はい |
| Vertices Count | フレームの継続時間中に Unity が処理した頂点の数。 | はい |
| (Dynamic Batching) | このセクションには、動的バッチ処理に関する統計情報が含まれています。 | いいえ |
| Dynamic Batched Draw Calls Count | 動的バッチ処理にまとめられられたドローコールの数。 | いいえ |
| Dynamic Batches Count | そのフレームで処理された動的なバッチ処理の数。 | いいえ |
| Dynamic Batched Triangles Count | 動的バッチ処理に含まれるゲームオブジェクトの三角形の数。 | いいえ |
| Dynamic Batched Vertices Count | 動的バッチ処理に含まれるゲームオブジェクトの頂点数。 | いいえ |
| Dynamic Batching Time | 動的バッチ処理構造の作成に Unity が費やした時間。 | いいえ |
| (Static Batching) | このセクションには、静的バッチ処理に関する統計情報が含まれています。 | いいえ |
| Static Batched Draw Calls Count | 静的バッチ処理にまとめられられたドローコールの数。 | いいえ |
| Static Batches Count | そのフレームで処理された静的なバッチ処理の数。 | いいえ |
| Static Batched Triangles Count | 静的バッチ処理に含まれるゲームオブジェクトの三角形の数。 | いいえ |
| Static Batched Vertices Count | 静的バッチ処理に含まれるゲームオブジェクトの頂点数。 | いいえ |
| (Instancing) | このセクションには、GPU インスタンシングに関する統計情報が含まれています。 | いいえ |
| Instanced Batched Draw Calls Count | インスタンスバッチ処理にまとめられられたドローコールの数。 | いいえ |
| Instanced Batches Count | フレームの継続時間中にインスタンス化されたゲームオブジェクトをレンダリングするために Unity が処理したバッチ処理の数。 | いいえ |
| Instanced Batched Triangles Count | インスタンス化されたゲームオブジェクトの三角形の数。 | いいえ |
| Instanced Batched Vertices Count | インスタンス化されたゲームオブジェクトの頂点数。 | いいえ |
| 使用済みテクスチャ数 使用済みテクスチャのバイト数 |
フレームの継続時間中に Unity が使用したテクスチャ数と、テクスチャが使用したメモリ量。 | いいえ |
| レンダーテクスチャ数 レンダーテクスチャのバイト数 |
フレームの継続時間中に Unity が使用した RenderTexture 数と、RenderTexture が使用したメモリ量。 | はい |
| Render Textures Changes Count | そのフレームで Unity が 1 つまたは複数のレンダーテクスチャをレンダーターゲットとして設定した回数。 | はい |
| 使用したバッファ数 使用したバッファのバイト数 |
GPU バッファの総数とそれらに使用されたメモリ。これには、頂点、インデックス、コンピュートバッファ、レンダリングに必要なすべての内部バッファが含まれます。 | はい |
| フレーム内での頂点バッファのアップロード数 フレーム内での頂点バッファアップロードのバイト数 |
対象のフレームで CPU が GPU にアップロードしたジオメトリの量。これは、頂点/法線/TEXCOORD のデータを表します。すでに GPU にジオメトリが存在する場合もあります。この統計値には、Unity がフレーム内で転送したジオメトリのみが含まれます。 | はい |
| フレーム内でのインデックスバッファのアップロード数 フレーム内でのインデックスバッファアップロードのバイト数 |
対象のフレームで CPU が GPU にアップロードしたジオメトリの量。これは、三角形のインデックスのデータを表します。すでに GPU にジオメトリが存在する場合もあります。この統計値には、Unity がフレーム内で転送したジオメトリのみが含まれます。 | はい |
| Shadow Casters Count | フレームで影を作るゲームオブジェクトの数。1 つのゲームオブジェクトが複数の影を作る場合 (複数のライトが照らしているため)、1 つの影につき 1 エントリーされます。 | はい |
Rendering モジュールのプロファイラーカウンターは、プレイヤーでも利用可能です。ProfilerRecorder API を使用して、プレイヤーで描画するプロファイラーモジュール情報にアクセスします。高レベルのカウンターは、Release Player でも利用できます。
以下の例は、“SetPass Calls Count”、 “Draw Calls Count”、 “Vertices Count” の指標を収集し、それらをテキストエリアとして表示する簡単なスクリプトです。
using System.Text;
using Unity.Profiling;
using UnityEngine;
public class RenderStatsScript : MonoBehaviour
{
string statsText;
ProfilerRecorder setPassCallsRecorder;
ProfilerRecorder drawCallsRecorder;
ProfilerRecorder verticesRecorder;
void OnEnable()
{
setPassCallsRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, "SetPass Calls Count");
drawCallsRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, "Draw Calls Count");
verticesRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, "Vertices Count");
}
void OnDisable()
{
setPassCallsRecorder.Dispose();
drawCallsRecorder.Dispose();
verticesRecorder.Dispose();
}
void Update()
{
var sb = new StringBuilder(500);
if (setPassCallsRecorder.Valid)
sb.AppendLine($"SetPass Calls: {setPassCallsRecorder.LastValue}");
if (drawCallsRecorder.Valid)
sb.AppendLine($"Draw Calls: {drawCallsRecorder.LastValue}");
if (verticesRecorder.Valid)
sb.AppendLine($"Vertices: {verticesRecorder.LastValue}");
statsText = sb.ToString();
}
void OnGUI()
{
GUI.TextArea(new Rect(10, 30, 250, 50), statsText);
}
}
Rendering Profiler モジュールの情報は、ProfilerCategory.Render Profiler カテゴリに属します。
カスタムモジュールで選択したレンダリングカウンターを強調表示する場合は、Module Editor を使用して、チャートと詳細表示を設定します。