本日はRenderDocを触ります。
〇RenderDocとは?
RenderDocはMITライセンスで開発、提供されているスタンドアローンなグラフィックスデバッガーです。
通常レンダリング回りの処理はGPU上で動いているためログの出力などが難しく、デバッグやプロファイルが困難です。
RenderDocを使用するとグラフィックスパイプライン上での処理に関して一つ一つイベントを見ることができます。
今回はイベントを読み解いていきます。
〇Event Browser
Event BrowserはRenderDocの主要なウィンドウで、GPU上で動いた処理が一覧として並びます。
今回はここを読み解き、どのようにRenderDocでデバッグをすればよいのか見ていきます。
Event Browser上部のControlsからタイマーのアイコンを選択することで処理にかかった時間が表示されるようになります。
これを見ることで実際に描画を行っているイベントはUIR.DrawChainであることがわかります。
それまでの間にリフレクションプローブやカスタムレンダーテクスチャの更新が行われています。
今回は特に使用していないためおそらく時間としてはゼロになっていると思われます。
UIR.DrawChainの前半部はUnityエディタのUI表示が行われています。
イベント数としては48~783がUnityのGUIに使用されています。
つまりこのイベントは実際のアプリケーションでは考慮する必要がないといえそうです。
実際のアプリケーションのレンダリングはCamera Renderのイベントの次に行われるUniversalRenderPipeline.RenderSingleCamera:Main Cameraで行われています。
シーン内のオブジェクトの描画にかかる時間は4341μ秒(0.004秒)であることがわかります。
ただし、RenderDocでの時間はあくまで変動が加わる可能性が高く、ほかのイベントの処理時間と相対的に評価して処理の重さを見るほうがよさそうです。
〇レンダリングの処理
UniversalRenderPipeline.RenderSingleCamera:Main Cameraイベントの中を見るとScriptableRendererの要求としてUniversalRenderPipelineAssets_Rendererが行われています。
これはURPの設定に該当します。
オブジェクトの描画を行う前にScriptableRenderPipeline(今回の場合はURP)の設定周りが読み込まれているようです。
次に行われている処理は次の4つです。
①ライトクッキー
②不透明(Opaque)オブジェクトの描画
③Transparentのセッティングパス
④Transparentオブジェクトの描画
このあたりはレンダリングの一般的な知識として不透明オブジェクトが先に描画され、α値を含むオブジェクトが後から描画されるというものがありますが、ここではそれを裏付けるような結果が出ています。
Opaqueオブジェクトの描画時は次ようになります。
Transparentオブジェクトが続いて描画されます。
本日は以上です。
知識として知っていたことでも実際に自分の目で見ると改めて感動するものがあります。