Wie kann ich Feature-Regionen in einer prozedural generierten Welt identifizieren?

26

Ich baue eine Insel. Ich benutze die klassische Höhenkarten-Lösung: Mit einer Hügelbildungsfunktion, die die Ecken der Karte vermeidet, mache ich Höhenmeter. Dann gibt mir Perlin-Lärm einige klimatische Variablen, um mit den Biomen umzugehen. Jetzt stehe ich zwei Herausforderungen gegenüber, die in gewisser Weise miteinander verbunden sind:

  • In der Zwergenfestung ist einer der wichtigsten Aspekte der Weltgeneration, wie das Spiel Gebiete zu "kennen" und ihnen Namen zu geben scheint, obwohl es sich nicht um rechteckige Formen handelt. Ich möchte in der Lage sein, meine Wälder, meine Flüsse, meine Hügel zu "erkennen". Irgendeine Idee, mit welcher Art von Algorithmus ich meine Karte scannen und ihre Gebiete interpretieren könnte? Und wie würdest du das aufbewahren? Ich verwende ein einfaches C ++ - Diagramm, das aus einem Vektor des Vektors "Kacheln Objekt" besteht.

  • Diese Insel sollte in politische Gebiete unterteilt werden, nicht nur in rein natürliche Regionen. Ich könnte Berge und Flüsse benutzen, um "natürliche Grenzen" zu ziehen, aber meine prozedural erzeugte Karte garantiert nicht, dass ich schöne "Enklaven" haben werde, die ein Königreich bilden würden. Ich könnte feststellen, dass ich gigantische "bandförmige" politische Gebiete habe, die von Mikrokönigreichen umgeben sind. Eine andere Möglichkeit wäre, geeignete Gebiete für eine Stadt oder ein Schloss zu suchen. Dann "wachse" ein politisches Gebiet darum herum. Aber auch hier möchte ich einige bekannte Algorithmen haben, bevor ich versuche, meine eigenen zu entwickeln.

Diese Frage könnte als etwas zu vage interpretiert werden. Eine Möglichkeit, sie umzuformulieren, wäre: Wie kann eine prozedural erzeugte Welt (ohne Änderungen!) In Bereiche aufgeteilt werden, die für das Spiel geeignet sind? Vielen Dank im Voraus für Ihre Hilfe.

Raveline
quelle
Vielen Dank für die Korrektur und entschuldigen Sie die schlechte Qualität meines Englisch :)
Raveline
Ihr Englisch ist großartig, es ist nur so, dass der "Titel" vorzugsweise als Frage auf den StackExchange-Sites formuliert wird.
dlras2

Antworten:

21

Amitp schlägt vor, Wassereinzugsgebiete zu verwenden, um verschiedene Regionen zu definieren, wie in seinem Beitrag zur Generierung polygonaler Karten erläutert . Die Wasserscheiden lassen sich am besten erkennen, indem Sie mit seiner Demo eine Karte erstellen . Der Vorteil der Verwendung von Wassereinzugsgebieten zur Unterteilung von Kontinenten besteht darin, dass sie Grenzen senkrecht zur Küstenlinie bilden, während Berge normalerweise parallele Grenzen bilden.

Wenn ich geografische Regionen unterteilen würde, würde ich eine Kombination aus Bergen, Wasserscheiden und Kantenerkennung für die verschiedenen Biome auf meiner Karte verwenden.

Ich werde auch darauf hinweisen, dass politische Regionen im Allgemeinen viele geografische Regionen umfassen. Ich würde zuerst geografische Regionen erzeugt, dann weisen Sie jede Region eine Wünschbarkeit Bewertung (ist es eine Küste? Ist es Gold? Gutes Ackerland?) Und Reisekosten (steiles Gelände? Schwerer Wald ?.) Dann ist Ihre Verwendung Lieblings Wegfindung Algorithmus , erzeugen eine Heatmap des Reisens zwischen gewünschten Regionen. Dies werden schließlich Ihre Straßen sein, und Sie können von dort aus Ihre politischen Grenzen aufbauen. Diese Grenzen werden im Allgemeinen viele Straßen und weniger Straßen zwischen sich haben.

dlras2
quelle
1
Danke für deine Hilfe. Ich kannte die Lösung von Amit bereits und obwohl ich sie ziemlich elegant fand, weiß ich nicht genug über die Mathematik dahinter (ich müsste sie lernen, was ich früher oder später tun werde, aber jetzt nicht!). Das Denken in Bezug auf Wasserscheide könnte mir sicherlich helfen, und die Optimierung des Algorithmus für die Flussgenerierung sollte nicht allzu schwierig sein. Ich liebe Ihre Lösung für den Bau von Straßen und politischen Grenzen. Ich muss überlegen, wie genau ich sie umsetzen werde, aber die Idee ist großartig!
Raveline
@Raveline - Wenn Sie die Generation der politischen Grenzen nutzen, kommentieren Sie dies hier und lassen Sie es mich wissen! Ich würde gerne sehen, wie es ausgeht.
dlras2
13

Hinzufügen zu Dan Rasmussens Antwort:

Einer der Hauptgründe, warum ich von Perlin Noise ( dieses Projekt ) auf Polygone ( dieses Projekt ) umgestiegen bin, ist, dass Polygone eine schöne Struktur für die Zuweisung größerer Gebiete (politische Regionen, Wälder, Wüsten, benannte Gebiete, Grenzen usw.) bieten. Das Beginnen mit der Struktur und das anschließende Generieren der Karte ähnelt dem Rendern von Polygonen, was relativ einfach ist. Mit der Karte zu beginnen und dann auf die Struktur zu schließen, ähnelt dem Computer-Sehen - etwas, das relativ schwierig, aber möglich ist. Ich möchte sowohl die Struktur als auch die Karte, daher habe ich mich für den relativ einfachen Weg entschieden, eine Karte über der Struktur (Knoten und Kanten) zu erstellen.

Schon damals stellte ich fest, dass ich größere Strukturen wollte als das, was ich erzeugt hatte. Wasserscheiden waren ein Versuch, diese größeren Strukturen aufzubauen, aber ich muss mehr Ansätze zur Gruppierung von Polygonen ausprobieren. Ich habe nichts gefunden, mit dem ich glücklich bin.

Ich bin mir nicht sicher, wie die Zwergenfestung das macht. Wenn man bedenkt, wie brillant diese Leute sind, würde es mich nicht überraschen, wenn sie einen ausgeklügelten Algorithmus der Art „Computer Vision“ haben.

amitp
quelle
Ich verstehe die Überlegungen, obwohl ich mir nicht sicher bin, ob Ihr Weg so einfach ist ... Da mein Projekt recht bescheiden ist, werde ich versuchen, etwas nicht allzu Raffiniertes zu patchen, aber ohne Polygone, da dies bedeuten würde, die Algorithmen viel mehr zu studieren impliziert. (PS: Ihre Website ist eine erstaunliche Quelle der Inspiration und ich liebe es!)
Raveline
3
Der Artikel zur Generierung polygonaler Karten war hervorragend.
Raine
3

Bei Ihrer ersten Frage würde ich am besten raten, einen Kantenerkennungsalgorithmus zu verwenden, um die Grenzen Ihrer natürlichen Regionen (Wald, Hügel, ...) zu ermitteln. Für diese Art von Problem gibt es viele Algorithmen.

Für die zweite Frage könnten Sie Ihre eigene Idee verwenden, um eine Burg zu erschaffen (normalerweise auf einem Hügel zur guten Verteidigung und in der Nähe von Süßwasser) und dann mit einem Voronoi-Algorithmus Regionen um jede Burg herum zu erstellen. Sie können Lärm oder Ihre Biomes-Grenzwerte verwenden, um die Grenzen realistischer zu gestalten.

XGouchet
quelle