Wie kann man Höhlen erzeugen, die denen von Minecraft ähneln?


34

Ich arbeite schon seit einiger Zeit an einer 3D-Verfahrenswelt und möchte nun Höhlensysteme hinzufügen. Ich verwende derzeit 2D / 3D Perlin Noise für die Geländegenerierung in Kombination mit Marching Cubes für glattes Gelände. Ich bin nur ratlos, wenn es um lange miteinander verbundene Höhlen geht.

Ich hoffe, mehr wie Minecrafts Höhlensysteme zu bekommen. Sie scheinen sehr verbunden zu sein, verzweigen sich zufällig in fast jede Richtung und fast jeder Punkt in der Höhle würde ein ziemlich kreisförmiges Aussehen mit einem ziemlich gleichen Radius haben (nicht die beste Formulierung, aber nicht ganz sicher, wie man es anders ausdrückt). .

Die größte Herausforderung für die Erzeugung von Höhlen, wie ich sie mir wünsche, ist, dass ich die Welt im Fluge erzeugen möchte. Die Welt wird derzeit Stück für Stück erzeugt, beginnend dort, wo sich der Spieler befindet, und von dort aus nach außen. Ich würde NICHT die Welt erschaffen wollen und dann die Höhlen mit einem Wandermuster, zellularen Automaten usw. ausgraben.

Gibt es dafür bekannte Algorithmen? Wenn ja, möchte jemand mitteilen, wie er etwas Ähnliches tut? Ich würde mich über jede Hilfe sehr freuen.

Ein gutes Beispiel: Bildbeschreibung hier eingeben


5
Schauen Sie sich das an und scrollen Sie nach unten.
William Mariager

Es gibt eine Ausgabe des Spieleentwicklermagazins in den letzten 24 Monaten, in der ausführlich besprochen wird, wie Sie das tun, was Sie versuchen. Ich würde ihre Seite besuchen.
Joey Green

@JoeyGreen Wie heißt das Magazin? Oder haben Sie einen Link zu ihrer Website?
Jumpnett

1
Es heißt Spieleentwicklermagazin. gdmag.com . Sie können ein Abonnement erhalten und PDF-Versionen des Magazins der letzten 10+ Jahre erhalten. Wenn Sie sich anmelden, haben Sie die Möglichkeit, frühere Ausgaben zu durchsuchen und die gewünschte Ausgabe zu finden.
Joey Green

Antworten:


30

Minecrafts Höhlen werden nach der Perlin-Wurm-Methode erzeugt. Der Generator schlängelt sich durch das Gelände und stürzt einen Tunnel aus. Minecraft verwendet kein 3D-Perlin-Rauschen zur Erzeugung von Höhlen, da es dazu neigt, nicht verbundene Taschen im Gelände zu lassen. Minecraft-Höhlen wurden seit sehr frühen Alpha-Versionen nicht mehr durch 3D-Perlin-Rauschen erzeugt.

Hier sind Höhlen in Gnomescroll, die mit der "Perlin-Wurm" -Methode erzeugt wurden.

Gnomescroll Cave System Ansicht der ersten Person 1

Gnomescroll Cave System Ansicht der ersten Person 2

Gnomescroll Cave System Dritte Person Ansicht 2

Dies sind die Libnoise "Perlin Worms" aus dem Libnoise-Tutorial. Die Technik reproduziert genau die in Minecraft erzeugten Höhlen.

Linoise Tutorial Perlinwürmer

Die Schlangenparameter beeinflussen die Qualität des Höhlensystems und bestimmen, wie vertikal die Höhlen sind und wie schnell sie ihre Richtung ändern. Höhlen in Minecraft Branch und der Radius des Höhlentunnels variiert über die Länge der Höhlen.

Minecraft erzeugt die Höhlen Stück für Stück. Der erforderliche Ansatz ist kompliziert und niemand hat Minecrafts Höhlengenerator bisher perfekt rückentwickelt, trotz des Interesses der Servermodder.

Der wahrscheinlichste Ansatz generiert die Schlangenhöhlen Stück für Stück, wenn die unendliche Karte generiert wird und sich nach außen ausdehnt. Die Höhlen auf dem aktuellen Block sind Funktionen der Höhlensamen auf den nächsten N Blöcken für einige N. Unter Verwendung eines Zufallszahlengenerators, der eine Funktion der Blockkoordinaten zum Aussäen der Höhlen ist, ist es möglich, die Höhlen auf dem aktuellen Block für eine zu berechnen unendliche Karte, während nur die Chunks innerhalb eines endlichen Chunk-Radius ausgewertet werden.


3
Können Sie Informationen oder Ressourcen hinzufügen, um mehr über dieses "Perlin-Würmer" -Ding zu erfahren?
David Gouveia

1
Dies ist ein Tutorial zu "Perlin-Würmern" libnoise.sourceforge.net/examples/worms/index.html
HaltingState

Nicht notwendig, aber wenn Sie diesen letzten Absatz näher erläutern könnten, wäre ich Ihnen sehr dankbar. Um einen Wurm zu generieren, würde ich annehmen, dass Sie einen Startpunkt pro Wurm benötigen, der innerhalb von N Abschnitten von jedem Spieler liegen müsste, bei dem N die maximale Länge eines Wurms ist.
Mythics

3
Genau. Jeder Wurm hat einen Startpunkt und wird beendet, wenn er außerhalb eines bestimmten Blockradius wandert. Es gibt einen Zufallszahlengenerator, der deterministisch eine Pseudozufallszahlenfolge erzeugt, die eine Funktion der Blockkoordinaten ist. Diese Zufallszahlen bestimmen, wo und wie viele Würmer von diesem Knoten ausgehen. Würmer können sich auch verzweigen. Die Rechenlast wird verringert, wenn die Würmer "lokaler" sind und nicht mehr als einen kleinen Teilradius wagen können.
HaltingState

Vielleicht nicht genau das, was ich hören wollte, aber was ich erwartet hatte. Nochmals vielen Dank HaltingState. :)
Mythics

7

Ich würde eine Punktewolke in Bereichen erzeugen, in denen das Gelände fest ist - Sie können mit verschiedenen Dichten experimentieren. Dann würde ich einen Algorithmus wie einen Minimum Spanning Tree verwenden, um alle Punkte zu verbinden - dies stellt sicher, dass jeder Bereich erreichbar ist. Dann zeichnen Sie einfach große hohle (aus Luft zusammengesetzte) Bereiche von Knoten zu Knoten (dh eine dicke Linie von Voxeln).


Ich verstehe vielleicht nicht genau, was Sie damit meinen, aber wie würde ich das Stück für Stück tun, wenn die Welt es schafft?
Mythics

Eine Möglichkeit besteht darin, den minimalen Spannbaum in jedem Block separat zu generieren und dann jeden Block zu verbinden, indem die nächsten beiden Knoten zwischen den beiden Blöcken gefunden werden. Nachdem ein Chunk mit Ihrem Standard-Terrain-Algorithmus ausgefüllt wurde, können Sie ihn um den minimalen Spannbaum aushöhlen.
Gavan Woolery

1
Eine andere (einfachere) Lösung, die zwar weniger effizient und wahrscheinlich "lauter" ist, ist die Verwendung der Brown'schen Bewegung, um einen Pfad herauszuschneiden (ähnlich einer Ameise, die zufällig herumgräbt).
Gavan Woolery


1

Verwenden Sie eine Rauschfunktion, um jedem Block Werte zuzuweisen, um festzustellen, ob er Tunnel hat oder nicht, und um dann zu entscheiden, wo Höhlen platziert werden sollen. Wenn Sie Tunnel verwenden möchten, verwenden Sie einfach mehr Rauschfunktionen (mit unterschiedlichen Ausgangswerten) und bestimmen Sie anhand ihrer Werte, ob es Tunnel gibt. Verwenden Sie anschließend normale "Zeichen" -Funktionen, um die Tunnel zu erstellen. Um alles realistischer zu machen, verwenden Sie mehr Lärm, um zufällige Verschiebungen für die Ursprungspunkte der Höhlen / Tunnel vorzunehmen.

Wenn Sie nicht mehrere Rauschfunktionen verwenden möchten, können Sie größere Entfernungen abfragen, anstatt beispielsweise noise3d (2,2,2) für chunk at (2,2,2) do noise3d (2,2, 16) und verwenden Sie (2,2,16) für einen Wert, (2,2,17) für den zweiten Wert, usw. ... und stimmen Sie dann Ihre Frequenz entsprechend ab, um entweder alle Werte unabhängig zu machen oder sie auf kurzen Skalen zu korrelieren.

Um die Höhlendichte weltweit zu variieren, verwenden Sie eine andere Funktion mit niedrigerer Frequenz, die diese Werte beeinflusst.

Falls dies zu unordentlichen Höhlen führt, erhöhen Sie einfach die Entfernung der miteinander verbundenen Punkte oder stimmen Sie den Algorithmus auf andere Weise ab.

Ich bin nicht sicher, ob Minecraft Höhlen wie diese anbietet (obwohl ich denke, dass dies der Fall ist), aber diese Lösung sollte zufriedenstellende Ergebnisse liefern.


-5

hier ist

Obwohl die meisten Höhlen wie die oben genannten den Perlin-Wurm verwenden , möchten manche Menschen dies lieber manuell tun. Auf diese Weise können sie es genau so machen, wie sie es Block für Block wollen. Eine Höhle, die mit dem Perlin-Wurm hergestellt wurde, kann ungenau sein und die Höhle möglicherweise nur 5 Fuß hoch und 6 Fuß breit machen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.