SRP Batcherは、Scriptable Render Pipeline(URPおよびHDRP)環境でドローコールDraw Call)に起因するCPU負荷を削減するための画期的なレンダリングシステムです。レガシーなGPUインスタンシングダイナミックバッチングとは異なり、マテリアルやテクスチャが異なっていても、同一のシェーダーコード(バリアント)であればGPU側へのステート変更コマンドの発行をスキップできます。

現実世界での例え:ハンバーグ店の厨房プロセス

SRP Batcherの仕組みは、「ハンバーグショップの厨房(CPU)から料理をカウンター(GPU)に送る効率化プロセス」に例えることができます。

  • 従来(SRP Batcherなし): ハンバーグが1つ出来上がるたびに、調理器具(シェーダーやマテリアルの設定値)を一度すべて片付け、綺麗に掃除して最初からセットし直してから次のハンバーグを作ります。調理器具をいちいち片付けるため、厨房の作業員(CPU)が疲れ果て、料理を出す速度が大幅に低下します(CPUオーバーヘッド大)。
  • SRP Batcherあり: 調理器具や基本的な調理工程(シェーダーコード)は固定したままにしておきます。そして、流れてくるハンバーグのトッピング(各オブジェクト固有のマテリアルパラメータ)だけを素早く切り替えて盛り付けます。調理器具を片付ける無駄な時間がほぼゼロになるため、圧倒的なスピードでハンバーグを連続して送り出すことができます。
Unity SRP Batcher optimization logic infographic

図:SRP Batcherによる固定シェーダー+CBUFFER一括更新による描画ステート最適化のインフォグラフィック

仕組みと動作原理

従来のバッチ処理では、「テクスチャやマテリアルを1つにまとめる(アトラス化)」ことがドローコール削減の鉄則でした。しかし、SRP Batcherではテクスチャやマテリアルが異なっていても、同一のシェーダーを使用している場合はGPU側のバインドステートを変更せず、各オブジェクトのマテリアルプロパティ(色やパラメータ)のみをGPUの定数バッファ(CBUFFER / Constant Buffer)に一括転送し、超高速で描画ステートを切り替えることができます。