GPUでの地形の生成


9

私のエンジンでは、CPUで計算されたPerlinノイズalghoritmを使用して無限地形を作成します。

地形の作成は次のようになります。

  • カメラがアンロードされたパッチに近い場合、作成します
  • 与えられた境界で513x513ノイズ配列を計算します
  • 法線、接線、従法線、インデックスを計算する
  • データをvboに渡す

長所:

  • 必要なときにのみレンダリングする必要がある
  • 衝突しやすい

コン

  • 遅い64個の513x513パッチが3,1s(1スレッド)で作成されます。各タイルについて、〜20msのノイズの作成、〜25msの頂点、法線、正接、正接、インデックス。カメラが速く動くとき、ユーザーはタイルのロードに気づくことができます。
  • メモリを消費する???

今私はGPUで地形を完全に生成することによってこれをスピードアップする方法を考えていましたが、いくつかの疑問があります:

  • シェーダーがすべてのフレームを実行する場合、この計算能力はノイズを何度も計算するために無駄になりませんか?これは、結果をRBGAテクスチャに書き込み、後で頂点シェーダーでディスプレイスメントに使用することで回避できますが、メモリ使用量が増加します。一方、作成が非常に高速になる場合は、表示されているタイルのみをメモリに保持する必要があります。ただし、バッファーを切り離すと、gpu-cpu syncが発生し、アプリの速度が低下する場合があります(私は正しいですか?)
  • テレインが頂点シェーダーによって置き換えられたフラットグリッドである場合、CPUで同じ作業を実行して、衝突の特定のポイントで高さと法線を計算する必要があります。
  • これは単なる概念ですが、すべてを高速化するために、ビューポートにグリッドを投影することを考えていたため、使用される頂点は最小限に抑えられています。これでうまくいくと思いますか?

私の最後の質問は:

GPUで無限地形を作成するために最もよく/最も速く/広く使用されているテクニックは何ですか?


8
GPUで地形を作成すると、衝突検出、ピッキング検出、または地形とのあらゆる種類のやり取りが難しくなることに注意してください。
MichaelHouse

1
コンピューティングシェーダー(DX10または11)を使用して、GPUでテレインを生成できます。しかし、Byte56が述べたように、GPUとやり取りするには、GPUから値を引き戻す必要があります。msdn.microsoft.com/en-us/library/windows/desktop/…–
UnderscoreZero

GPUで地形を作成することは、私には悪い考えのようです。うまくいくかもしれませんが、CPU側でテレインを生成し、標準の描画データをGPUに送信すれば、おそらく少しうまくいくと思います。
ベンジャミンデンジャージョンソン

ただ私の経験。私は実際にこれをaparapiで行い、実際に動作するようにした。しかし、実際には、CPUに処理を行わせるよりも遅くなっていました。GPUとの間でデータを送信するオーバーヘッドが原因だと思います。私が正しくリコールした場合、gpuが実際に機能するのは、計算がデータのサイズと比較して大きい(そして絶対的にも大きい)場合のみです
Richard Tingle

この記事はあなたにいくつかのアイデアを与えるかもしれません http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html
Jeremiah Leslie

回答:


2

まあ、そのような目的でGPUを使用しようとすると、compute / opencl / cudaを使用すると思います。

ただし、GPUまたはCPUを使用している(これが実際に行うことです)かどうかに関係なく、現在のフレームに新しい地形が必要であると判断するのが遅すぎる可能性があると判断して(たとえば、1000ミリ秒/ 60 = 16.666ミリ秒、そして、フレーム全体がそれに適合したいと考えています)。

ワーカースレッドでテレインの生成(または圧縮ファイルからの読み込み)を開始し、それをゲームの残りの部分で使用できるようにし、ワーカーが終了したらレンダリングします。通常、これは次のフレーム、またはおそらくその後のフレームになるため、ユーザーはそこでの違いに実際には気づかないでしょうが、それは物事をよりスムーズにします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.