Jak wygenerować losowe mapy, które wyglądają jak losowe mapy Age of Empires II?

18

Podoba mi się sposób, w jaki Age of Empires II generuje losowe mapy (dobra różnorodność, przyzwoite przejścia do biomów, mapy wydawały się losowe bez poczucia chaosu), ale staram się odtworzyć ten styl. Próbowałem użyć np. Szumu Perlina, ale wszystko wychodzi albo zbyt jednorodnie, albo jeśli nie, wartość Perlina -> heurystyka terenu jest zbyt wrażliwa i krucha, aby tworzyć różne typy świata.

Pamiętam typ mapy AoE2 „Nieznany” reklamował „100 000 możliwych map”, sugerując pewne użycie liczb nasion, ale nie jestem pewien, jak użyć liczb nasion w celu uzyskania odmiany, którą widziałem.

Jakich algorytmów i heurystyki można użyć do tworzenia losowych map, które wyglądają jak losowe mapy AoE2?

Edytuj, aby być bardziej szczegółowym:

Myśląc dalej o moim problemie i studiując to, co lubię w losowym silniku map AoE2, uważam, że moim największym problemem jest zarządzanie rozmieszczeniem wody i życia roślin na mapie . Widzę teraz, że wiązałem to również z „przemianami biomów, które mają sens”, ale to inny problem (choć spodziewam się, że moje dalsze używanie hałasu Perlina sprawi, że będzie to trudne do rozwiązania).

Dodałem kilka losowych map AoE2, które podkreślają to, co lubię w ich silniku mapowania, którego moje wysiłki nie są w stanie odtworzyć. Wszystkie zrzuty ekranu pochodzą z losowego typu mapy „Niestandardowe” -> „Nieznany”. Nie poinstruowałem gry, aby używała określonych geografii, takich jak archipelagi.

Dalej znajdują się zdjęcia z mojego silnika mapy. Każdy piksel odpowiada jednemu kafelkowi mapy AoE2.

Jedną z komplikacji dla mojego projektu jest to, że chcę, aby mapy były wiele, wiele razy większe niż mapy AoE2. Tak więc, bez względu na to, jakiego silnika używam, musi być w stanie stworzyć pełny zakres biomów na każdej mapie, a nie jeden wąski zestaw biomów na mapę, jak w przypadku AoE2.

Mapy Age of Empires II

Jeziora śródlądowe

Oto przykład z jeziorami śródlądowymi i rzeczami przypominającymi rzeki. Podoba mi się, jak mapa zawiera rozrzuconą dużą ilość wody, ale ta woda jest nadal nieco skoncentrowana - istnieją duże połacie ziemi, które są dostępne do budowy twojego imperium. Nie musisz spędzać całej gry na planowaniu miasta wokół wody.

Połączone wyspy

Oto podobny przykład, w którym gra była wystarczająco inteligentna, aby połączyć wyspy z przemierzającymi mokradłami. Nie wyobrażam sobie, jak algorytm oparty na hałasie stworzyłby tam bagno i tylko te miejsca. Zwróć też uwagę na to, jak gra stworzyła ziemię, tak aby każdy gracz miał swój prywatny, duży pokos ziemi na początek. Nie stworzył losowych kawałków ziemi, a następnie zgadnij, który z nich byłby najmniej okropny dla każdego gracza.

Wyspy

Podoba mi się, że ta mapa również intensywnie wykorzystuje wodę, ale nie obejmuje wielu jezior śródlądowych. Porównaj to z pierwszym obrazem. Podoba mi się sposób, w jaki AoE2 tworzy zupełnie różne obszary geograficzne przy użyciu tych samych elementów składowych. Moja próba użycia hałasu Perlina tutaj się nie powiodła - albo dostaję ogromne rozległe oceany, które przyćmiewają masę lądową, albo Krainę 10.000 Jezior. Trudno mi było zdobyć obie wyspy i połączone kontynenty (myślę, że Ameryka Północna / Południowa).

Suche, bujne Sucha pustynia

Porównaj ten obraz z powyższym. Pokazują, że jałowość mapy nie zależy od poziomu wody. Pierwsze zdjęcie przedstawia mapę prawie pozbawioną wody, ale zawierającą lasy i trawę. Drugi obraz ma umiarkowaną ilość wody, ale jest pustynią. Podoba mi się to, że jest to możliwe (pomyśl o tym, by mieć w swoim świecie zarówno Nowy Meksyk, jak i Saharę i Kostarykę).

Moje własne mapy

Czytałem w wielu miejscach, że dobrym sposobem na budowanie map jest warstwowanie wielu poziomów szumu Perlina, z których każdy reprezentuje inny wymiar danych. Następujące popularne zalecenia, poszedłem z uniesieniem i wilgoci, wybierając typy terenu od stołu Whittaker tutaj .

Wziąłem dwie mapy perlin, skwantyzowałem wartości z każdej na liczby całkowite za pomocą prostej if perlin_val < x { i=some_int } else if perlin_val < y..., a następnie zmapowałem pary liczb całkowitych (wysokość, wilgotność) do tabeli typów terenu (np. [1,0] -> tropikalna pustynia, [1,1 ] -> użytki zielone). Oceany zostały uwzględnione w tym systemie - wysokość = 0 zdefiniowanych oceanów.

g1_success

Istnieje dobra różnorodność i pod wieloma względami wydaje się, że jest to prawdziwy świat, ale jest kilka problemów:

  • Po pierwsze, nie ma wzorca głębi oceanu. Spodziewałbyś się płytkich wód w pobliżu brzegu i głębszych wód dalej, nie ma rymu ani powodu, dla którego miejsca

  • Po drugie, cała woda jest skoncentrowana w oceanach; nie ma jezior ani rzek, ponieważ hałas Perlina nie spada nagle do niższej wartości na środku kontynentu.

  • Stworzenie równowagi między ilościami każdego biomu jest bardzo, bardzo trudne. Przypisuję to do:

    • Szum Perlina przebiega zgodnie z rozkładem normalnym, dlatego oszacowanie sposobu dostosowania prawdopodobieństwa każdego mapowania wymiarów jest trudne

    • Próba zrównoważenia wielu wymiarów jest trudna - może chcę więcej (2,3), więc zwiększam szanse na uzyskanie (n, 3). Cóż, teraz mam za dużo (3,3) i wszystko wygląda źle.

    • Kiedy powiększyłem szum wystarczająco blisko, aby uzyskać płynne dane, nie otrzymałem bardzo kompletnej próbki wartości Perlina. Więc poprawiłem swoje rozkłady dla mapy przede mną, załadowałem nową losową mapę i otrzymałem bardzo różne wyniki.

x-woda-osobna

Próbowałem naprawić problem rzek / jezior, wytwarzając wodę z trzeciego zestawu wartości Perlina. Binarna decyzja dotycząca wody / ziemi, a następnie zastosuj wszystkie powyższe rzeczy do ziemi. Ułatwia to zdecydowanie kontrolę dystrybucji wody (wciąż nie jest idealna, ale lepsza), ale wprowadza problem polegający na tym, że istnieje wiele przejść biomów, które nie mają sensu. Np. Niewytłumaczalne płaty pustyni pośród bujnej łąki, śniegu na plaży itp. Z przyczyn wymienionych powyżej nadal trudno jest kontrolować proporcje biomów lądowych.

Awaria jednowymiarowa

Patrząc na powyższe problemy, wypróbowałem prostszy algorytm, który odwzorował szum Perlina tylko na jeden wymiar. Mam teraz szereg rodzajów terenu rosnących od 0 = głęboki ocean -> 1 = płytki ocean -> 2 = plaża ... -> N = śnieg. Chociaż daje to wyspy i kontynenty i znacznie ułatwia zrównoważenie proporcji każdego terenu, typy terenu są zdecydowanie zbyt skupione. Każda masa lądowa wygląda jak mapa wysokościowa, na ogół bez typów terenu rozrzuconych po jej powierzchni. Każda masa lądowa ma w przybliżeniu te same cechy, zawsze w tej samej kolejności i zawsze w tym samym kształcie pierścienia.

spiffytech
źródło
Nie jestem pewien, czy ktoś spoza pierwotnego zespołu programistów naprawdę może odpowiedzieć na twoje pytanie, ale sugeruję, że liczba nasion jest znacznie niższa niż można by się spodziewać. Ziarno prawie na pewno generuje różne mapy dla każdego typu mapy podstawowej, a włączenie ich w dowolną kombinację jest najprawdopodobniej tym, co pozwala osiągnąć 100 000.
Mag
To pytanie wydaje się być nie na temat, ponieważ pyta o szczegóły dotyczące implementacji konkretnej już istniejącej gry, a nie na temat tworzenia gry.
Trevor Powell,
@TrevorPowell Po zapoznaniu się ze wskazówkami dotyczącymi pytań na temat tej witryny sformułowałem to pytanie.
spiffytech
Opublikowałeś tę edycję około dziesięć sekund po moim komentarzu. Teraz to usługa! ;)
Trevor Powell,
1
-1 Myślę, że wciąż zbyt szeroki. Musisz sprecyzować, co oznaczają „mapy, które”. Aby odpowiedzieć na to pytanie, potrzebne są konkretne przykłady tego, o czym mówisz. Generowanie proceduralne jest bardziej artystyczne niż ludzie często myślą. Tworzenie i postrzeganie sztuki jest tematem subiektywnym. Wybierz konkretną rzecz, na której chcesz się skupić i zapytaj tylko o to. Zakres tego pytania jest obecnie bardzo szeroki.
MichaelHouse

Odpowiedzi:

9

Sprawdź doskonały artykuł Amit Patel, który moim zdaniem jest kwintesencją zasobów do proceduralnego generowania terenu ...

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

Kluczową rzeczą, którą robi, jest wykorzystanie struktury wykresu do modelowania swojego terenu, a nie prostych map hałasu (Perlin i in.). Nie będę umieszczał jego ilustracji, ale przeczytam artykuł i myślę, że przydałoby ci się pomyśleć o innym podejściu.

Jeśli tworzysz grę typu CIV / AOE, rozmieszczenie zasobów będzie ważne. Nie możesz mieć kluczowych zasobów zbyt rzadkich ani zbyt cennych. Jeśli założysz, że każdy wielokąt jest strefą o danej charakterystyce (zobacz ilustracje artykułu, będzie to bardziej sensowne), mógłbym zobaczyć przypisywanie zasobów do każdego wielokąta na podstawie wybranego przez ciebie algorytmu. Możesz być całkiem sprytny, sprawiając, że zasoby w wielokącie są statystycznie tendencyjne przez sąsiadów, tak że las obok pustyni może być rzadki, ale las obok łąk bardziej powszechny.

Tim Holt
źródło
2
Przewodnik Amita tworzy teren zbyt realistyczny dla Age of Empires. :)
Seth Battin
Hehe tak, prawda. Ale podstawowa koncepcja używania komórek o różnych rozmiarach (gdzie każda jest specyficznym typem terenu) działałaby dobrze, jak sądzę. Usuń ideę wysokości terenu z równania.
Tim Holt,
Przejrzałem artykuł Amita, ale jest on zbyt ściśle zoptymalizowany pod kątem posiadania jednej wyspy. Uczynienie wzniesienia prostą funkcją odległości od brzegu przyniosłoby niezręczne wyniki dla wielu wysp lub większych kontynentów, a jego metoda dystrybucji wody zakłada znaczący szczyt w krajobrazie, który ostatecznie płynie do oceanu. Gdybym miał usunąć wysokość terenu ze schematu Amita, nie jestem pewien, jak dostosować jego pomysł dystrybucji biomu do mojego projektu.
spiffytech
5

Tworzę losowe skrypty map dla Age of Empires 2 . Mój najnowszy dotyczy wersji HD.

Jeśli chcesz zrozumieć, jak tworzyć mapy do Age of Empires 2, zapoznaj się z doskonałym przewodnikiem po RMS (Random Map Scripting) .

Age of Empires korzysta z systemu eksperckiego, który umożliwia skryptom pisanie procedur dla reguł generowania, z których można się wiele nauczyć. Jeśli chodzi o regiony, wyobrażam sobie, że byłoby to po prostu maskowanie obszarów i zastosowanie odpowiednio różnych skryptów / procedur do zamaskowanych obszarów. Możesz łatwo zobaczyć reguły generowania istniejących skryptów map, otwierając je w edytorze tekstu. Piszę moje w Notatniku

Storm Andy
źródło