Algorytmy dotyczące opadów deszczu i tworzenia rzek w terenie generowanym proceduralnie

52

Ostatnio zafascynowało mnie to, co można zrobić w terenie proceduralnym i zacząłem eksperymentować z budowaniem świata. Chciałbym móc tworzyć światy coś w rodzaju fortecy krasnoludów z biomami utworzonymi z zazębiania różnych map.

Więc pierwszy krok został zrobiony. Korzystając z algorytmu kwadratu diamentowego, stworzyłem kilka fajnych map. Następnym krokiem jest dodanie niektórych funkcji wody i ich realistyczne wygenerowanie z opadami deszczu. Czytałem o kilku różnych podejściach, takich jak rozpoczynanie od najwyższych punktów mapy i „schodzenie” do najniższego sąsiedniego punktu, łączenie / erodowanie, gdy dochodzi ono do poziomu morza.

Czy są z tym jakieś udokumentowane algorytmy, czy są one bardziej skomplikowane?

Chciałbym wszelkich porad / myśli.

Dziobać
źródło
Zaimplementowałem części z algorytmu opisanego w tym artykule .
chaosTechnician

Odpowiedzi:

35

Kiedy eksperymentowałem z tego rodzaju rzeczami (pod koniec lat 90.), przeczytałem kilka artykułów i książek, aby dowiedzieć się o przepływie wody, ale nie prowadziłem rejestru, na które patrzyłem. Skończyło się na tym, że robiłem swoje, ponieważ chciałem poradzić sobie z erozją. Chciałem, aby rzeki produkowały kaniony i równiny zalewowe. Chciałem, aby zapory zapełniły się osadami. Chciałem, aby rzeki przyniosły efekty takie jak meandrujące i starorzecza. Chciałem kanałów do nawadniania i odprowadzania wody. Chciałem, aby powodzie zniszczyły farmy i domy na obszarach zalewowych.

Zachowałem kilka notatek (linków) w sekcji Geografia na tej stronie . Jest artykuł Jos Stama, który należy przeczytać. Niestety nigdy nie organizowałem notatek. Niestety, gra była na system OS / 2, więc nie mogę łatwo dać ci się uruchomić. Niestety, mój kod jest okropny, ale jeśli chcesz rzucić okiem, zobacz water.cpp w kodzie źródłowym (zip).

Rzeczy, w które grałem w mojej symulacji (nie wszystkie realistyczne):

  • Obszary w pobliżu rzek mają wilgotną glebę; obszary daleko od rzek mają suchą glebę. Roślinność dotknięta wilgocią. Roślinność spowalnia przepływ wody.
  • Czasami deszcz tworzy wodę we wszystkich miejscach. Następnie płynie w dół. Następnie odparowuje i jest pochłaniany przez ziemię. Deszcz wycina kanały rzeczne.
  • Źródła cały czas wytwarzają wodę, ale tylko w kilku miejscach. Źródła utrzymują wypełnienie kanałów rzecznych. Nie symulowałem warstw skał ani przepływu wód gruntowych; Właśnie umieściłem sprężyny losowo w górach.
  • Płynąca woda ma pęd. Jeśli dobrze pamiętam, było to ważne, aby rzeki meandrowały.
  • Szybko poruszająca się woda podnosi osad; powolne ruchy osadów wodnych przed nim. To rzeźbi doliny rzek.
  • Podczas początkowego tworzenia mapy przyspieszyłem przepływ wody i erozję; podczas gry biegał z normalną prędkością.

Ogólnie rzecz biorąc, moje doświadczenie było takie, że bawienie się tym było całkiem fajne , ale wymagało to wielu heurystyki i ulepszeń, aby działało. Nigdy nie doszedłem do punktu, w którym mógłbym powiedzieć, że tworzenie rzek wydawało się naturalne i nieuniknione bez żadnych drobnych poprawek. To była tak dobra zabawa (zarówno jako programista, jak i gracz), że spędziłem na nim lata i nigdy nie skończyłem reszty gry. :)

amitp
źródło
12
Po prostu wypowiedz jego imię, a on przybędzie.
MichaelHouse
3
@ Byte56 On jest jak Candlejack z stackexcha ....
DampeS8N
2
Zainspirowałeś mnie do napisania artykułu opartego na twoim sześciokącie, a teraz inspirujesz mnie ponownie!
Adam Arold,