Unity_Lesson

Unityの「Batches(バッチ)」は、SceneビューGameビューの右上に表示される「Stats」(統計)ウィンドウで確認できる項目の一つです。バッチとは、GPUに送信される描画命令(Draw Call)の単位であり、シーン内での描画パフォーマンスを左右する重要な要素です。

バッチ(Batches)とは?

バッチは、GPUに送られる描画命令のセットを指します。基本的に、各オブジェクトを描画するためには、CPUからGPUへ描画命令が送信されます。この命令の一連がバッチです。

バッチの種類

Unityには、描画を効率化するためにいくつかの種類のバッチング技術があります:

  1. ダイナミックバッチング(Dynamic Batching)
    • サイズが小さく、同じマテリアルを使うメッシュをまとめて、1つのバッチに統合する仕組みです。
    • ダイナミックバッチングは自動で行われますが、特定の条件を満たしたオブジェクトに対してのみ適用されます。例えば、1,500頂点未満のメッシュが対象です。
  2. スタティックバッチング(Static Batching)
    • 動かないオブジェクト(Staticオブジェクト)同士をまとめて1つのバッチにする手法です。これにより、描画命令の回数が削減され、パフォーマンスが向上します。
    • スタティックバッチングは、オブジェクトに「Static」フラグを設定することで有効になります。これにより、シーン内の動かないオブジェクトは一括して描画されます。
  3. インスタンシング(GPU Instancing)
    • 同じメッシュとマテリアルを使用する複数のオブジェクトを、GPUのインスタンス機能を使って1つのバッチで描画する技術です。これにより、同じオブジェクトを何度も描画する際のコストが削減されます。
    • 大量の同じオブジェクトを描画する場合に非常に効果的です。

Batchesを減らすための方法

バッチ数が多すぎるとパフォーマンスに影響を与えるため、可能な限りバッチを減らすことが理想です。これを達成するための方法には以下があります:

  1. オブジェクトをまとめる
    • 同じマテリアルやテクスチャを使うオブジェクトをグループ化し、バッチ数を減らす。MeshBakerなどを使用して、複数のメッシュを一つにまとめることでバッチを削減できます。
  2. ダイナミックバッチングを有効にする
    • 自動で複数の小さなオブジェクトをバッチする機能なので、シーン内のオブジェクトがバッチング可能か確認します。
  3. スタティックバッチングの利用
    • 動かないオブジェクトにStaticフラグを設定して、スタティックバッチングを有効にすることでバッチ数を減らせます。
  4. GPUインスタンシング
    • 同じメッシュやマテリアルを使う大量のオブジェクト(木や岩など)を描画する際は、GPUインスタンシングを使用するとバッチ数を大幅に削減できます。

Stats画面の見方

Unityの「Stats」ウィンドウで「Batches」を確認できますが、他にも重要な項目が表示されます:

まとめ