「チャンクレベルの詳細」を分かりやすく説明する


17

つい最近、Unityでチャンクレベルの詳細システムを実装する意味を理解しようとしています。それぞれが高さマップを持つ4つのメッシュプレーンを生成しますが、現時点ではそれほど重要ではないと思います。このテクニックについて読んだ後、たくさんの質問があります。一度にすべてを尋ねるのが多すぎないことを願っていますが、このテクニックを理解してくれる人にとても感謝しています。

1:メッシュがチャンクに分割されることを、チャンクLODパイプラインのどのポイントで理解できない。これは最初のメッシュ生成中ですか、またはこれを行う別のアルゴリズムがあります。

2チャンクLODデータの格納にQuadtreeデータ構造が使用されていることを理解しています。ポイントが少し欠落していると思いますが、quadtreeは各サブディビジョンレベルの頂点と三角形のデータを格納していますか?

3a:カメラ距離は通常どのように計算されますか。四分木について読むとき、軸に沿った境界ボックスが多く言及されます。この場合、各チャンクには、カメラまたはプレーヤーが近くにあることを検出するための衝突境界ボックスがありますか?またはこれを行うより良い方法はありますか?(多分レイキャスト?)

3b:チャンクはカメラ距離を自身で計算しますか?

4:各チャンクに同じ「解像度」がありますか。たとえば、最上位では、メッシュは32x32になり、各サブノードは32x32になります。以下の例:

チャンクLODの例


手続き型惑星のためのより良いLODアプローチを誰かが知っているなら、それも興味深いでしょう。
カイウスユージン

サッチャー・ウルリッヒのオリジナルのSIGGRAPH論文と関連プログラムをすでに見ていると思いますか?tulrich.com/geekstuff/chunklod.html
drxzcl

私は持っています、それはポイントまで非常に有益ですが、詳細のタイプ、または実装へのアプローチには入りません。ありがとう
Caius Eugene

1
ここには、惑星LODのオプションがいくつかあります。vterrain.org/LOD/spherical.html
OriginalDaemon

回答:


12

1:メッシュがチャンクに分割されることを、チャンクLODパイプラインのどのポイントで理解できない。これは最初のメッシュ生成中ですか、またはこれを行う別のアルゴリズムがあります。

それはどうでもいい事です。たとえば、チャンクをメッシュ生成アルゴリズムに統合できます。これを動的に行うこともできます。そのため、プラズマのような改良アルゴリズムを使用して、より低いレベルが動的に追加されます(たとえば、プレーヤーが近づくにつれて)。アーティスト入力または標高測定データから高解像度メッシュを生成し、アセットのファイナライズ時にすべてのLODチャンクに集約することもできます。または、組み合わせて使用​​できます。本当にアプリケーションに依存します。

2:チャンクLODデータの格納にQuadtreeデータ構造が使用されていることを理解しています。ポイントが少し欠落していると思いますが、quadtreeは各サブディビジョンレベルの頂点と三角形のデータを格納していますか?

必ずしも。ツリーは、ジオメトリとそのレンダリング方法に関する情報を保存するだけです。これは、すべてのツリーノードに頂点/面のリストがあることを意味します。この日と時代では、より現実的には、メッシュ/インスタンスのハンドルをGPUメモリに保存します。

3a:カメラ距離は通常どのように計算されますか。四分木について読むとき、軸に沿った境界ボックスが多く言及されます。この場合、各チャンクには、カメラまたはプレーヤーが近くにあることを検出するための衝突境界ボックスがありますか?またはこれを行うより良い方法はありますか?(多分レイキャスト?)

非常に安価で簡単なオプションは、チャンクの中心点までの距離を使用して修正することです。この距離は常に過小評価であることがわかっています。中心点がdistanceにあるZ場合、これはチャンクの半分がそれより近いことを意味します。しかし、私たちが知らないのはオリエンテーションです。エッジオンの幅のチャンクを表示している場合、チャンクのw最も近いビットはdistanceにありZ-wます。ただし、チャンクコーナーを最初に表示している場合、最も近いビットはdistanceにありZ-sqrt(2)*wます。この不確実性に耐えることができるなら(ほぼいつでも可能です)、完了です。基本的な三角法を使用して視野角を補正することもできます。

アーチファクトを最小限に抑えるために、カメラからチャンクまでの絶対最小距離を計算することを好みます。実際には、これはポイント平方距離テストを実行することを意味します。中心点までの距離を計算するよりも少し手間がかかりますが、これらのフレームごとに何十億も実行するわけではありません。

物理エンジンを利用してこれを行うことができる場合は、ぜひ行ってください。しかし、実際には、「衝突」よりも「距離クエリ」の観点で考えたいと思います。

3b:チャンクはカメラ距離を自分で計算しますか?

エンジンの設計次第です。ただし、葉を比較的軽量に保つことをお勧めします。プラットフォームによっては、数千のテレインチャンクがフレームごとに独自の更新を実行することによる呼び出しのオーバーヘッドが、パフォーマンスに深刻な影響を与える可能性があります。

4:各チャンクに同じ「解像度」がありますか。たとえば、最上位では、メッシュは32x32になり、各サブノードは32x32になります。

必要はありませんが、すべてのチャンクが同じ容量を占有していると便利です。次に、「GPU」メモリ管理を「チャンク」単位で実行できます。また、1つの解像度が他の解像度の倍数である場合、より多くの頂点を共有するため、異なるサイズの2つのチャンク間の継ぎ目を削除/非表示にするのも簡単です。(例:32x32および64x64は、32x32および57x57よりも管理が簡単です)(Guiberに感謝します!)チャンクジオメトリサイズを変更する正当な理由がある場合は、ぜひ行ってください。


2
また、1つの解像度が他の解像度の倍数である場合、より多くの頂点を共有するため、異なるサイズの2つのチャンク間の継ぎ目を削除/非表示にするのも簡単です。(例:32x32および64x64は、32x32および57x57よりも管理が簡単です)
Alayric

素晴らしい答え、それは多くのことを片付けました。特に、実装の多くは、エンジンの機能を考慮していることです。図3(a)私は、ときにするなど、まだわかりませんよ距離クエリを、私はサウンドCPUの重いと考えられてきた2つの実装が、私はこの上でいくつかのより多くの研究を行います。ありがとう
Caius Eugene

Guiber、あなたは正しいです!私はそれを盗んでいます:P
drxzcl

1
@CaiusEugene:私はあなたが距離の決定を過剰に考えていると思います。ポイント3aの返信に、非常に安価で非常に基本的なアルゴリズムを追加しました。
drxzcl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.