Jak mogę zidentyfikować regiony obiektów w świecie generowanym proceduralnie?

26

Buduję wyspę. Korzystam z klasycznego rozwiązania map wysokości: dzięki funkcji budowania wzgórz, omijając rogi mapy, wykonuję wysokość. Następnie hałas perlina daje mi pewne zmienne klimatyczne do obsługi biomów. Teraz stoję przed dwoma wyzwaniami, które są w jakiś sposób powiązane:

  • W Dwarf Fortress jednym z ciekawszych aspektów światowej generacji jest to, że gra wydaje się „znać” obszary i nadawać im nazwy, chociaż nie są to kształty prostokątne. Chciałbym być w stanie „rozpoznać” moje lasy, rzeki, wzgórza… każdy pomysł, jakiego algorytmu mógłbym użyć do zeskanowania mapy i zinterpretowania jej obszarów? A jak byś to przechował? Używam podstawowego wykresu C ++ wykonanego z wektora wektora „obiektu kafelkowego”.

  • Wyspa ta powinna być podzielona na obszary polityczne, a nie tylko regiony czysto naturalne. Mógłbym używać gór i rzek do tworzenia „naturalnych granic”, ale moja generowana proceduralnie mapa nie gwarantuje, że będę mieć ładne „enklawy”, które tworzyłyby królestwo; Mogłem znaleźć gigantyczne obszary polityczne „uformowane wstęgą”, otoczone przez mik królestwa. Inną możliwością byłoby poszukiwanie odpowiednich obszarów dla miasta lub zamku. Następnie „powiększaj” obszar polityczny wokół niego. Ale jeszcze raz, chciałbym mieć kilka dobrze znanych algorytmów przed próbą opracowania własnego.

To pytanie może być interpretowane jako zbyt niejasne, więc jednym ze sposobów jego sformułowania byłoby: jak podzielić (bez modyfikacji!) Świat generowany proceduralnie na obszary odpowiednie do rozgrywki? Z góry dziękuje za twoją pomoc.

Raveline
źródło
Dziękuję za korektę i przepraszam za złą jakość mojego angielskiego :)
Raveline,
Twój angielski jest świetny, po prostu „tytuł” ​​jest najlepiej sformułowany jako pytanie na stronach StackExchange.
dlras2,

Odpowiedzi:

21

Amitp sugeruje stosowanie zlewisk do definiowania różnych regionów, jak wyjaśniono w jego poście na temat generowania map wielokątnych . Zlewiska najlepiej widać, generując mapę przy użyciu jego demonstracji . Zaletą korzystania z działów wodnych w celu podziału kontynentów jest to, że wyznaczają granice prostopadłe do linii brzegowej, podczas gdy góry zwykle zapewniają równoległe granice.

Gdybym dzielił regiony geograficzne, użyłbym kombinacji gór, zlewisk i wykrywania krawędzi na różnych biomach na mojej mapie.

Zwrócę również uwagę, że regiony polityczne ogólnie obejmują wiele regionów geograficznych. Najpierw wygenerowałbym regiony geograficzne, a następnie przypisałbym każdemu regionowi ocenę celowości (czy to wybrzeże? Czy jest złoto? Dobra ziemia rolna?) I koszty podróży (stromy teren? Ciężkie lasy ?.) Następnie przy użyciu ulubionego algorytmu ścieżkowania wygeneruj mapa cieplna podróży między pożądanymi regionami. Będą to twoje drogi i stamtąd możesz budować swoje granice polityczne. Granice te będą ogólnie obejmować wiele dróg, a między nimi mniej dróg.

dlras2
źródło
1
Dziękuję za pomoc Znałem już rozwiązanie Amita i chociaż uważałem je za dość eleganckie, nie wiem wystarczająco dużo o matematyce z tyłu (musiałbym je przestudiować, co zrobię wcześniej czy później, ale nie teraz!). Myślenie w kategoriach przełomu z pewnością mogłoby mi pomóc, a modyfikacja algorytmu generowania rzek nie powinna być zbyt trudna. Uwielbiam twoje rozwiązanie do budowania dróg i granic politycznych, muszę zastanowić się, jak dokładnie zamierzam je wdrożyć, ale pomysł jest świetny!
Raveline,
@Raveline - Jeśli korzystasz z generacji granic politycznych, skomentuj tutaj i daj mi znać! Chciałbym zobaczyć, jak to się potoczy.
dlras2,
13

Aby dodać do odpowiedzi Dana Rasmussena :

Jednym z głównych powodów, dla których przestawiłem się z Perlin Noise ( ten projekt ) na używanie wielokątów ( ten projekt ) jest to, że wielokąty zapewniają przyjemną strukturę do przypisywania większych obszarów (regiony polityczne, lasy, pustynie, nazwane obszary, granice itp.). Zaczynanie od struktury, a następnie generowanie mapy jest podobne do renderowania wielokątów - jest to stosunkowo łatwe. Rozpoczynanie od mapy, a następnie wnioskowanie o strukturze jest podobne do wizji komputerowej - co jest względnie trudne, ale możliwe. Chcę zarówno struktury, jak i mapy, więc postanowiłem wybrać stosunkowo łatwą drogę do zbudowania mapy na szczycie struktury (węzły i krawędzie).

Nawet wtedy odkryłem, że chcę większych struktur niż to, co wygenerowałem. Rozlewiska były jedną próbą zbudowania tych większych struktur, ale muszę wypróbować więcej sposobów grupowania wielokątów razem. Nie znalazłem czegoś, z czego jestem zadowolony.

Nie jestem pewien, jak to robi Forteca Krasnoludów. Biorąc pod uwagę, jak genialni są ci faceci, nie byłbym zaskoczony, gdyby mieli wyrafinowany algorytm typu „komputerowego widzenia”.

amitp
źródło
Rozumiem rozumowanie, choć nie jestem pewien, czy twoja ścieżka jest taka łatwa ... Ponieważ mój projekt jest dość skromny, postaram się załatać coś niezbyt skomplikowanego, ale bez wielokątów, ponieważ oznaczałoby to studiowanie znacznie większej liczby algorytmów ukryty. (PS: twoja strona internetowa jest niesamowitym źródłem inspiracji i uwielbiam ją!)
Raveline,
3
artykuł dotyczący generowania map wielokątnych był znakomity.
Raine,
3

Jeśli chodzi o twoje pierwsze pytanie, moim zdaniem najlepiej byłoby użyć algorytmu wykrywania krawędzi, aby znaleźć granice twoich naturalnych regionów (las, wzgórza, ...). Istnieje wiele algorytmów dla tego rodzaju problemu.

W przypadku drugiego pytania możesz użyć własnego pomysłu, aby zaszczepić zamek (zwykle na szczycie wzgórza dla dobrej obrony i blisko świeżej wody), a następnie użyć algorytmu voronoi, aby mieć regiony wokół każdego zamku. Możesz użyć hałasu lub limitów biomów, aby granice były bardziej realistyczne.

XGouchet
źródło