ドローコールのバッチ処理は、メッシュを結合することで、より少ないドローコールでレンダリングできるようにする ドローコールの最適化 方法です。Unity には 2 つのビルトインのドローコールのバッチ処理方法があります。
Unity のビルトインのドローコールバッチ処理は、手動でメッシュをマージするよりもいくつかの点で優れています。特に、メッシュを個別にカリングできる点です。ただし、欠点もあります。静的バッチ処理ではメモリーとストレージのオーバーヘッドが発生し、動的バッチ処理では一定程度の CPU オーバーヘッドが発生します。
| 機能 | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタムのスクリプタブルレンダーパイプライン (SRP) | ビルトインレンダーパイプライン |
|---|---|---|---|---|
| Static Batching | はい | はい | はい | はい |
| Dynamic Batching | はい | いいえ | はい | はい |
多くの場合、透明シェーダーはメッシュを後方から手前の順にレンダリングする必要があります。Unity では透明なメッシュをバッチ処理するために、まずメッシュを後方から手前の順に並べ、それからバッチ処理を試みます。メッシュを後方から手前に向かってレンダリングする必要があるため、通常、透明なメッシュには不透明なメッシュほど多くのバッチ処理を行うことはできません。
Transform コンポーネントに対称的な値を持つゲームオブジェクト同士には、動的なバッチ処理を適用することができません。例えば、あるゲームオブジェクトのスケールが 1 で、別のゲームオブジェクトのスケールが –1 の場合、Unity はそれらをまとめてバッチ処理することができません。
ドローコールのバッチ処理を使用できない場合、互いに近いメッシュを手動で結合することが適切な代替方法となり得ます。メッシュの結合の詳細は、メッシュの結合 を参照してください。
注意: C# スクリプトから共有マテリアルプロパティにアクセスする場合は、Renderer.material ではなく、Renderer.sharedMaterial を必ず使用してください。Renderer.material はマテリアルのコピーを作成し、そのコピーをレンダラ―に割り当てます。これにより、Unity がそのレンダラーのドローコールをバッチ処理するのを防ぎます。