手続き的に生成された世界でフィーチャ領域を識別するにはどうすればよいですか?


26

私は島を作っています。私は古典的なハイトマップソリューションを使用します。丘の構築機能を使用して、マップの角を避けて高度を作成します。次に、パーリンノイズは、バイオームを処理するための気候変数を提供します。今、私は何らかの形で接続されている2つの課題に直面しています:

  • ドワーフ要塞では、世界の生成のきちんとした側面の1つは、ゲームがどのように領域を「認識」し、長方形にするのではなく名前を付けるように見えるかです。森林、川、丘を「認識」できるようにしたい...マップをスキャンしてその領域を解釈するためにどのようなアルゴリズムを使用できるか考えていますか?そして、それをどのように保存しますか?「タイルオブジェクト」のベクトルのベクトルから作成された基本的なC ++グラフを使用しています。

  • この島は、純粋に自然な地域だけでなく、政治的な地域に分けられるべきです。山や川を使って「自然な境界線」を作ることはできますが、手続き的に生成された地図は保証されません。王国を形成する素敵な「飛び地」ができます。ミクロの王国に囲まれた巨大な「リボンの形をした」政治的領域を持っていることに気付いた。別の可能性は、都市または城に適したエリアを探すことです。次に、その周辺の政治領域を「成長」させます。しかし、再び、私は自分自身を考案しようとする前に、いくつかの有名なアルゴリズムを持ちたいです。

この質問は少し曖昧すぎると解釈される可能性があるため、言い換えると、手順で生成された世界をゲームプレイに適した領域に(変更せずに)分割する方法はありますか?よろしくお願いします。


訂正していただきありがとうございます。英語の質が悪いのでごめんなさい:)
Raveline

あなたの英語は素晴らしいです、それは「タイトル」がStackExchangeサイトで質問として好まれているということです。
dlras2

回答:


21

Amitpは、多角形マップ生成に関する彼の投稿で説明されているように、さまざまな領域を定義するために流域を使用することを提案しています。流域は、彼のデモを使用してマップを生成することによって最もよく見られます。大陸を細分化するために流域を使用する利点は、海岸線に垂直な境界を提供することです。一方、山は通常、平行な境界を提供します。

地理的領域を細分化する場合、地図上のさまざまなバイオームで山、分水界、エッジ検出の組み合わせを使用します。

また、政治地域は一般に多くの地理的地域にまたがることを指摘します。最初に地理的地域を生成し、次に各地域に望ましい評価(海岸ですか?ゴールドがありますか?良い農地?)と移動コスト(急な地形?重い森?)を割り当てます。次に、お気に入りのパスアルゴリズムを使用して、望ましい地域間の移動のヒートマップ。これらは最終的にあなたの道となり、そこから政治的境界線を築くことができます。通常、これらの境界には多くの道路が含まれ、それらの間の道路は少なくなります。


1
ご協力ありがとうございました。私はすでにアミットの解決策を知っていました、そしてそれを非常にエレガントであると見つけましたが、私は背後にある数学について十分に知りません(私はそれらを勉強しなければなりません、遅かれ早かれするでしょうが、今はしません!)。流域の観点から考えることは確かに私を助け、川生成アルゴリズムを微調整することはそれほど難しくないはずです。道路と政治的境界線を構築するためのあなたのソリューションが大好きです。それをどのように実装するかを正確に検討する必要がありますが、アイデアは素晴らしいです!
-Raveline

@Raveline-政治的境界の世代を使用している場合は、ここにコメントしてお知らせください!私はそれがどうなるか見てみたいです。
dlras2

13

ダンラスムッセンの答えに追加するには:

Perlin Noise(このプロジェクト)からポリゴン(このプロジェクト)を使用するように切り替えた主な理由の1つは、ポリゴンがいくつかの優れた機能を提供することです。構造をより大きなエリア(政治的地域、森林、砂漠、名前の領域、境界線など)を割り当てます。構造から始めてマップを生成することは、ポリゴンレンダリングに似ています。これは比較的簡単です。マップから始めて、構造を推測することはコンピュータービジョンに似ています。これは比較的困難ですが、可能です。構造体とマップの両方が必要なので、構造体(ノードとエッジ)の上にマップを構築する比較的簡単なルートに進むことにしました。

それでも、私は自分が生成したものよりも大きな構造を望んでいることがわかりました。集水域は、これらの大きな構造を構築する1つの試みでしたが、ポリゴンをグループ化するより多くのアプローチを試す必要があります。満足できるものが見つかりませんでした。

ドワーフ要塞がそれをどのように行っているのか分かりません。それらの人がどれほど素晴らしいかを考えると、彼らが洗練された「コンピュータービジョン」タイプのアルゴリズムを持っているとしても、私は驚かないでしょう。


あなたの道がそれほど簡単ではないのですが、私は推論を理解しています...私のプロジェクトは非常に謙虚なので、あまりアルゴリズムを勉強することを意味するので、あまり洗練されていないものをポリゴンなしでパッチしようとします暗示される。(PS:あなたのウェブサイトは素晴らしいインスピレーションの源であり、私はそれが大好きです!)
Raveline

3
ポリゴンマップ生成の記事はすばらしいものでした。
レイン

3

最初の質問については、エッジ検出アルゴリズムを使用して、自然地域(森林、丘など)の限界を見つけることをお勧めします。この種の問題には多くのアルゴリズムが存在します。

2番目の質問では、独自のアイデアを使用して城を(通常は防御のために丘の上に、真水の近くに)スポーンし、次にボロノイアルゴリズムを使用して各城の周囲に領域を作成します。ノイズまたはバイオーム制限を使用して、境界をより現実的にすることができます。

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