ハイトマップ
ハイトマップでは、各頂点の高さコンポーネントのみを保存し(通常は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:事前計算されたメッシュでのみ可能です。これにより、古いデータを新しい頂点にマッピングするために追加データなしで切り替えると「ジャンプ」が発生します。
変更するのは簡単ではありません:変更する必要がある領域に対応する頂点を見つけるのは遅くなります。
衝突検出にはあまり効率的ではありません:ハイトマップやボクセルデータとは異なり、特定の場所のメモリアドレスは通常、直接計算できません。つまり、正確なサーフェスジオメトリに依存する物理学とゲームロジックは、他のストレージフォーマットよりも実行速度が遅くなる可能性が高いことを意味します。
ポリゴンテレインは、大きなオープンエリアを持たないゲームや、精度の欠如とオーバーハングのためにハイトマップテレインを使用できないゲームでよく使用されます。リストはありませんが、確かに
これを使って。
その他の方法
シェーダーパイプラインで完全に地形を作成することは可能です。アルゴリズムがフラグメント/ピクセルシェーダーでのみ実行される場合、メモリへの影響はほとんどゼロですが、詳細は事実上無制限になります。明らかな欠点は、形状とカメラが元のレンダリングサーフェスと交差するときの問題をほとんど制御できないことです。プレイヤーが惑星の表面と相互作用しない宇宙ゲームでは依然として有用です。パラメータアニメーションは、この種の地形で最適に機能します。
生成された地形ジオメトリをグラフィックスカードからダウンロードして、ゲームエンジンの残りの部分で使用できるようにする必要がありますが、そのパフォーマンスがどのようになっているか、またはこれがこれまでに行われたかどうかはわかりません。
結論
すべてのシナリオで適切に機能する方法はありませんが、特定のタスクに適した方法を選択するのはかなり簡単です。
ハイトマップは、テレインサーフェスにオーバーハングや穴を必要とせず、物理学またはダイナミックテレインを使用する場合に最適なソリューションです。スケーラブルであり、ほとんどのゲームに適しています。
メッシュは最高の精度を持ち、オーバーハング、穴、トンネルを記述することができます。頻繁に変化しない複雑な地形がある場合に使用します。
ボクセルは、多くの複雑な機能を備えた非常に動的な地形を記述するのに適しています。大量のメモリと処理が必要なため、直接レンダリングしないでください。
地形を操作する必要がない場合や、非常に詳細なグラフィックスが必要な場合は、上記のどの方法よりも優れた方法があります。通常、非常に特定のシナリオでのみ機能します。
さまざまな方法を組み合わせて、複数のフィーチャを取得することができます。たとえば、メッシュテレインを高さマップでテッセレーションし、崖の詳細構造を増やすことができます。
ダイナミックな地形生成が頻繁に使用されている処置用空間シミュレーションといくつかは、過去数年で本当に高度になってきました。これらのプロジェクトのフォーラムには、このトピックに関するリソースが必要です。