動的バッチ処理は、移動するゲームオブジェクトをバッチ処理して ドローコール を削減する ドローコールのバッチ処理 方法です。メッシュと パーティクルシステム のようなランタイムに動的に生成されるジオメトリとでは、動的バッチ処理は異なります。メッシュと動的ジオメトリの内部的な違いについては、メッシュの動的バッチ処理 と 動的に生成されたジオメトリの動的バッチ処理 を参照してください。
ノート: メッシュの動的バッチ処理は、古いローエンドデバイスでのパフォーマンスを最適化するために設計されました。最近の消費者向けハードウェアでは、動的バッチ処理が CPU で行う作業が、ドローコールのオーバーヘッドよりも大きくなることがあります。これはパフォーマンスに悪影響を及ぼします。詳細については、メッシュの動的バッチ処理 を参照してください。
このセクションでは、動的バッチ処理とレンダーパイプラインの互換性についての情報を紹介します。
機能 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタムのスクリプタブルレンダーパイプライン (SRP) |
---|---|---|---|---|
動的バッチ処理 | あり | あり | なし | あり |
Unity では、パーティクルシステムなどの動的ジオメトリには常に動的バッチ処理を使用します。
メッシュに動的バッチ処理を使う場合は以下を行います。
Unity は、共通の使用情報 に記載されている条件を満たす場合、動くメッシュを自動的に同じドローコールにバッ チします。
メッシュの動的バッチ処理は、GPU ではなく CPU ですべての頂点をワールド空間に変換して行われます。つまり、動的バッチ処理が最適化となるのは、変換作業がドローコールを行うよりもリソースを消費しない場合のみです。
ドローコールのリソース要件は、多くの要因、主にグラフィックス API に依存します。例えば、コンソールや Apple Metal のような最新の API では、一般にドローコールのオーバーヘッドははるかに低く、多くの場合、動的バッチ処理ではパフォーマンスの向上は望めません。アプリケーションで動的バッチ処理を使用することが有益かどうかを判断するには、動的バッチ処理を使用した場合と使用しない場合で、アプリケーションを プロファイル してください。
シャドウパスに必要なマテリアル値が同じである限り、マテリアルが異なっていてもシャドウキャスターの動的バッチ処理が使用可能です。例えば、複数の木箱に異なるテクスチャを持つマテリアルを使用することができます。マテリアルのアセットが異なっていても、その違いはシャドウキャスターパスには関係なく、影のレンダリング段階で木箱のゲームオブジェクトの影をバッチ処理することができます。
以下のシナリオでは、Unity は動的バッチ処理を全く使えない、または限定的にしか適用できません。
以下のレンダラーは、パーティクルやラインなどのジオメトリを動的に生成し、動的バッチ処理を用いて最適化することができます。
動的に生成されたジオメトリに対する動的バッチ処理は、メッシュに対するものとは異なる動作をします。
この方法は、Unity が 静的バッチ処理 のためにドローコールを送信する方法と似ています。