スクリプタブルレンダーパイプライン (SRP) バッチャーは、ドローコールの最適化で、SRP を使用するアプリケーションのパフォーマンスを大幅に向上させます。SRP バッチャーは、同じシェーダーバリアントを使用するマテリアルのドローコールの 準備とディスパッチに必要な CPU 時間を短縮します。
このセクションでは、SRP バッチャーとレンダーパイプラインの互換性についての情報を紹介します。
| 機能 | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタムのスクリプタブルレンダーパイプライン (SRP) | ビルトインレンダーパイプライン |
|---|---|---|---|---|
| SRP バッチャー | はい | はい | はい | いいえ |
ドローコールを最適化する従来の方法は、その数を減らすことです。その代わりに、SRP バッチャーは、ドローコール間のレンダー状態の変化を低減します。これを行うために、SRP バッチャーは、一連の GPU コマンド bind と draw を結合します。それぞれのコマンド群が、SRP バッチと呼ばれます。
レンダリングの最適なパフォーマンスを得るには、各 SRP バッチができるだけ多く bind と draw コマンドを含む必要があります。これを実現するには、できるだけ少ないシェーダーバリアントを使用します。同じシェーダーを使って、必要な数の異なるマテリアルを制限なく使用できます。
レンダーループ中に、Unity が新しいマテリアルを検出すると、CPU はすべてのプロパティを収集し、定数バッファで GPU にバインドします。GPU バッファの数は、シェーダーが定数バッファを宣言する方法によって異なります。
SRP バッチャーは、マテリアルデータを GPU メモリに維持する低レベルのレンダリングループです。マテリアルコンテンツが変わらない場合、SRP バッチャーはレンダー状態の変更をしません。代わりに、SRP バッチャーは専用のコードパスを使用して、以下のように大きな GPU バッファの Unity エンジンのプロパティを更新します。
CPU は、上の図で Per Object large buffer とラベル付けされている Unity エンジンのプロパティのみを処理します。すべてのマテリアルには、GPU メモリに配置された永続的な定数バッファがあり、すぐに使用できます。これにより、レンダリングが高速化されます。