SRP Batcherは、Scriptable Render Pipeline(URPおよびHDRP)環境でドローコール(Draw Call)に起因するCPU負荷を削減するための画期的なレンダリングシステムです。レガシーなGPUインスタンシングやダイナミックバッチングとは異なり、マテリアルやテクスチャが異なっていても、同一のシェーダーコード(バリアント)であればGPU側へのステート変更コマンドの発行をスキップできます。
現実世界での例え:ハンバーグ店の厨房プロセス
SRP Batcherの仕組みは、「ハンバーグショップの厨房(CPU)から料理をカウンター(GPU)に送る効率化プロセス」に例えることができます。
- 従来(SRP Batcherなし): ハンバーグが1つ出来上がるたびに、調理器具(シェーダーやマテリアルの設定値)を一度すべて片付け、綺麗に掃除して最初からセットし直してから次のハンバーグを作ります。調理器具をいちいち片付けるため、厨房の作業員(CPU)が疲れ果て、料理を出す速度が大幅に低下します(CPUオーバーヘッド大)。
- SRP Batcherあり: 調理器具や基本的な調理工程(シェーダーコード)は固定したままにしておきます。そして、流れてくるハンバーグのトッピング(各オブジェクト固有のマテリアルパラメータ)だけを素早く切り替えて盛り付けます。調理器具を片付ける無駄な時間がほぼゼロになるため、圧倒的なスピードでハンバーグを連続して送り出すことができます。
図:SRP Batcherによる固定シェーダー+CBUFFER一括更新による描画ステート最適化のインフォグラフィック
仕組みと動作原理
従来のバッチ処理では、「テクスチャやマテリアルを1つにまとめる(アトラス化)」ことがドローコール削減の鉄則でした。しかし、SRP Batcherではテクスチャやマテリアルが異なっていても、同一のシェーダーを使用している場合はGPU側のバインドステートを変更せず、各オブジェクトのマテリアルプロパティ(色やパラメータ)のみをGPUの定数バッファ(CBUFFER / Constant Buffer)に一括転送し、超高速で描画ステートを切り替えることができます。