Mapy wysokości
Dzięki mapie wysokości przechowujesz tylko składnik wysokości dla każdego wierzchołka (zwykle jako teksturę 2D) i podajesz pozycję i rozdzielczość tylko raz dla całego kwadratu. Geometria pozioma jest generowana dla każdej klatki za pomocą modułu cieniującego geometrię lub teselacji sprzętowej. Mapy wysokości są najszybszym sposobem przechowywania danych krajobrazu w celu wykrycia kolizji.
Plusy:
Stosunkowo niskie zużycie pamięci : wystarczy zapamiętać tylko jedną wartość na wierzchołek i żadnych indeksów. Można to jeszcze poprawić, używając map szczegółów lub filtra szumów, aby zwiększyć postrzegane szczegóły.
Względnie szybki : Moduł cieniujący dla map wysokości jest mały i działa szybko. Jednak nie jest tak szybki jak teren geometrii.
W systemach bez akceleracji 3D opartej na trójkącie mapy wysokości marszowe są najszybszym sposobem renderowania terenu. W starszych grach nazywało się to grafiką wokseli.
Dynamiczny LOD / teren : Można zmienić rozdzielczość generowanej siatki w zależności od odległości od kamery. Spowoduje to przesunięcie geometrii, jeśli rozdzielczość spadnie zbyt daleko (około 0:40), ale można ją wykorzystać do uzyskania interesujących efektów.
Łatwe generowanie / tworzenie terenu : Mapy wysokości można łatwo tworzyć, łącząc funkcje hałasu, takie jak fraktalny Perlin Hałas i edytory map wysokości są szybkie i łatwe w użyciu. Oba podejścia można połączyć. Są również łatwe w obsłudze w edytorze.
Efektywna fizyka : Pozycja pozioma odwzorowuje bezpośrednio (zwykle) od jednej do czterech pozycji w pamięci, więc wyszukiwanie geometrii dla fizyki jest bardzo szybkie.
Cons:
Dokładnie jedna wysokość na współrzędną x / y : Zazwyczaj w ziemi lub nad klifami nie ma otworów.
Mniej kontroli : dokładną wysokość każdego punktu można kontrolować tylko wtedy, gdy rozmiar siatki odpowiada współrzędnym tekstury.
Artefakty : Jeśli cztery wierzchołki, które definiują podwęzeł, nie znajdują się na tej samej płaszczyźnie, podział między dwoma wierzchołkami stanie się widoczny. Zwykle dzieje się to na stromych klifach, których krawędzie nie są zgodne z głównym kierunkiem.
Mapy wysokości są jak dotąd najbardziej wydajnym sposobem renderowania terenu i są używane w wielu nowszych grach, które nie polegają na zaawansowanych funkcjach terenu i mają duże obszary zewnętrzne. Wikipedia ma listę programów, które używają map wysokości , ale nie jestem pewien, czy to oznacza, że używają ich tylko jako zasobów, czy też do renderowania, więc oto niektóre gry, które mogą z nich korzystać:
Just Cause 2: Regiony są ładowane w kwadratowych sektorach i nie ma dziur w terenie. W demie znajduje się głęboka dziura z rozciągniętymi trójkątami wzdłuż krawędzi, gdzie normalnie byłby budynek. (Obszar jest zwykle niedostępny, ale istnieją modyfikacje, które usuwają niektóre ograniczenia wersji demo ...)
Sims 2 ( może ): Teren sąsiedztwa jest ładowany jako mapa wysokości, ale są dziury, w których umieszczane są działki (place budowy). Istnieją jednak typowe artefakty, jeśli często tworzysz klify, a dodawanie piwnicy do domu (i ukrywanie klifu pod werandą) jest dość nużące.
Gry silnikowe Valve's Source: Prostokątne pędzle (geometria na poziomie statycznym) mogą mieć ukształtowane na powierzchni tereny. W tych grach typowe dziwactwa są często ukryte za pomocą innych pędzli lub rekwizytów.
Nie można tego stwierdzić na pewno, nie patrząc na shadery, ponieważ każdy teren mapy wysokości może być renderowany jako siatka.
Woksele
Teren Voxel przechowuje dane terenu dla każdego punktu na siatce 3D. Ta metoda zawsze wykorzystuje najwięcej miejsca na znaczący szczegół powierzchni, nawet jeśli używasz metod kompresji, takich jak rzadkie oktoty.
(Termin „silnik wokselowy” był często używany do opisania metody mapowania wysokości terenu marszowego promienia powszechnie stosowanej w starszych grach 3D. Ta sekcja dotyczy tylko terenu przechowywanego jako dane wokselowe).
Plusy:
Ciągłe dane 3D : woksele są właściwie jedynym skutecznym sposobem przechowywania ciągłych danych na temat funkcji ukrytego terenu, takich jak żyły rudy.
Łatwość modyfikacji : Nieskompresowane dane wokseli można łatwo zmienić.
Zaawansowane funkcje terenu : możliwe jest tworzenie nawisów. Tunele są płynne.
Ciekawe generowanie terenu : Minecraft robi to, nakładając funkcje i gradienty hałasu z predefiniowanymi funkcjami terenu (drzewa, lochy). (Przeczytaj Terrain Generation, część 1 na blogu Notch, aby uzyskać więcej informacji. Nie ma części 2 od 05.8.2011.)
Cons:
Powolny : Aby wyrenderować dane wokseli, musisz albo użyć ray tracera, albo obliczyć siatkę, na przykład z marszowymi kostkami (pojawią się artefakty). Sąsiadujący woksel nie jest niezależny od generowania siatki, a moduły cieniujące są bardziej skomplikowane i zwykle wytwarzają bardziej złożoną geometrię. Renderowanie danych wokseli z wysokim poziomem LOD może być bardzo wolne.
Ogromne wymagania dotyczące przechowywania : przechowywanie danych wokseli wymaga dużej ilości pamięci . Z tego powodu często nie jest możliwe ładowanie danych wokseli do pamięci VRAM, ponieważ trzeba by użyć mniejszych tekstur, aby to zrekompensować, nawet na nowoczesnym sprzęcie.
Stosowanie wokseli w grach, które nie polegają na funkcjach wokseli, takich jak odkształcalny teren, jest niepraktyczne, ale w niektórych przypadkach może pozwolić na interesującą mechanikę gry. Silniki Voxel występują częściej w starszych grach , ale są też nowsze przykłady:
Silnik atomontażu : Renderowanie wokseli.
Worms 4: Używa „pokseli”. Według Wikipedii jest to mieszanka wokseli i wielokątów.
Minecraft: używa woksela do reprezentowania terenu w pamięci RAM, grafika to grafika wielokątna. Jest to jednak głównie oprogramowanie obliczone.
Terraria: przykład wokseli 2D. Nie wiem jak to renderuje.
Woksele połączone z fizyką : to nie gra. ale ładnie pokazuje potencjał zniszczenia.
Voxatron : gra wykorzystująca woksele do prawie wszystkich elementów graficznych, w tym menu i interfejsu użytkownika.
Oczka
Siatki wielokątne są najbardziej elastycznym i precyzyjnym sposobem przechowywania i renderowania terenu. Są często używane w grach, w których wymagana jest precyzyjna kontrola lub zaawansowane funkcje terenu.
Plusy:
Bardzo szybko : wystarczy wykonać zwykłe obliczenia rzutowania w module cieniującym wierzchołki. Moduł cieniujący geometrię nie jest potrzebny.
Bardzo precyzyjnie : wszystkie współrzędne są przechowywane osobno dla każdego wierzchołka, więc można przesuwać je w poziomie i zwiększać gęstość siatki w miejscach o drobniejszych szczegółach.
Niski wpływ na pamięć : oznacza to również, że siatka zwykle będzie wymagała mniej pamięci niż mapa wysokości, ponieważ wierzchołki mogą być bardziej rzadkie w obszarach o mniejszych cechach.
(Patrz Triangulowana nieregularna sieć na Wikipedii).
Brak artefaktów : Siatka jest renderowana w stanie, w jakim się znajduje, więc nie będzie żadnych zakłóceń ani dziwnie wyglądających ramek.
Zaawansowane funkcje terenu : Można pozostawić dziury i utworzyć nawisy. Tunele są płynne.
Cons:
Słaba dynamiczna LOD : możliwe tylko przy wstępnie obliczonych siatkach. Spowoduje to „skoki” podczas przełączania bez dodatkowych danych w celu mapowania starych na nowe wierzchołki.
Niełatwa do modyfikacji : znalezienie wierzchołków odpowiadających obszarowi, który powinien zostać zmodyfikowany, jest powolne.
Niezbyt skuteczny w wykrywaniu kolizji : W przeciwieństwie do danych map wysokości i wokseli, adresu pamięci dla określonej lokalizacji zwykle nie można obliczyć bezpośrednio. Oznacza to, że fizyka i logika gry, które zależą od dokładnej geometrii powierzchni, będą najprawdopodobniej działać wolniej niż w przypadku innych formatów pamięci.
Teren wielokąta jest często używany w grach, które nie mają dużych otwartych obszarów lub nie mogą używać terenu z mapą wysokości ze względu na brak precyzji i zwisów. Nie mam listy, ale jestem tego pewien
każda 3D Zelda i
każda gra 3D Mario
Użyj tego.
Inne metody
Możliwe jest utworzenie terenu w całości w rurociągu modułu cieniującego. Jeśli algorytm działa tylko w module cieniującym fragment / piksel, szczegółowość może być praktycznie nieograniczona, podczas gdy wpływ pamięci jest prawie zerowy. Oczywistym minusem jest prawie brak kontroli nad kształtem i problemami, gdy kamera przecina oryginalną powierzchnię renderowania. Nadal jest przydatny w grach kosmicznych, w których gracze nie wchodzą w interakcje z powierzchnią planety. Animacje parametrów najlepiej sprawdzają się w tego rodzaju terenie.
Powinna istnieć możliwość pobrania wygenerowanej geometrii terenu z karty graficznej w celu wykorzystania jej w pozostałej części silnika gry, ale nie wiem, jak to działa lub czy zostało to zrobione do tej pory.
Wniosek
Nie ma metody, która działałaby dobrze w każdym scenariuszu, ale dość łatwo jest wybrać jedną dla określonego zadania:
Mapy wysokości są najlepszym rozwiązaniem, jeśli nie potrzebujesz nawisów ani dziur w powierzchni terenu i korzystasz z fizyki lub dynamicznego terenu. Są skalowalne i działają dobrze w większości gier.
Siatki mają najwyższą precyzję i mogą opisywać zwisy, otwory i tunele. Użyj ich, jeśli masz skomplikowany teren, który nie zmienia się często.
Woksele są dobre do opisywania bardzo dynamicznego terenu z wieloma złożonymi cechami. Unikaj renderowania ich bezpośrednio, ponieważ wymagają dużej ilości pamięci i przetwarzania.
Inne metody mogą być lepsze niż którekolwiek z powyższych, jeśli nie musisz wchodzić w interakcje z terenem lub potrzebujesz bardzo szczegółowej grafiki. Zwykle działają tylko w bardzo specyficznych scenariuszach.
Możliwe jest łączenie różnych metod w celu uzyskania funkcji z więcej niż jednej, na przykład przez mozaikowanie terenu siatki z mapą wysokości w celu zwiększenia szczegółowej struktury klifu.
Dynamiczne generowanie terenu jest szeroko stosowane w proceduralnej symulacji przestrzeni, a niektóre stały się naprawdę zaawansowane w ostatnich latach . Fora tych projektów powinny zawierać zasoby na ten temat.