• Zuhause
  • Artikel
  • Mit Perlin Noise spielen: Realistische Archipele erzeugen
Veröffentlicht am 05-09-2019

Mit Perlin Noise spielen: Realistische Archipele erzeugen

Ich habe nicht viele großartige Beispiele für das Erstellen von Karten mit Perlin-Rauschen in Python gesehen. Auf geht's!

Perlin-Rauschen ist eine mathematische Formel, mit der „realistische“ Strukturen erzeugt werden. Es ist Lärm, aber im Gegensatz zu normalem Lärm hat es eine kohärente Struktur. Hier ist normales Rauschen gegen Perlin-Rauschen:

Regelmäßiges statisches und Perlin-Rauschen

Im Python-Modul "noise" gibt es einige Parameter, die sich auf das auswirken, was Sie sehen, wenn Sie Ihr Perlin-Rauschen erzeugen:

  1. scale: Zahl, die festlegt, in welcher Entfernung die Noisemap angezeigt werden soll.
  2. Oktaven: Die Anzahl der Detailebenen, die Perlin-Rauschen haben soll.
  3. Lakunarität: Zahl, die angibt, wie viel Detail in jeder Oktave hinzugefügt oder entfernt wird (passt die Frequenz an).
  4. Persistenz: Zahl, die bestimmt, wie viel jede Oktave zur Gesamtform beiträgt (passt die Amplitude an).

Wir kümmern uns nicht zu sehr um die Skalierung. Sie können sie zum Verkleinern (größerer Maßstab) oder Vergrößern (kleinerer Maßstab) verwenden.

Perlin-Rauschen kombiniert mehrere Funktionen, die als "Oktaven" bezeichnet werden, um natürlich aussehende Oberflächen zu erzeugen. Jede Oktave fügt der Oberfläche eine Detailebene hinzu. Zum Beispiel: Oktave 1 könnten Berge sein, Oktave 2 könnten Felsbrocken sein, Oktave 3 könnten die Felsen sein.

Eine Lakunarität von mehr als 1 bedeutet, dass jede Oktave den Grad feinkörniger Details erhöht (erhöhte Frequenz). Lacunarity von 1 bedeutet, dass jede Oktave den gleichen Detaillierungsgrad aufweist. Eine Ungenauigkeit von weniger als eins bedeutet, dass jede Oktave weicher wird. Die letzten beiden sind normalerweise unerwünscht, so dass eine Lakunarität von 2 recht gut funktioniert.

Die Persistenz bestimmt, wie viel jede Oktave zur Gesamtstruktur der Rauschkarte beiträgt. Bei einer Persistenz von 1 tragen alle Oktaven gleich viel bei. Wenn Ihre Persistenz mehr als 1 aufeinanderfolgende Oktaven mehr beiträgt und Sie dem regulären Rauschen etwas näher kommen (Spoiler, das obige reguläre Rauschbild ist tatsächlich ein Perlin-Rauschen mit einer Presistenz von 5,0). Eine Standardeinstellung wäre ein Widerstand von weniger als 1,0, wodurch der Effekt späterer Oktaven verringert wird.

Genug geplaudert! Lassen Sie uns einige Experimente durchführen. Beginnen wir zunächst mit dem Standard-Perlin-Rauschen und dem zugehörigen Bild:

Die Art und Weise, wie dieses Perlin-Rauschen in unserem Skript aussieht, ist ein 2D-Array von Werten zwischen -1 und 1. Die Werte, die auf der Karte dunkler sind, sind niedrigere Werte, die Werte nahe 1 sind heller. Als nächstes möchte ich versuchen, zwei Farben verschiedenen Wertebereichen in dieser Karte zuzuweisen, um etwas Gelände zu erzeugen:

Diese Geländekarte ist ziemlich ordentlich; Es hat zerklüftete Küsten, Strände und viel Wasser. Ich habe zwar noch nie ein natürliches Gelände beobachtet, das so aussieht, aber wenn wir einen Teil der Karte betrachten, erscheint es als "realistisch". Gehen wir noch einen Schritt weiter und fügen Berge und Schnee hinzu:

Das ist cool, aber dieses Geländemuster ist eindeutig nicht natürlich. Um es natürlicher zu machen, werden wir einen kreisförmigen Filter verwenden, um das gesamte Perlinrauschen zu beseitigen:

Wir nennen es Perlins Welt!

Hier habe ich versucht, eine Insel zu erstellen, also habe ich einen kreisförmigen Filter erstellt und ihn dann auf das color_world Perlin Noise Array angewendet. Am Ende schwebte ein Planet in einem Ozean. Ich habe die Ozeanfarbe in Schwarz geändert und es sieht ziemlich cool aus! Das heißt, ich wollte eine Insel, also versuchen wir es noch einmal. Dieses Mal werden wir einen kreisförmigen Gradienten berechnen und diesen dann über das Perlin-Rauschen als Filter anwenden.

Kreisförmige Steigung:

Mit diesem Teil hatte ich viel zu kämpfen. Ich bin mir sicher, dass es einen effizienteren Weg gibt, um diesen Gradienten zu erhalten, aber das oben Genannte ist das, was ich mir ausgedacht habe. Ich habe eine Abstandsmetrik vom Mittelpunkt der Karte aus berechnet und diese Abstände dann normalisiert, verkleinert und renomalisiert, um diesen sphärischen Gradienten zu erzeugen. Wieder heller bedeutet, dass der Wert näher bei 1 liegt, dunklere Farben näher bei 0. Als Nächstes wende ich diesen kreisförmigen Verlauf auf das zuvor erzeugte Perlin-Rauschen an.

Kreisförmige Steigung + Rauschen:

Dieser Teil war weniger knifflig, aber immer noch schmerzhaft. Ich multipliziere das Perlin-Rauschen mit dem Kreisverlauf und erhöhe dann den Kontrast, indem ich positive Werte (hellere Werte) mit 20 multipliziere.

Farbiger Kreisverlauf + Rauschen:

Das ist wirklich cool und es sieht aus wie ein viel natürlicherer Archipel. Ich empfehle Ihnen, verschiedene Schattierungsmethoden auszuprobieren und möglicherweise einige Abschnitte nach dem Zufallsprinzip zu entfernen. Ich werde den Schwellenwert ändern und als Schwellenwert = 0,2 festlegen. Das ergibt einen kleineren, aber realistischeren Archipel:

Da sind wir! Wir haben eine natürlich aussehende Inselgruppe! Jetzt, da wir unsere Inseln haben, werden Sie feststellen, dass unabhängig davon, wie oft Sie dieses Skript wiederholen, Perlin-Rauschen dieselben Inseln erzeugt. Um neue Inseln zu erhalten, können Sie den Basisparameter der Funktion pnoise2 auf eine zufällige Ganzzahl setzen. Versuchen wir, base = 5, base = 100:

Archipele aus Basis 5 und Basis 100.

Fazit

Also haben wir mit ein paar einfachen Geräuschen angefangen und sind zu einer relativ unbegrenzten Anzahl von einzigartigen und natürlich aussehenden Archipelen gekommen! Ich hoffe dir hat dieser Beitrag gefallen!

Das vollständige Notizbuch mit dem gesamten Code finden Sie hier.

Wenn Ihnen dieser Beitrag gefallen hat, können Sie sich hier für meinen Newsletter anmelden und über coole und interessante Projekte auf dem Laufenden bleiben.

Siehe auch

Wie Sie Ihre Seele im Zeitalter des Plattformaufbaus bewahrenDer Engel des BösenWarum Sie Kunst ein bisschen mehr schätzen müssenDie Kunst des Ozeans Kapitel 2Ausstellung der Kulturrevolution, Teil 1: Lesen von „Plakaten mit großen Figuren“Lerne Zeichnen und Programmieren gleichzeitig beim MozFest 2017