Ich habe derzeit Inseln, die so aussehen:
Und ich möchte es prozedural in folgende Regionen unterteilen:
Welcher Algorithmus macht was ich suche? Haben Sie Vorschläge, wie Sie kohärente Regionen wie im unteren Bild erstellen können? Deine Hilfe wird wertgeschätzt.
procedural-generation
terrain
domisum
quelle
quelle
Antworten:
In der realen Welt folgen diese Provinzgrenzen häufig geologischen Merkmalen wie Flüssen.
Ein guter Ansatz wäre es also, die Geologie der Insel zu modellieren und die Grenzen herauszufallen.
Red Blob Games hat einige gute Artikel zu diesem Thema mit gut aussehenden Ergebnissen.
Sein Ansatz scheint die Verwendung der Voronoi-Tessellation zu beinhalten und die Flüsse als die Grenzen zwischen den Zellen zu definieren.
Schauen Sie sich die anderen Artikel auf seiner Website an, er hat viel über das Thema Kartengenerierung geschrieben .
quelle
Ich würde dieses Problem mit zwei Durchgängen von Voronoi-Diagrammen lösen:
Erster Durchgang: Region Partitioning
Der erste Durchgang würde eine etwas spärliche Punkteverteilung verwenden (dh der Abstand zwischen den Punkten sollte relativ groß sein), um die Insel grob in Regionen zu unterteilen (siehe den Hinweis zur Punktgenerierung weiter unten). Erstellen Sie als nächstes ein Voronoi-Diagramm auf der Grundlage dieser Punkte. Dies unterteilt die Insel in polygonale Regionen um jeden Punkt, wie unten gezeigt:
Zweiter Durchgang: Randomisierung
Nachdem die Insel nun in Regionen unterteilt wurde, besteht der nächste Schritt darin, die Grenzen zwischen ihnen zu "verschärfen". Erstellen Sie dazu eine neue Ebene von Punkten mit einer kompakteren Punkteverteilung (dh der Abstand zwischen den Punkten sollte klein sein) und verwenden Sie diese Punkte erneut, um ein weiteres Voronoi-Diagramm zu erstellen. Ordnen Sie es als Nächstes für jede kleinere Region einer größeren Region zu, indem Sie den Startpunkt überprüfen. Dies führt zu zackigeren Grenzen zwischen den größeren Unterteilungen. Hier ist eine Nahaufnahme davon, wie es mit beiden Voronoi-Diagrammen aussieht:
Und hier ist derselbe Bereich, der nur die letzten Grenzen zeigt:
Kommentare zu Point Generation
In Bezug auf die Punktgenerierung verwende ich gerne eine Poisson-Verteilung , um eine relativ schöne und gleichmäßige Punkteverteilung zu erzielen. Die andere gebräuchliche Option für eine ähnlich gleichmäßige Verteilung ist die Verwendung des Lloyd-Algorithmus für eine Reihe von "regulären" Zufallspunkten. LLoyd's ist einfacher zu codieren, kann jedoch mit einigem Aufwand ermittelt werden, wie viele Durchgänge erforderlich sind, um das gewünschte Ergebnis zu erzielen.
Ein mögliches Problem bei diesem Ansatz besteht darin, dass die Partitionierung im ersten Durchgang einige sehr kleine Bereiche erzeugen kann. Wenn Sie sie nicht in Ihrem Endergebnis haben möchten, würde ich sie einfach mit einer zufälligen angrenzenden Region zusammenführen.
Schlussbemerkungen
Die Illustrationen, die ich zur Verfügung gestellt habe, sind Rasterbilder, aber diese Technik funktioniert auch mit polygonalen / vektordarstellungen.
quelle
MineCraft macht das gut und sein Algorithmus zur Welterzeugung wurde gründlich analysiert und dokumentiert.
Es gibt verschiedene Beschreibungen des Algorithmus, eine davon hier: https://github.com/UnknownShadow200/ClassiCube/wiki/Minecraft-Classic-map-generation-algorithm
Der Kern des Algorithmus ist ein Perlin-Rauschgenerator . Dies steuert die Höhe direkt (mehr oder weniger, da der nachfolgende Schritt zum Herausschneiden von Höhlen auch die Oberfläche verändern kann) sowie die Erzeugung von Biomen. So etwas wie der Biome-Generator ist wahrscheinlich das, was Sie zum Erstellen Ihrer Bereiche verwenden möchten.
(Eine alte Version davon) ist dokumentiert , im Grunde funktioniert es, indem zwei verschiedene Perlin Noise-Generatoren verwendet werden, einer für "Temperatur", einer für "Niederschlag", und dann das Biom aus diesen beiden ausgewählt wird. Die Variablen selbst (Temperatur und Niederschlag) werden später im Spiel nicht wirklich verwendet. Wüsten haben zum Beispiel keinen Regen, aber das Spiel bestimmt dies anhand der "Wüste" -Eigenschaft, nicht anhand des ursprünglichen Niederschlagswerts.
Es gibt verschiedene Online-Tools, um eine Biom-Karte aus einem zufälligen Samen zu generieren . Eines davon ist mineatlas.com . Ich vermute, dass sie intern einen Java-Server verwenden, der die internen Klassen von MineCraft selbst verwendet; Ich weiß nicht, ob der Quellcode direkt verfügbar ist.
quelle
Ein typischer Algorithmus, der beispielsweise von Azgaar ( Quellcode ) verwendet wird. Ist ungefähr so:
quelle
Wenn Sie daran interessiert sind, dies eher im Vektorformat als in rasterbasierten Ansätzen zu tun, habe ich vor einiger Zeit einen Blog-Beitrag darüber geschrieben.
http://blog.particracy.com/worlds-and-their-geography/
Die Idee ist, dass Sie mit einem Netz beginnen (normalerweise auf Voronoi-Basis) und die Regionen konzentrisch aus zufällig gesetzten Punkten wachsen lassen, die einen ausreichenden Abstand voneinander haben.
quelle
Was für eine lustige Frage :) Dieser Ansatz basiert auf Vornoi-Zellen, aber die Entfernungsmetrik ist nicht ganz euklidisch (ich habe die Potenz von 1,5 anstelle von 2,0 verwendet) und enthält eine gewisse Zufälligkeit. Es kann über das Wasser springen, was nicht ideal ist.
Nahe gelegene Regionen können zusammengeführt werden, um interessantere Formen zu erhalten. Hier habe ich die N nächsten Nachbarn verwendet, um dies zu bestimmen.
Wenn Sie interessiert sind, kann ich auf weitere Details eingehen und den Python-Code weitergeben.
quelle