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.
Odpowiedzi:
Amit Patel, użytkownik tej strony, stworzył wspaniały zasób informacji o losowym generowaniu świata, który z pewnością będzie dla ciebie przydatny.
Ponadto na tej stronie znajduje się kilka świetnych pytań / odpowiedzi na temat generowania procedur.
Generowanie dróg / rzek na 2d mapie sieci
Proceduralna generacja świata zorientowana na funkcje gry
Jak mogę generować losowe jeziora i rzeki w mojej grze?
Losowe generowanie map
źródło
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):
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. :)
źródło
Większość wdrożeń, które widziałem, albo łączyły „mapę rzeki” (używając wąskiego pasma z szumu Perlina lub podobnego podejścia) lub metodę „kropli deszczu”, o której wspomniałeś.
Oto kilka punktów odskoku:
źródło