Ich arbeite an einem Spiel im Worms-Stil und möchte prozedural etwas Terrain generieren. Ich habe zuvor viel Terrain mit Perlin-Rauschen erzeugt, und das ist, was ich für dieses Spiel verwendet habe. Das einzige Problem dabei ist, dass es zu einfach und langweilig ist und mir ein paar Hügel gibt, aber nicht die Komplexität, die ich will. Ich hätte gerne Höhlen und hängende Berge und schwimmende Inseln und so. So etwas, aber noch verrückter wäre in Ordnung:
Ich dachte zuerst daran, das Terrain mit klassischem Perlin-Rauschen zu erzeugen, dann nur Teile zu entfernen, um Höhlen zu erzeugen, und was nicht, aber ich habe Probleme, das Entfernen dieser Teile zu steuern. Gibt es Alternativen zur Erzeugung eines solchen Geländes?
Antworten:
Ich würde vorschlagen, dass Sie mit 2D Perlin-Rauschen beginnen. Etwas wie das:
Wenden Sie dann einen Schwellenwert auf das Bild an, sodass Sie mehrere isolierte Inseln erhalten, wie hier gezeigt:
Ich habe eine Schwelle von 0,04 gewählt, alles, was über der Schwelle liegt, wird blau gefärbt. Der Rest bleibt schwarz. Danach ist es Zeit zu bestimmen, welche "Inseln" behalten und welche weggeworfen werden sollen.
Ein möglicher Ansatz wäre, das Bild in verschiedenen Höhen von links nach rechts zu durchlaufen und sich überschneidende "Inseln" mit einer bestimmten Wahrscheinlichkeit auszuwählen. Im Beispielbild hat die unterste Linie eine Wahrscheinlichkeit von 100%, sodass jede Insel, die sie überquert, ausgewählt wird (weiß gefüllt). Die zweite Zeile hat eine Wahrscheinlichkeit von 50% und die oberste Zeile eine Wahrscheinlichkeit von 10%.
Sobald Sie Ihre Inseln so markiert haben, können Sie die Lücken zwischen ihnen schließen, indem Sie eine morphologische Operation anwenden ( erweitern ).
Und es gibt eine mögliche Landschaft.
Die "Granularität" des Rauschens wird bestimmen, wie klein die Details in Ihrer Welt sein werden. Daher ist es wahrscheinlich am besten, mit diesen Werten zu experimentieren.
Auch wo und mit welchen Wahrscheinlichkeiten Ihre "Auswahllinien" positioniert sind, wird das Ergebnis sehr unterschiedlich ausfallen. Wenn Sie eine Linie in der Nähe des oberen Bildrandes haben, mit der Sie mit hoher Wahrscheinlichkeit eine Insel "auswählen" können, können Sie eine Art Höhlenlandschaft usw. bauen.
quelle
24
fürbaseX
undbaseY
, 1 Oktave und ich entschied mich für die Ausgabe von Graustufenrauschen und deaktiviertem "Fraktal". In welcher Sprache setzen Sie das um?Ich würde mit einem Perlin-Geräusch beginnen, das sorgfältig gefiltert wurde. Sie würden mit so etwas wie dem Bild enden, das der Frage beigefügt ist, mit schwimmenden Inseln. Juste entfernen Sie die schwimmenden Inseln danach mit einem Zählalgorithmus wie hier diskutiert
quelle
Ich habe diese ausgehend von Bummzack ausgezeichnete Antwort tatsächlich umgesetzt.
Hier sind die Schritte, mit denen ich endete:
Und das ist ein Beispiel für das Ergebnis:
Ich schrieb einen ausführlichen Artikel über den gesamten Prozess hier und den Code (JavaScript) ist Open Source, check it out , wenn Sie etwas bereit zu verwenden wollen;)
quelle