ハイトマップ、ボクセル、ポリゴン(ジオメトリ)地形


15

ハイトマップ、ボクセル、およびポリゴン(ジオメトリ)テレインに関連して:

  1. これら3つすべての主な違いは何ですか?
  2. ボクセルで「滑らかな」地形を形成できますか、たとえば、ボクセルで滑らかな山を得ることができますか、またはボクセルは立方体に制限されていますか?
  3. パフォーマンスの面では、世界2000x2000単位で、ハイトマップテレイン、ボクセルテレイン、またはポリゴンベースのジオメトリテレインはどれくらい高速になりますか?(すべての可能性のレンダリングのために行われた「合理的な」パフォーマンスの向上/最適化があると仮定します)
  4. 地形の作成に使用される他の技術はありますか?
  5. 各タイプを表す良いタイトルはありますか?

PSポリゴンベースの地形は、角張ったものではなく、完全にトレースする必要があります。

回答:


30

ハイトマップ

ハイトマップでは、各頂点の高さコンポーネントのみを保存し(通常は2Dテクスチャとして)、クワッド全体に対して一度だけ位置と解像度を提供します。ランドスケープジオメトリは、ジオメトリシェーダーまたはハードウェアテッセレーションを使用して各フレームで生成されます。ハイトマップは、衝突検出のためにランドスケープデータを保存する最速の方法です。

長所:

  • 比較的低いメモリ使用量:頂点ごとに1つの値を格納するだけで、インデックスは不要です。詳細マップまたはノイズフィルターを使用して、知覚される詳細を増やすことで、これをさらに改善することができます。

  • 比較的高速:ハイトマップのジオメトリシェーダーは小さく、高速に実行されます。ただし、ジオメトリテレインほど高速ではありません。
    三角形ベースの3Dアクセラレーションのないシステムでは、レイマーチングハイトマップが地形をレンダリングする最速の方法です。これは、古いゲームではボクセルグラフィックスと呼ばれていました。

  • Dynamic LOD / terrain:カメラからの距離に基づいて、生成されたメッシュの解像度を変更することが可能です。これにより、解像度が極端に低下した場合(0:40前後)にジオメトリがシフトしますが、興味深い効果に使用できます。

  • 簡単な地形生成/作成:フラクタルパーリンノイズなどのノイズ関数をブレンドすることにより、ハイトマップを簡単に作成でき、ハイトマップエディターは高速で使いやすいです。両方のアプローチを組み合わせることができます。また、エディターでの作業も簡単です。

  • 効率的な物理学:水平位置はメモリ内の(通常)1〜4の位置に直接マッピングされるため、物理学のジオメトリルックアップは非常に高速です。

短所:

  • X / Y座標ごとに正確に1つの高さ:通常、地面に穴が開いたり、崖がはみ出したりすることはありません。

  • 制御が少ない:グリッドサイズがテクスチャ座標と一致する場合にのみ、各ポイントの正確な高さを制御できます。

  • アーティファクト:サブクワッドを定義する4つの頂点が同じ平面上にない場合、2つの頂点間の分割が表示されます。これは通常、基本的な方向に従わないエッジを持つ急な崖で発生します。

ハイトマップは、地形を圧倒的にレンダリングする最も効率的な方法であり、高度な地形機能に依存せず、屋外エリアが広い多くの新しいゲームで使用されています。ウィキペディアは、プログラムその使用ハイトマップのリストを持っているが、その手段は、彼らが唯一ので、ここでは、レンダリングのためにも、いくつかのゲーム資源としてそれらを使用するかどうかはわからない可能性がそれらを使用しました:

  • 理由2:リージョンは正方形のセクターにロードされており、地形に穴はありません。デモでは、通常建物がある場所のエッジに沿って伸びた三角形の深い穴があります。(通常、この領域にはアクセスできませんが、デモの制限の一部を削除するためのmodがあります...)

  • Sims 2(多分):近隣の地形はハイトマップとして読み込まれますが、ロット(建物サイト)が配置される穴があります。しかし、多くの崖を作成する場合、典型的なアーティファクトがあり、家にセラーを追加する(そして崖をベランダの下に隠す)のは非常に退屈です。

  • Valveのソースエンジンゲーム:長方形のブラシ(静的レベルジオメトリ)は、その表面に高さマップされた地形を持つことができます。これらのゲームでは、通常の癖が他のブラシや小道具で隠されていることがよくあります。

すべてのハイトマップテレインはメッシュとしてレンダリングできるため、シェーダーを見ずに確実に伝えることは不可能です。

ボクセル

ボクセル地形は、3Dグリッドの各ポイントの地形データを保存します。この方法は、スパースオクツリーのような圧縮方法を使用する場合でも、意味のある表面の詳細ごとに常に最も多くのストレージを使用します。

(「ボクセルエンジン」という用語は、古い3Dゲームで一般的な地形の高さマップをレイマーチングする方法を表すためによく使用されます。このセクションは、ボクセルデータとして保存された地形にのみ適用されます。)

長所:

  • 連続3Dデータ:ボクセルは、鉱脈のような隠れた地形の特徴に関する連続データを保存するためのほとんど唯一の効率的な方法です。

  • 簡単に修正する:非圧縮ボクセルデータを容易に変更することができます。

  • 高度な地形機能:オーバーハングを作成することが可能です。トンネルはシームレスです。

  • 興味深い地形生成Minecraftは、ノイズ関数と勾配を事前定義された地形機能(ツリー、ダンジョン)でオーバーレイすることによりこれを行います。(詳細については、NotchのブログのTerrain Generation、パート1を参照してください。2011年5月8日現在、パート2はありません。)

短所:

  • 遅い:ボクセルデータをレンダリングするには、レイトレーサー使用するか、たとえばマーチングキューブを使用してメッシュを計算する必要があります(アーティファクトがあります)。隣接するボクセルはメッシュ生成に独立しておらず、シェーダーはより複雑で、通常はより複雑なジオメトリを生成します。LODの高いボクセルデータのレンダリングは非常に遅くなる可能性があります。

  • 膨大なストレージ要件:ボクセルデータの保存には大量のメモリが使用されます。この理由から、ボクセルデータをVRAMにロードするのは実際的ではないことがよくあります。最新のハードウェアでも、小さなテクスチャを使用して補正する必要があるためです。

変形可能な地形などのボクセル機能に依存していないゲームにボクセルを使用することは実用的ではありませんが、場合によっては興味深いゲームメカニクスを許可できます。ボクセルエンジンは古いゲームより一般的ですが、新しい例もあります。

  • アトモンタージュエンジン:ボクセルレンダリング。

  • ワーム4:「ポクセル」を使用します。ウィキペディアによると、ボクセルとポリゴンが混在しています。

  • Minecraft:ボクセルを使用してRAMの地形を表現します。グラフィックはポリゴングラフィックです。ただし、主にソフトウェアで計算されます。

  • Terraria:2Dボクセルの例。どのようにレンダリングされるのかわかりません。

  • ボクセルと物理学の組み合わせ:ゲームではありません。しかし、破壊の可能性をうまく示しています。

  • Voxatron:メニューやHUDを含むほぼすべてのグラフィックスにボクセルを使用するゲーム。

メッシュ

ポリゴンメッシュは、地形を保存およびレンダリングする最も柔軟で正確な方法です。正確な制御や高度な地形機能が必要なゲームでよく使用されます。

長所:

  • 非常に高速:頂点シェーダーで通常の投影計算を行うだけです。ジオメトリシェーダーは必要ありません。

  • 非常に正確:すべての座標は頂点ごとに個別に保存されるため、水平方向に移動して、細かい部分のメッシュ密度を上げることができます。

  • メモリへの影響が少ない:これは、メッシュが通常、ハイマップよりも少ないメモリで済むことを意味します。これは、フィーチャが小さい領域では頂点がよりまばらになる可能性があるためです。
    (ウィキペディアの三角不規則ネットワークを参照)。

  • アーティファクトなし:メッシュはそのままレンダリングされるため、不具合や見た目のボーダーはありません

  • 高度な地形機能:穴を残してオーバーハングを作成することができます。トンネルはシームレスです。

短所:

  • 不十分な動的LOD:事前計算されたメッシュでのみ可能です。これにより、古いデータを新しい頂点にマッピングするために追加データなしで切り替えると「ジャンプ」が発生します。

  • 変更するのは簡単ではありません変更する必要がある領域に対応する頂点を見つけるのは遅くなります。

  • 衝突検出にはあまり効率的ではありません:ハイトマップやボクセルデータとは異なり、特定の場所のメモリアドレスは通常、直接計算できません。つまり、正確なサーフェスジオメトリに依存する物理学とゲームロジックは、他のストレージフォーマットよりも実行速度が遅くなる可能性が高いことを意味します。

ポリゴンテレインは、大きなオープンエリアを持たないゲームや、精度の欠如とオーバーハングのためにハイトマップテレインを使用できないゲームでよく使用されます。リストはありませんが、確かに

  • すべての3Dゼルダと

  • すべての3Dマリオゲーム

これを使って。

その他の方法

シェーダーパイプラインで完全に地形を作成することは可能です。アルゴリズムがフラグメント/ピクセルシェーダーでのみ実行される場合、メモリへの影響はほとんどゼロですが、詳細は事実上無制限になります。明らかな欠点は、形状とカメラが元のレンダリングサーフェスと交差するときの問題をほとんど制御できないことです。プレイヤーが惑星の表面と相互作用しない宇宙ゲームでは依然として有用です。パラメータアニメーションは、この種の地形で最適に機能します。

生成された地形ジオメトリをグラフィックスカードからダウンロードして、ゲームエンジンの残りの部分で使用できるようにする必要がありますが、そのパフォーマンスがどのようになっているか、またはこれがこれまでに行われたかどうかはわかりません。

結論

すべてのシナリオで適切に機能する方法はありませんが、特定のタスクに適した方法を選択するのはかなり簡単です。

  • ハイトマップは、テレインサーフェスにオーバーハングや穴を必要とせず、物理学またはダイナミックテレインを使用する場合に最適なソリューションです。スケーラブルであり、ほとんどのゲームに適しています。

  • メッシュは最高の精度を持ち、オーバーハング、穴、トンネルを記述することができます。頻繁に変化しない複雑な地形がある場合に使用します。

  • ボクセルは、多くの複雑な機能を備えた非常に動的な地形を記述するのに適しています。大量のメモリと処理が必要なため、直接レンダリングしないでください。

  • 地形を操作する必要がない場合や、非常に詳細なグラフィックスが必要な場合は、上記のどの方法よりも優れた方法があります。通常、非常に特定のシナリオでのみ機能します。

さまざまな方法を組み合わせて、複数のフィーチャを取得することができます。たとえば、メッシュテレインを高さマップでテッセレーションし、崖の詳細構造を増やすことができます。

ダイナミックな地形生成が頻繁に使用されている処置用空間シミュレーションいくつかは、過去数年で本当に高度になってきました。これらのプロジェクトのフォーラムには、このトピックに関するリソースが必要です。


3
ソースエンジンは、地形にハイトマップを使用しません。「変位」と呼ばれるテッセレーションされたクワッドを使用しますdeveloper.valvesoftware.com/wiki/Displacement
Tetrad

1
それは甘い答えです、可能であれば、これに+3を与えるでしょう。詳細な情報に感謝します。
-joltmode

@Tetradディスプレイスメントで利用可能な解像度は2の累乗(テクスチャバッファの一般的な制限)です。頂点ごとに保存される座標は高さのみで、テレインハイトマップはテッセレーションされたクワッドとしてレンダリングされます。wikiはまた、ディスプレイスメントのレンダリングコストが通常のジオメトリのレンダリングコストよりも低いと述べています。それらは異なる名前を持つ同じものであると仮定するのは公平だと思う。
タムシ

1
@NickWiggill「ボクセル」の意味は、過去10年でかなり変わったようです。私は現在のウィキペディアのボクセルの定義を通常の3Dグリッドの値として使用していますOutcastエントリには、意味の違いが記載されています。これを明確にするために回答に追加しました。
タムスキ

2
サイドノート:「ポリゴンテレイン」は、GIS では「Triangulated Irregular Network」(略して「TIN​​」)とも呼ばれます。通常、同じ有効解像度のハイトマップよりもメモリ消費が大幅に少なくなります。これは、非必須データやデータのない場所を記録する必要がないためです。最初のゴシックゲームで使用されました(他のゲームについてはわかりません)。
マーティンソイカ

8

言及した用語は相互に排他的ではありません。ハイトマップを使用し、ポリゴンを使用してレンダリングするボクセルベースのゲームを作成することもできます。

  1. 高さマップは、特定の各ポイントでの地面の高さの2次元表現です。多くの場合、それらはグレースケール画像として保存され、輝度はそのポイントの高さを表します。ボクセルは基本的に3Dビットマップです。ボクセル空間をレンダリングするために使用されるさまざまなテクニックがあります。

  2. ボクセルで滑らかな地形を作成できます。ボクセルは立方体に限定されません。そのような方法の1つは、マーチングキューブのようなアルゴリズムを使用することです。これにより、ボクセル表現をポリゴンリストに変換できます。

  3. 三角形が最も少ないものが最も速くレンダリングされます:3

  4. パーリンノイズなどのフラクタルアルゴリズムを使用して、
    詳細な風景を作成できます。Nurbsなどのパラメトリックサーフェスを使用すると、永続的なストレージ要件がほとんどない滑らかな地形を作成できます。

  5. Delta Forceは、ボクセルを使用する古いゲームです。Minecraftはボクセルストレージを使用して風景を表現する場合があります(不明)。Sacrifice by Shinyは、高さマップを使用して効果を高めるゲームです。風景のあるほとんどのゲームは、ジオメトリテレインを使用します。


1
ポイント3の注意点として、GPUはポリゴン数のみを考慮しますが、ジオメトリ生成の側面はまだあります。ボクセルフィールドのジオメトリの生成は、通常、ハイトマップテレイン(単純なプロセス)またはポリゴンベース(明らかに既にジオメトリデータ)よりも遅いプロセスです(ブロック/マーチングキューブはどちらもより複雑なプロセスです)。編集:これは、地形を変形可能にするかどうかにも依存します。
マイケル

3番目のポイントについて...まあ、heightmapはまだ処理する必要があり、それが初めてジオメトリになりますよね?それを念頭に置いて、ポリゴンメッシュは少し速くなるでしょうか?ボクセルをレンダリングするために使用されるテクニックのいくつかを指摘できますか?
-joltmode

2
ジオメトリシェーダーを使用して、ハイトマップからメッシュを生成できます。この方法では、シェーダーパイプラインの各フレームでジオメトリが生成されている間、高さマップと位置や解像度などのパラメーターのみを保存します。マーチングキューブよりも高速で、ポリゴンメッシュよりも低速です。heighmapsの利点は、メモリ消費量が少ないことです。メッシュが必要とする量の1/3を少し超えるだけです。欠点は、それほど柔軟ではないことです(細かいディテールやオーバーハングはありません)。生成されたメッシュの詳細を動的に調整できますが、これによりジオメトリがシフトします。
タムスキ

@Tamschi、もしあなたがその答えを提供してくれるなら、まさに私が探していたものです。:)
joltmode

@Tomこれをフォーマットして、さらにいくつかの例を見つけることができるかどうかを確認します。
タムシ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.