Algorithmen zur Erzeugung von Regenfällen und Flüssen in prozedural erzeugtem Gelände

52

Ich bin vor kurzem fasziniert von den Dingen, die mit prozeduralem Terrain gemacht werden können, und habe angefangen, ein bisschen mit dem Bauen von Welten zu experimentieren. Ich möchte in der Lage sein, Welten wie eine Zwergenfestung mit Biomen zu erschaffen, die aus dem Ineinandergreifen verschiedener Karten entstehen.

Der erste Schritt ist also getan. Unter Verwendung des Diamantquadrat-Algorithmus habe ich einige nette Höhenkarten erstellt. Als nächstes möchte ich einige Wasserspiele hinzufügen und sie mit Regen etwas realistisch erzeugen lassen. Ich habe einige verschiedene Ansätze kennengelernt, z. B. das Beginnen an den höchsten Punkten der Karte und das "Heruntertreten" zum niedrigsten benachbarten Punkt, das sich bündelt / erodiert, während es sich auf den Meeresspiegel hinunterarbeitet.

Gibt es dokumentierte Algorithmen dafür oder sind sie eher von der Stange?

Würde jeden Rat / Gedanken lieben.

Picken
quelle
Ich habe Teile des in diesem Artikel beschriebenen Algorithmus implementiert .
ChaosTechnician

Antworten:

39

Amit Patel, ein Benutzer dieser Site, hat eine wundervolle Informationsquelle über zufällige Welterzeugung erstellt, die Ihnen sicherlich von Nutzen sein wird.

Außerdem gibt es auf dieser Site einige großartige Fragen / Antworten zur Erstellung von Prozeduren.

Straßen- / Flusserzeugung auf 2d Gitterkarte

Prozedurale Welterzeugung, die sich an den Spielfunktionen orientiert

Wie kann ich zufällige Seen und Flüsse in meinem Spiel erzeugen?

Zufällige Kartengenerierung

MichaelHouse
quelle
35

Als ich damals (Ende der neunziger Jahre) mit dieser Art von Dingen experimentierte, las ich einige Zeitungen und Bücher, um mehr über den Wasserfluss zu erfahren, aber ich führte keine Aufzeichnungen darüber, welche ich mir ansah. Ich habe mein eigenes Ding gemacht, weil ich mit Erosion fertig werden wollte. Ich wollte, dass Flüsse Schluchten und Auen bilden. Ich wollte, dass die Stauseen sich mit Sedimenten füllen. Ich wollte, dass Flüsse Effekte wie Mäander- und Altwasserseen erzeugen. Ich wollte Kanäle zur Bewässerung und Wasserableitung. Ich wollte Überschwemmungen, um Bauernhöfe und Häuser in Auen zu beschädigen.

Ich habe einige Notizen (Links) im Abschnitt Geographie dieser Seite aufbewahrt . Es gibt einen Jos Stam-Artikel, den man unbedingt lesen muss. Leider habe ich die Notizen nie organisiert. Leider war das Spiel auch für OS / 2, so dass ich Ihnen keine ausführbare Datei zum Spielen anbieten kann. Und auch leider ist mein Code schrecklich, aber wenn Sie einen Blick darauf werfen möchten, sehen Sie water.cpp im Quellcode (zip).

Dinge, mit denen ich in meiner Simulation gespielt habe (nicht alle realistisch):

  • Gebiete in der Nähe von Flüssen haben feuchten Boden; Gebiete, die weit von Flüssen entfernt sind, haben trockenen Boden. Feuchtigkeit beeinträchtigt die Vegetation. Vegetation verlangsamt den Wasserfluss.
  • Regen schafft Wasser an allen Orten, manchmal. Es fließt dann bergab. Dann verdunstet es und wird vom Boden aufgenommen. Der Regen schneidet Flusskanäle aus.
  • Quellen erzeugen ständig Wasser, jedoch nur an wenigen Stellen. Die Quellen halten die Flusskanäle gefüllt. Ich habe keine Gesteinsschichten oder Grundwasserströmungen simuliert. Ich habe nur zufällig Federn auf Berge gelegt.
  • Fließendes Wasser hat Schwung. Wenn ich mich recht erinnere, war dies wichtig, um Flüsse mäandern zu lassen.
  • Das sich schnell bewegende Wasser nimmt Sedimente auf. Langsam fließende Wasserablagerungen setzen sich davor ab. Dadurch werden Flusstäler ausgeschnitten.
  • Bei der ersten Kartenerstellung habe ich den Wasserfluss und die Erosion beschleunigt. während des Spiels lief es mit normaler Geschwindigkeit.

Insgesamt hatte ich die Erfahrung gemacht, dass das ganze Spiel Spaß gemacht hat , aber es waren viele Heuristiken und Optimierungen erforderlich, um es zum Laufen zu bringen. Ich kam nie zu einem Punkt, an dem ich sagen konnte, dass sich die Flussschöpfung natürlich und unvermeidlich anfühlte, ohne etwas zu verändern. Es hat so viel Spaß gemacht (sowohl als Programmierer als auch als Spieler), dass ich Jahre damit verbracht habe und den Rest des Spiels nie beendet habe. :)

amitp
quelle
12
Sprechen Sie einfach seinen Namen und er wird ankommen.
MichaelHouse
3
@ Byte56 Er ist wie der Candlejack von stackexcha ....
DampeS8N
2
Sie haben mich dazu inspiriert, eine Imlementierung basierend auf Ihrem Hexagon Grid-Artikel zu schreiben, und jetzt inspirieren Sie mich wieder!
Adam Arold