球面地図表現


19

私の最新のゲームは、小さな惑星で行われます。球の表面のセルを表すための適切なデータ構造を探しています。三角形、正方形、五角形、六角形?どれが最もストレッチを最小化し、最高のタイリングを作成しますか?

球面マッピングが最も簡単ですが、極での伸びは許容できません。キューブマッピングもかなり簡単ですが、キューブコーナーの近くにまだかなりの伸びがあるでしょう。二十面体を細分化することは、ストレッチの観点からは最適と思われますが、多くの三角形配列のインデックスを作成し、境界で隣接するセルを見つけるという問題があります。

N個の近傍インデックスの配列を持つNゴンを表すポイントの単一の線形配列を使用できると思いますが、それはスペースの巨大な無駄のようです。

ゲームにはRTS要素が含まれているため、影響マップなどを保存し、A *パスファインディングとコンボリューションを実行するため、表現は効率的でなければなりません。


アクターを一方向に移動させ、最終的に開始した場所に到達させるのとは対照的に、マップの正確なトポロジはどれほど重要ですか?最も単純で効率的な表現は、トーラス/ドーナツです。
コンガスボン

1
はい、私は球面マッピングとそれが極に持っている問題に言及しました。サーフェスの周囲に値を保存したいので、3Dサーフェスポイントから配列インデックスへのマッピングをできるだけストレッチをせずに行う必要があります。
-DaleyPaley

四面体を細分割して、球体を作成することができます。これは、サイズが等しく分散された三角形で構成されています。
タラドール

1
@thalador提案をありがとう。確かではありませんが、三角形のルートに行くと、二十面体は四面体よりも優れていると思います。しかし、とにかく、テッセレーションは問題ではありません。私を悩ませているのは、効率的な配列のインデックス付けです。
-DaleyPaley

回答:


12

さて、このトピックに興味のある方のために、私が選んだソリューションの詳細を説明します。答えてくれて、アイデアをくれたみんなに感謝します。

最初に、「最良の」テセレーションのために、切り捨てた二十面体を開始点として選択します。それを細分化すると、曲率を提供する12の五角形で六角形の非常に良いテッセレーションにつながります。また、デュアルで細分割を続けると、素晴らしいプロパティでレンダリングするための非常に良い三角形メッシュが得られます。12個の五角形のセルについては、それらを無視したり、特別なものにしたり(ベースを構築できる唯一の場所のように)したり、風景の下に隠したりできます。

六角形と五角形のセルは、隣接セルに簡単にアクセスして高速に移動できるように、ハーフエッジデータ構造に格納されます。唯一のトリッキーな部分は、特定のワールドポイントがどのセルにあるかを見つけることですが、それはランダムなセルから開始し、隣接するポイントに向かって歩くことで実行できます。

誰かがこの情報が役立つことを願っています。私は多くのことを学び、いくつかの結果が得られることを楽しみにしています。

編集:

これは、正二十面体の分割と、ハーフエッジデータ構造を使用したデュアルメッシュスイッチングの結果を示す画像です。

セル領域をさらに均一にするために、緩和を数回繰り返します。

二十面体の細分化


7

あなたがあなたの質問で提案したように、20面体を細分化することに基づいて、かなりエレガントにこれを行う方法があります。二十面体は20個の正三角形で構成され、これらの三角形は5セットにグループ化できます。セット内の4つの三角形は平行四辺形を形成します。

ここに画像の説明を入力してください

(波線が描かれた4つの三角形のグループは、私が話している平行四辺形です。矢印は、これを20面体に折り畳むためにどのエッジを接着するかを示しています。)

これらの三角形をさらに小さな三角形に分割すると、平行四辺形全体にn x 4nの長方形配列のようにインデックスを付けることができます(例ではn = 4)。

ここに画像の説明を入力してください

各セルの数字は、長方形配列の列番号です。配列内の近傍を見つけるためのルールは非常に簡単です:水平方向の近傍はプラスまたはマイナス1列で、垂直方向の近傍はマイナス1行とプラス1列、またはプラス1行とマイナス1列です。列番号はそれぞれ偶数または奇数です。

ただし、1つの平行四辺形から次の平行四辺形への境界を越える近傍を見つけるための特別な場合のコードを記述する必要があります。一部の場所では、1つの平行四辺形の上部または下部が別の平行四辺形に接続されるか、上部と下部がそれらの間の水平オフセットなどで接続されるため、少し注意が必要です。ここでは平行四辺形が便利です。ただし、少なくとも5つのすべての平行四辺形の関係は対称です。それらはすべて同じパターンに従い、どちらの側が隣のもう一方の側に接続されます。


それは確かに非常に素晴らしい表現です。三角形の方法に関する私の主な関心は、三角形の配列とすべてのステッチを維持することでした。ここにはまだ少しステッチがありますが、配列は長方形です。ありがとう、知っていることは非常に良い
-DaleyPaley

3

うーん-ストレッチについてのコメントは、球面マッピングと平面マッピングの間を移動していることを示しています。これが極の歪みにつながります

タイルを平らで均一にしたい場合は、正二十面体、特に切り捨てられた二十面体がかなり一般的であることは正しい

さまざまなマッピングのすべてをここで見つけることができます- ウィキペディアの球体多面体

遠くトポロジーの問題だと、面の間の関係を維持することのように-あなたが翼のエッジまたはクワッドエッジのいずれかが参考に見つけるかもしれない(とあなたが代数の全体の新しいフォームを満たすために素晴らしい機会を得る)翼エッジ


ああ、切頭二十面体。はい、それはまさに私が必要なものです。ありがとう。また、翼のあるエッジを使用したことはありませんが、メッシュの操作にはハーフエッジを多く使用しているため、その領域に精通しています。乾杯、私は解決に近づいています。
-DaleyPaley

2

私はパーティーに少し遅れていると思いますが、任意のサイズと均一な外観の球形の世界を維持するために使用できる解決策があります。

ここで理解しておくべき重要なことは、世界は平坦ではないため、100%均一なタイリングは不可能であることです(これは、いわゆるヘアリーボールの定理に基づいています)。いくつかの不規則性を許可する必要があります。これらの不規則性を表面全体に均等に広げて、それぞれをできるだけ小さくすることをお勧めします。

実際、非決定的な方法で行うのは非常に簡単です。まず、表面の周囲に一様にN個のランダムな点を選択します。これらのポイントが実際に均一であることを確認してください(球体のポイント選択、式9〜11を参照)。2番目のステップでは、これらのポイントをランダムではなく、より均一にします。これらのポイントはすべて、互いに反発するように負の電荷を持っていると仮定します。平衡状態に収束するまで、いくつかのステップでポイントの動きをシミュレートします。このポイントの最終構成により、球体の表面にほぼ均一に分布するメッシュが得られます。


1
私は毛むくじゃらのボール理論を聞いたことがありませんでした、それは非常に興味深いです。わいせつな冗談を言うのを止めなければなりません。その前に球に点を分散しましたが、問題は、ポリトープを細分化するよりもポリゴン化がはるかに遅いことです。また、セルの形状と原子価は、私の好みには不均一になりすぎます。とにかくありがとう。
DaleyPaley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.