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.
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle