ドローコールのバッチ処理は、ドローコール最適化 メッシュを結合して、Unity がより少ないドローコールでレンダリングできるようにする方法です。Unity には 2 つのビルトインのドローコールバッチ処理方法があります。
Unity のビルトインのドローコールのバッチ処理には、手動でメッシュをマージするのに比べいくつかの利点があります。最も重要なのは、Unity がまだメッシュを個別に削除できる点です。しかし、欠点もあります。静的バッチ処理はメモリとストレージのオーバーヘッドを発生させ、動的バッチ処理は CPU のオーバーヘッドを発生させます。
このセクションでは、Unity のドローコールのバッチ処理の方法とレンダーパイプラインの互換性についての情報を紹介します。
機能 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタムのスクリプタブルレンダーパイプライン (SRP) |
---|---|---|---|---|
静的バッチ処理 | あり | あり | あり | あり |
動的バッチ処理 | あり | あり | なし | あり |
以下の使用情報は、静的バッチ処理と動的バッチ処理の両方に関連しています。各ドローコールのバッチ方法固有の情報 (有効化の方法や使用方法など) については、静的バッチ処理 と 動的バッチ処理 を参照してください。
メッシュレンダラー、トレイルレンダラー、ラインレンダラー、パーティクルシステム、スプライトレンダラー はドローコールバッチ処理に対応します。Skinned Mesh Renderers Cloth など、他のタイプのレンダリングコンポーネントはサポートされていません。Unity はレンダラーを同じタイプの他のレンダラーとのみバッチ処理します (例えば、Mesh Renderer は Mesh Renderer とバッチ処理されます)。
Unity は、同じマテリアルを使用するゲームオブジェクトのドローコールをバッチ処理します。つまり、ドローコールのバッチ処理から最良の結果を得るために、できるだけ多くのゲームオブジェクト間でマテリアルを共有します。テクスチャだけが違う 2 つの同じマテリアルアセットがある場合、これらのテクスチャを結合して 1 つの大きなテクスチャにします。この処理は、テクスチャのアトラス化と呼ばれます 。詳しくは、テクスチャのアトラス化についての ウイキペディア記事 を参照してください。テクスチャが同じアトラスにあると、代わりに 1 つのマテリアルアセットを使用できます。
ビルトインレンダーパイプラインでは、MaterialPropertyBlock を使用すると、ドローコールのバッチ処理を中断することなくマテリアルのプロパティを変更することができます。CPU はまだレンダー状態の変更を行う必要がありますが、MaterialPropertyBlock
を使用すると複数のマテリアルを使用するよりも高速になります。プロジェクトでスクリプタブルレンダーパイプラインを使用している場合は、。マテリアルの SRP バッチャーの互換性を削除するため MaterialPropertyBlock
を使用しないでくだ さい。
透明なシェーダーは、しばしば、Unity がメッシュを後方から手前の順にレンダリングすることを必要とします。透明なメッシュをバッチ処理するために、Unity はまずメッシュを後方から手前の順に並べ、それからバッチ処理を試みます。Unity はメッシュを後方から手前に向かってレンダリングする必要があるため、多くの場合、透明なメッシュに不透明なメッシュと同等数のバッチ処理を行うことはできません。
Unity はゲームオブジェクトに動的なバッチ処理を適用することができません (Transform コンポーネントのミラーリングを含む)。例えば、あるゲームオブジェクトのスケールが 1 で、別のゲームオブジェクトのスケールが –1 の場合、Unity はそれらを一緒にバッチ処理することができません。
ドローコールのバッチ処理を使用できない場合、互いに近いメッシュを手動で結合することが良い代替方法となり得ます。メッシュの結合の詳細は、メッシュの結合 を参照してください。
注意: C# スクリプトから共有マテリアルプロパティにアクセスする場合は、Renderer.material ではなく、Renderer.sharedMaterial を必ず使用してください。Renderer.material
はマテリアルのコピーを作成し、そのコピーをレンダラーに返します。これにより、Unity がそのレンダラーのドローコールをバッチ処理するのを防ぎます。
2017–10–26 修正されたページ
グラフィックスジョブと互換性のない動的なバッチ処理に関するノートは 2017.2に追加
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.