RendererFeatureでMRT(Multiple Render Target)

RendererFeatureでMRT(Multiple Render Target)

 通常は一つのレンダーターゲットに対して描画を行います。これに対し、MRT(Multiple Render Target)では複数のレンダーターゲットへ一度に描画することができます。このMRTをRenderFeature内でCommandBufferを使用して実行します。これは、Library¥PackageCache¥com.unity.render-pipelines.universal@7.7.1¥Runtime¥PassesにあるPostProcessPass.cs内のDoGaussianDepthOfFieldで使用されています。これを参考にScriptとShaderを作成し、MRTが実行できるか確認をしました。

Shader

 MRTを実行するためのShaderは以下の通りです。通常、フラグメントシェーダーの戻り値はfixed4やfloat4などのベクトル型ですが、MRT用のShaderではフラグメントシェーダーの戻り値として複数のベクトル型の変数を持つstruct使用します。このShaderではMainTexをグレースケール化した結果とグレースケールを反転した結果を出力します。

以下はMRTの結果を確認するためのShaderです。二つのテクスチャを左右に分けて表示します。

Script

 Scriptは以下の通りです。

以下の部分でMRTを行っています。SetRenderTargetによって複数のレンダーターゲットを設定します。そして、スクリーンに広がるメッシュをMRT用のマテリアルで描画することで複数のレンダーターゲットへ描画できます。

実行結果

 上記のScriptを実行した結果は以下の通りです。MRTによって一度に複数のレンダーターゲットに描画できていることが確認できました。

このコンテンツはユニティちゃんライセンス条項の元に提供されています