1つのオブジェクトが「マテリアルA、マテリアルB、マテリアルC」という複数スロット(サブメッシュ構造)を持つ場合のドローコール爆発を解決します。
\n\n具体的な解決方法
テクスチャアトラス化とマテリアルの完全統合
- テクスチャの結合: 個別テクスチャをDCCツール等で1枚のテクスチャアトラスにパッキングします。
- シングルマテリアル化: モデルのマテリアルスロットを **1つ** に統一し、統合されたマテリアルを適用したFBXアセットを再出力します。
1つの3Dモデル(例: 家のモデル)で、屋根、壁、ドアのそれぞれに異なるマテリアル(計3つ)を割り当ててシーンに大量配置したところ、すべてのマテリアルがSRP Batcher対応シェーダーを使用しているにもかかわらず、ドローコール数が全く減らずオブジェクト数×マテリアル数分だけ爆発的に増加する。
単一のメッシュレンダー(Mesh Renderer)に対して複数のマテリアルをスロット指定するマルチマテリアル(サブメッシュ)構造は、描画時にGPUに対してマテリアルステートの切り替え命令を内部で強要するため、SRP Batcherの高速な一括バッチ処理のバインド境界をまたいでしまい、効率的なバッチングが分断されるためです。
DCCツール(Blender/Maya)上で、複数の異なるテクスチャを1つの巨大な「テクスチャアトラス」に結合し、モデルのUV座標を統合します。マテリアルを完全に1枚の統合マテリアルへと「アトラス化」してメッシュを再出力することで、SRP Batcherのバッチング効率を最大化します。
1つのオブジェクトが「マテリアルA、マテリアルB、マテリアルC」という複数スロット(サブメッシュ構造)を持つ場合のドローコール爆発を解決します。
\n\nA. はい、Asset Storeの「Mesh Baker」などを使用すると、Unity上で自動でテクスチャアトラス化とメッシュ結合ベイクを行えます。