Mapy wysokości, wokseli i wielokątów (geometria)


15

W odniesieniu do terenów mapy wysokości, wokseli i wielokątów (geometria):

  1. Jakie są główne różnice między tymi wszystkimi trzema?
  2. Czy możesz stworzyć „gładki” teren z wokselami, to znaczy, czy możesz na przykład uzyskać gładką górę z wokselami, czy woksele są ograniczone do kostek?
  3. Wydajność, świat 2000 x 2000 jednostek, co byłoby szybszym terenem mapy wysokości, terenu wokseli lub terenu opartego na wielokątach? (Zakładając, że osiągnięto „rozsądny” wzrost wydajności / optymalizację renderowania dla każdej z możliwości)
  4. Czy są jeszcze jakieś techniki tworzenia terenu?
  5. Jakieś dobre tytuły reprezentujące każdy z typów?

Teren oparty na PS Wielobok powinien być w pełni poprowadzony, bez kwadratowych elementów.

Odpowiedzi:


30

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.


3
Silnik źródłowy nie używa map wysokości dla swojego terenu. Używają kwadratowych tesselated zwanych „Displacements” developer.valvesoftware.com/wiki/Displacement
Tetrad

1
To słodka odpowiedź, dałoby +3 na to, jeśli to możliwe. Dziękujemy za szczegółowe informacje, bardzo mile widziane.
joltmode,

@Tetrad Dostępne rozdzielczości przemieszczeń to potęgi dwóch (wspólne ograniczenie buforów tekstur), jedyną współrzędną zapisaną dla wierzchołka są mapy wysokości i terenu, które są renderowane jako kwadraty mozaikowe. Wiki twierdzi również, że koszt renderowania przemieszczeń jest niższy niż w przypadku zwykłej geometrii. Myślę, że można założyć, że są one takie same pod różnymi nazwami.
Tamschi,

1
@NickWiggill Wydaje się, że znaczenie „woksela” znacznie się zmieniło w ciągu ostatnich 10 lat. Idę z obecną definicją wokseli jako Wikipedii jako wartości na regularnej siatce 3D . W pozycji Outcast wspomina się o różnicy w znaczeniu. Dodałem do mojej odpowiedzi, aby to wyjaśnić.
Tamschi,

2
Uwaga dodatkowa: „teren wielokąta” jest również nazywany „ trójkątną nieregularną siecią ” (w skrócie „TIN”); i zwykle zajmuje znacznie mniej pamięci niż mapy wysokości o tej samej skutecznej rozdzielczości, ponieważ nie przeszkadza w rejestrowaniu nieistotnych danych lub miejsc, w których nie ma danych. Użyła go pierwsza gra gotycka (nie jestem pewien co do pozostałych).
Martin Sojka,

8

Chciałbym zauważyć, że żaden z wymienionych przez ciebie terminów nie wyklucza się nawzajem - możesz nawet mieć grę opartą na wokselach, która korzystała z map wysokości i renderowała za pomocą wielokątów.

  1. Mapy wysokości są dwuwymiarowymi reprezentacjami wysokości gruntu w każdym określonym punkcie. Często są one przechowywane jako obrazy w skali szarości, gdzie jasność reprezentuje wysokość tego punktu. Woksele są w zasadzie bitmapą 3D. Istnieje wiele technik używanych do renderowania przestrzeni wokseli.

  2. Możesz stworzyć gładki teren z wokselami i nie są one ograniczone do kostek. Jednym z takich sposobów jest użycie algorytmu, takiego jak marszowe kostki , który może przekształcić reprezentację wokseli w listę wielokątów.

  3. Ten z najmniejszymi trójkątami renderowałby się najszybciej: 3

  4. Algorytmy fraktalne, takie jak szum Perlina, mogą być używane do tworzenia krajobrazów z dużą ilością
    szczegółów. Powierzchnie parametryczne, takie jak nurbs, można wykorzystać do tworzenia gładkich terenów z niewielkimi wymaganiami dotyczącymi trwałego przechowywania.

  5. Delta Force to stara gra, która wykorzystuje woksele. Minecraft może wykorzystywać przechowywanie wokseli do reprezentowania krajobrazu (niepewne). Sacrifice by Shiny to gra, która wykorzystuje mapy wysokości do dobrego efektu. Większość gier z krajobrazami wykorzystuje tereny geometryczne.


1
Jedna uwaga, w punkcie 3, podczas gdy GPU dba tylko o liczbę wielokątów, nadal istnieje strona generowania geometrii. Generowanie geometrii dla pola wokseli jest zwykle procesem wolniejszym (bloki / marszowe kostki są procesami bardziej złożonymi) niż teren mapy wysokości (który jest procesem prostym) lub oparty na wielokącie (który oczywiście jest już danymi geometrycznymi). Edycja: zależy to również od tego, czy zamierzasz być odkształcalny.
Michael

Jeśli chodzi o trzeci punkt ... No cóż, mapa wysokości wciąż musi zostać przetworzona i dopiero wtedy formuje się w geometrię, prawda? Mając to na uwadze, siatka wielokątów byłaby odrobinę szybsza? Czy mógłbyś wskazać niektóre techniki stosowane do renderowania wokseli?
joltmode,

2
Możesz użyć modułu cieniującego geometrię do wygenerowania siatki z mapy wysokości. W ten sposób przechowujesz tylko mapę wysokości i parametry, takie jak położenie i rozdzielczość, podczas gdy geometria jest generowana dla każdej ramki w potoku modułu cieniującego. Jest szybszy niż marszowe kostki i wolniejszy niż siatka wielokątów. Zaletą map wysokości jest niskie zużycie pamięci: tylko nieco ponad 1/3 tego, czego potrzebowałaby siatka. Minusem jest to, że nie jest tak elastyczny (bez drobnych szczegółów, bez nawisów). Możesz dynamicznie dostosowywać szczegóły generowanej siatki, ale powoduje to przesunięcie geometrii.
Tamschi,

@Tamschi, gdybyś udzielił odpowiedzi, dokładnie tego, czego szukałem. :)
joltmode,

@ Tom Zobaczę, czy uda mi się to sformatować i znajdę kilka innych przykładów.
Tamschi,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.