0

すべての頂点とインデックスを含むメッシュのサイズが (最適な) 頂点バッファー オブジェクトの上限 (~8MB) よりも大きい状況に遭遇しました。メッシュを複数の頂点バッファーに分割し、インデックスの有効性を維持できるかどうか疑問に思っていました。つまり、最初の頂点にインデックスがあり、最後の頂点にインデックスがある三角形 (つまり、別々の VBO)。

頂点配列オブジェクト内でこれを維持しながら。私の考えでは、手間を省いて、このようなメッシュ (messes :P) には必要なサイズ (> 8MB) を使用するだけです。それが私が今していることです。しかし、理想的には、現時点で私のバッファー マネージャー (wip) は最適なサイズを使用しています。その場合、特別なケースを作成する必要があるかもしれません。

何か案は?

注:どちらがより適しているか確信が持てなかったので、これをgamedev stackにもクロスポストしました(部分的には設計上の問題です)。

4

2 に答える 2

1

8MBの頂点データは、単一のモデルではかなりの量になります。このモデルは個々のメッシュに分割できると確信しています。メッシュを分割するのに適した場所は鋭いエッジです。これらのエッジに沿った頂点は異なる法線ベクトルを持っているため、同一ではなく、共有できません。

ただし、VBOサイズよりも重要なのは、glDrawElements(またはglDrawArrays)に渡されるレンダリングバッチのサイズです。私の経験では、レンダリングバッチの最適なサイズは、キャッシュプレッシャーが発生する前の100〜2000の三角形です。ただし、システムでそれを自分で測定する必要があります。

于 2011-02-21T11:06:56.190 に答える
0

私の知る限り、設定できる glVertexPointer は 1 つだけです。したがって、このポインターをビッグデータストレージに設定できますが、それはクライアントのメモリ内にあり、VBO はありません。VBO を使用したくない場合は、一度に 1 つしか存在できません。

しかし実際には、すべてのデータをテクスチャとして保存し、ジオメトリ シェーダーを使用してインデックスだけからモデルを再構築することができます。私の Radeon 3870HD のテクスチャ制限は 1 次元あたり 8192 ですが、1D テクスチャ以上を使用するとメモリ不足になる可能性が高くなります (私のカードのメモリは 512 MB で、完全な 2D RGB テクスチャは約 805 MB です)。ジオメトリ シェーダーでは、サポートされているインデックスに従って頂点を接続し、メッシュを作成できますが、これは非常に大きな回避策であり、あまり実用的ではありません。

前述のように、そのような正確なモデルを作成するのはリソースの無駄です。ほとんどの 3D デザイナーでは、視覚に影響を与えずにポリゴン数を大幅に減らすためのモディファイヤがあり、詳細すぎる部分を選択するだけです。また、ほとんどの場合、モデルの約 50% が表示され、残りがテストによって破棄されることを考えると、パフォーマンスが大幅に低下します。

于 2011-02-21T21:32:45.250 に答える