ノートの端の書き残し

UnityやらC#やら。設計が得意かもしれない。

FrameDebuggerでURPの基礎を学ぼう

FrameDebugger

FrameDebuggerは、1フレームの描画がどのように行われているかを調べるためのプロファイラです。

プロファイラなのでパフォーマンス調査のために使用するものですが、初学者だとよくわからない描画の全体像を掴むのにもピッタリだと思うので、描画周りがよくわからない場合は、サンプルプロジェクトを使って色々いじってみましょう。

この記事ではUnity2022.3.12f1で確認しています。

URPテンプレートを見てみる

ForwardRenderingは要するに、

参照するメッシュ、使うシェーダ、描きこむRenderTexture(RT)を決めて実行する処理を重ねるものです。

描きこむRenderTextureとしては色情報を入れるRTと、Zテストをしたりシェーダから利用したいために深度情報を入れるためのRTの2種類を使用できます。

描画パスを自作する際にはCommandBuffer.SetRenderTargetというAPIで、描き込む先のRTを選択することができます。 どこに上の画像の場合、色情報は_CameraColorAttachmentAと名付けられたRTに描き込まれています。また、RT0と書かれたプルダウンから、深度情報に関しても確認でき、_CameraDepthAttachmentと名付けられたRTに描き込まれているようです。

よく見るとRTの名前には_CameraColorAttachmentA_1920x1080_B10G11R11_UFloatPack32_Tex2D_MSAA2xと、なんかRTのピクセル数とかの情報が書かれていますね。

自作のパスではCommandBuffer.GetTemporaryRTなどのAPIを用いて、自由にRTを取得できるのですが、使用メモリの観点で、できる限りRTの数は抑えたいです。 仮に同じIDでRTを取得しても、ピクセル数やColorFormatのような設定が異なる場合は実体として別物のRTが取得されてしまうので、同じRTを利用して使いまわせるよう、ここの設定をちゃんと見るようにしましょう。

また、メモリプロファイラを見た際にRTが結構なメモリを使用していることを見かけることがあると思いますが、URPの実体を理解して、本当に必要なRTだけが使われているかをチェックしましょう。

他にもFrameDebuggerにはたくさん情報があるので、サンプルプロジェクトをいじりながら一つ一つの要素を見てみると良いです。すごく勉強になると思います。(僕は勉強になりました)