2

私は地形エンジンを作成しており、地形が巨大ではないため、現在、地形 VB (頂点バッファー) と IB (インデックス バッファー) 全体を一度に GPU にアップロードしています。現時点では 256x256 です。

ここで、パーリン ノイズを使用して高さマップを生成する手続き型地形を作成したいとします。

もちろん、「パッチ」を生成し、パッチのすべての VB と IB を一度に GPU にアップロードすることもできますが、プレーヤーが遠くに移動して新しいパッチを生成する必要がある場合は、新しいパッチを生成してアップロードする必要があります。それらをGPUに。私が心に抱えている混乱や問題は次のとおりです。

  1. VB と IB を GPU にアップロードするのは遅いですか? データが GPU にアップロードされるとき、プレーヤーはちらつきに気付きますか?

  2. パッチの VB と IB を一度にすべてではなく、徐々に GPU にアップロードすると、パフォーマンスは向上しますか? 基本的に、VB と IB のサイズが重要かどうかを尋ねています。

この概念に関する情報は大歓迎です。

ありがとう!

4

1 に答える 1

2

通常、地形をいくつかの小さなパッチに分割し、プレイヤーの移動に合わせてストリーミングします。私のテレイン エンジンでは、インデックス バッファーをバッファー オブジェクトに配置することはありません。LOD メカニズムは、描画される頂点と描画される順序を常に変更して初期 Z を改善するためです。256×256 は妥当なパッチ サイズです。四分木のような構造。

そこでできることは、9 つ​​の地形パッチをロードし、各パッチのサイズを選択して、可視範囲が中央パッチの周囲の境界のどこかで終わるようにすることです。

   |   |
---+---+---
   | C |
---+---+---
   |   |

プレイヤーが C パッチ内を動き回るとき、可視範囲により、ロードされた領域の外を見ることができないことが保証されます。プレーヤーが別のパッチに移動したら、反対側からパッチをラップします。

 A |   |
---+---+---
 B | X-> C
---+---+---
 C |   |

タイル A、B、C を

       |   | A'
    ---+---+---
       ->C | B'
    ---+---+---
       |   | C'

A'、B'、C' は、A、B、C のメモリをリサイクルしますが、新しいコンテンツで埋めます。プレーヤーは遠端から新しい C パッチに移動するため、つまり、新しいパッチのより近い部分を見ることができるため、A'、B'、C' のコンテンツを数フレームにわたってロードできます。

2 つの質問に答えるには:

  1. ジオメトリのアップロードは、実際にはかなり高速なプロセスであるため、目立たないわけではありません。データのアップロードはレンダリング フレーム間で行われ、データが更新されてから描画コマンドが開始されるため、ちらつきは見られません。

  2. コンテンツをアップロードする方法は、レンダリング パフォーマンスには影響しません。ただし、マップ自体の読み込みにかかる時間に影響します。煩わしい読み込みフェーズを挟むことなく大きな世界をプレイヤーが移動できるようにしたい場合は、必要に応じて小さなパッチをアップロードする必要があります。

于 2011-06-09T13:56:37.613 に答える