本日はShader勉強枠です。
今回は軽量化の処理であるSRPBatcherに関して紹介します。
〇SRP Batcherとは?
SRP BatcherはSRPと名がつくことからわかるようにURPやHDRPなどのSRPで使用できるレンダリングの最適化にかかわる機能です。
従来はマテリアル単位でSetPassCalls(CPUからの描画呼び出し)が行われていましたが、SRPBatcherを使用することでシェーダー単位でまとめて処理を行うことができます。
〇SRPとは?
ScriptableRenderPipeline(SRP)はUnityのC#でカスタマイズ可能なレンダリングパイプラインを指します。
自身で構築することもできますが、URPやHDRPという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にシェーダーを対応して軽量化を行うことができます。