ドローコール削減の切り札である「SRP Batcher」に自作シェーダーを変数ブロック配置で適合させる方法です。
具体的な解決方法
シェーダー内のプロパティ変数は、必ず `UnityPerMaterial` というバッファブロック内に記述します。
CBUFFER_START(UnityPerMaterial)
float4 _BaseColor;
float _Cutoff;
CBUFFER_ENDURPプロジェクト設定で「SRP Batcher」を有効化しているが、Frame Debuggerなどで描画詳細を確認すると「not compatible with SRP Batcher」という警告が表示され、マテリアルがバッチングされず描画ドローコールが異常に高いままになる。
カスタムシェーダー、またはインポートしたシェーダーの記述において、すべてのマテリアルプロパティ(テクスチャ以外)が専用の定数バッファブロック「CBUFFER_START(UnityPerMaterial)」内に正しく宣言・カプセル化されていないことが原因です。
シェーダー内のグローバル変数プロパティ宣言を「CBUFFER_START(UnityPerMaterial)」と「CBUFFER_END」のブロックで囲み、マテリアルのデータレイアウトをSRP Batcher互換規格に適合させます。
ドローコール削減の切り札である「SRP Batcher」に自作シェーダーを変数ブロック配置で適合させる方法です。
シェーダー内のプロパティ変数は、必ず `UnityPerMaterial` というバッファブロック内に記述します。
CBUFFER_START(UnityPerMaterial)
float4 _BaseColor;
float _Cutoff;
CBUFFER_ENDA. はい、Shader Graphが生成するC#コードはデフォルトでUnityPerMaterialの定数バッファ構造を担保しているため、標準で互換性を有します。