Version: Unity 6.0 (6000.0)
言語 : 日本語
URP でのスクリプタブルレンダーパイプラインバッチャー
URP でのゲームオブジェクトと SRP バッチャーの互換性の確認

URP のスクリプタブルレンダーパイプラインバッチャー

スクリプタブルレンダーパイプライン (SRP) バッチャーは、ドローコールの最適化で、SRP を使用するアプリケーションのパフォーマンスを大幅に向上させます。SRP バッチャーは、同じシェーダーバリアントを使用するマテリアルのドローコールの 準備とディスパッチに必要な CPU 時間を短縮します。

スクリプタブルレンダーパイプライン (SRP) バッチャーは、同じシェーダーバリアントを使用する多くのマテリアルを持つシーンのレンダリングに要する CPU 時間を短縮します。
スクリプタブルレンダーパイプライン (SRP) バッチャーは、同じシェーダーバリアントを使用する多くのマテリアルを持つシーンのレンダリングに要する CPU 時間を短縮します。

要件と互換性

このセクションでは、SRP バッチャーとレンダーパイプラインの互換性についての情報を紹介します。

レンダーパイプラインの互換性

機能 ユニバーサルレンダーパイプライン (URP) HD レンダーパイプライン (HDRP) カスタムのスクリプタブルレンダーパイプライン (SRP) ビルトインレンダーパイプライン
SRP バッチャー はい はい はい いいえ

SRP バッチャーの仕組み

ドローコールを最適化する従来の方法は、その数を減らすことです。その代わりに、SRP バッチャーは、ドローコール間のレンダー状態の変化を低減します。これを行うために、SRP バッチャーは、一連の GPU コマンド binddraw を結合します。それぞれのコマンド群が、SRP バッチと呼ばれます。

bind と draw コマンドのバッチ処理により、ドローコール間の GPU 設定が削減されます。
bind と draw コマンドのバッチ処理により、ドローコール間の GPU 設定が削減されます。

レンダリングの最適なパフォーマンスを得るには、各 SRP バッチができるだけ多く binddraw コマンドを含む必要があります。これを実現するには、できるだけ少ないシェーダーバリアントを使用します。同じシェーダーを使って、必要な数の異なるマテリアルを制限なく使用できます。

レンダーループ中に、Unity が新しいマテリアルを検出すると、CPU はすべてのプロパティを収集し、定数バッファで GPU にバインドします。GPU バッファの数は、シェーダーが定数バッファを宣言する方法によって異なります。

SRP バッチャーは、マテリアルデータを GPU メモリに維持する低レベルのレンダリングループです。マテリアルコンテンツが変わらない場合、SRP バッチャーはレンダー状態の変更をしません。代わりに、SRP バッチャーは専用のコードパスを使用して、以下のように大きな GPU バッファの Unity エンジンのプロパティを更新します。

SRP バッチャーのレンダリングワークフロー。SRP バッチャーは専用のコードパスを使用して、大きな GPU バッファの Unity エンジンのプロパティを更新します。
SRP バッチャーのレンダリングワークフロー。SRP バッチャーは専用のコードパスを使用して、大きな GPU バッファの Unity エンジンのプロパティを更新します。

CPU は、上の図で Per Object large buffer とラベル付けされている Unity エンジンのプロパティのみを処理します。すべてのマテリアルには、GPU メモリに配置された永続的な定数バッファがあり、すぐに使用できます。これにより、レンダリングが高速化されます。

  • すべての素材コンテンツが GPU メモリに永続化されるようになりました。
  • 専用のコードは、オブジェクトごとのすべてのプロパティのための大きな GPU 定数バッファを管理します。
URP でのスクリプタブルレンダーパイプラインバッチャー
URP でのゲームオブジェクトと SRP バッチャーの互換性の確認