各キャラクターに独自のVBOを与えるべきですか、それともそれらを単一のVBOにバッチする必要がありますか?


10

私は3D一人称ゲームを作成しています。各キャラクターに独自のVBOを与えるべきでしょうか、それともすべてのキャラクターを単一のVBOにまとめるべきでしょうか?長所/短所は何ですか?


これは重複した質問です。何のことかはよくわかりませんが、それは間違いです。
DeadMG '30 / 07/30

これはに似ていますが、それ自体が重複しているとは思いません。まず、これはOpen-GL(特定の違いがあるかどうかはわかりません)ですが、他の質問は、 DirectX11(おそらくテセレーションを使用しており、これにより状況が変化します)。
Thomas Russell

回答:


11

これは実際にはパフォーマンスと柔軟性の間の選択ですが、私はそれについて私の意見をリストします。

1つのVBO

良い面は:

  • シーンを描くためのドローコールは1つだけです。これにより、パフォーマンス向上します。アプリケーションで複数の描画呼び出しが必要になる場合がありますが、1つのVBOを使用して、カウントとオフセットで描画を決定できます。
  • オブジェクト間の状態変更は不要です。これにより、パフォーマンス向上します。

マイナス面は次のとおりです。

  • 管理が難しい。ただし、適切に設計されているかどうかなど、コードの記述方法によって異なります。
  • 管理難しいとは、VBOを更新したり、オブジェクトごとに正しいオフセットを設定したりすることです。

個別のVBO:s

良い面は:

  • 簡単に実装できます。
  • 最初から管理が簡単です。

マイナス面は次のとおりです。

  • 多くの状態変化。これにより、パフォーマンスが低下します。
  • たくさんのドローコール。パフォーマンスが低下します。

概要

アプリケーションのプロファイルを作成することをお勧めします。あなたが見ることができるデータであなたの本当のボトルネックを取得します。時期尚早の最適化は、(この場合)不要であると示すことができます。ただし、そうは言っても、個々のVBO:sシナリオを前提として、アプリケーションで実際のパフォーマンスの低下を発見した場合は、単一のVBOの実装を開始できます。

ただし、必要でない限り(オブジェクトの数が少ない、全体的な状態の変化が少ないなど)、それが機能しないことがわかっていない限り、個々のVBO:sを使用することをお勧めします。

編集する

複数のドローコールがあっても問題ないことを忘れていました。パフォーマンスがクリティカルなときに最も重要なことは、状態の変化を最小限に抑えることです。処理するインデックスの数と描画呼び出しごとのオフセットを設定するだけで十分です。ただし、状態の変化をできるだけ少なくし、描画呼び出しをできるだけ少なくします。これが、この回答の大きなこんにちは、または少なくとも私が言おうとしたことです。


描画呼び出しを1回だけ実行すると、メッシュごと(頂点ごとではなく)の状態変化(ユニフォームなど)のためにねじ込まれます。また、すべてを描画するためにallまたはnoneを強制します。確かにそれを分解して、1つのVBOの複数の描画呼び出しのみが存在するようにすることができますが、新しいメッシュを追加する場合はどうでしょうか。
減速

1
@Daniel:新しいメッシュは単にVBOに更新/追加する必要があります。複数のドローコールがあっても問題ないことを忘れていました。パフォーマンスがクリティカルなときに最も重要なことは、状態の変化を最小限に抑えることです。処理するインデックスの数と描画呼び出しごとのオフセットを設定するだけで十分です。ただし、状態の変化をできるだけ少なくし、描画呼び出しをできるだけ少なくします。それが、この回答の大きなこんにちはです。少なくとも私が言おうとしたことです。:-)
Wroclai、2011

2005年のバッチ、バッチ、バッチでは、描画呼び出しのみを処理することで完全にCPUに縛られる前に、1 GHzのCPUで10kから25kのバッチを利用できるという結論に達しました。これは60Hzフレームあたり数百のバッチに変換されるため、すべてを1つのVBにシューホーンすることは必須ではありませんが、同じVBに同様の特性(寿命、更新レート、属性)を持つジオメトリをバンドルする場合に役立ちます。
Lars Viklund、2011

1
錐台カリングも考慮に入れるべきだと思います。
Tara
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.