夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

ゼロから始めるUnityShader開発 第四章 SRP Batcherに対応するシェーダーを記述する

本日はShader勉強枠です。

今回は軽量化の処理であるSRPBatcherに関して紹介します。

〇SRP Batcherとは?

 SRP BatcherはSRPと名がつくことからわかるようにURPやHDRPなどのSRPで使用できるレンダリングの最適化にかかわる機能です。

 従来はマテリアル単位でSetPassCalls(CPUからの描画呼び出し)が行われていましたが、SRPBatcherを使用することでシェーダー単位でまとめて処理を行うことができます。

blog.unity.com

〇SRPとは?

ScriptableRenderPipeline(SRP)はUnityのC#でカスタマイズ可能なレンダリングパイプラインを指します。

 自身で構築することもできますが、URPHDRPというUnityが提供しているテンプレートが良く使用されています。

〇SRP Batcherが有効か無効かを判断する方法

 SRP Batcherが有効になっている場合シェーダーファイルを選択した際のインスペクターウィンドウからSRP Batcherの項目を見るとcompatibleが表示されます。

また、SRPBatcherに対応していないシェーダーの場合not compatibleが表示されます。

〇SRPBatcherへの対応方法

SRPBatcherへ自作のシェーダーを対応させるためにはpropertesブロックで定義した変数をCBUFFER_START(UnityPerMaterial)~CBUFFER_ENDに格納する必要があります。

            CBUFFER_START(UnityPerMaterial) 
            float4 _MainColor;
            float4 _MainTex_ST;
            CBUFFER_END
            sampler2D _MainTex;

なおテクスチャのみ通常通りに記述可能です。これはもともとテクスチャはGPUのメモリにデータが格納されているためであると考えられます。

これだけですが、以上でSRPBatcherにシェーダーを対応して軽量化を行うことができます。