Jaki jest stan techniki w zakresie geometrycznego LOD w grach?


15

W jaki sposób współczesne gry wpływają na poziom szczegółowości geometrii dla siatek obiektów, takich jak postacie, ukształtowanie terenu i liście? Moje pytanie składa się z dwóch części:

  1. Jak wygląda potok zasobów? Czy artyści tworzą model o wysokiej poli, który jest następnie dziesiątkowany? Jeśli tak, jakie algorytmy dziesiętne są najbardziej popularne? Czy siatki LOD są czasami wykonywane ręcznie?
  2. W jaki sposób silniki przechodzą między różnymi LOD obiektów w czasie wykonywania? Czy są jakieś płynne lub progresywne przejścia?

Odpowiedź może brzmieć: „różne studia wykorzystują różne techniki”. Jeśli tak, proszę podać niektóre z najczęstszych praktyk. Byłoby również świetnie, gdybyś mógł wskazać mi białe księgi / slajdy, które obejmują konkretne przykłady.


1
Postępy w renderowaniu w czasie rzeczywistym SIGGRAPH 2014 mają naprawdę interesującą rozmowę na temat powierzchni podziału Call of Duty. Powinieneś to sprawdzić. Zamiast wysokiej siatki poli, która jest wykonana z dolnej poli, analitycznie zdefiniowali kształty i dodali więcej trójkątów w razie potrzeby
Alan Wolfe

Możemy tutaj rozmawiać o stanie techniki w algorytmach LOD i strukturach danych, ale jeśli pytanie dotyczy tego, w jaki sposób robią to szczególnie nowoczesne gry, możesz mieć więcej szczęścia, pytając w gamedev.se: gamedev.stackexchange.com
pseudonim

3
Wątpię w to. Twórca gry jest bardzo lekki. To głównie jedność i Java pytania z pewnym odkryciu ścieżki i pytania frame rate stałe rzucony w: P
Alan Wolfe

1
@Alan, Activision wykorzystało wiele najnowocześniejszych algorytmów, aby stworzyć prawdziwą strategiczną grę 3D, nie izometryczną, podstawową Sprite, co jest w porządku, ale wykonali świetną robotę w COD, ale wciąż jest nieco powolny i leniwy nawet na wczesnych poziomach z niewielką liczbą zasobów (mówię o ich grze mobilnej na Iphone 5s). Myślę, że musisz nauczyć się funkcji eksperckich OpenGLES i podstawowych warstw, aby odnieść sukces w pisaniu takiej gry.
Iman

Mówię o ich wersji z wezwaniem do służby na wypadek, gdyby to wyjaśniło.
Alan Wolfe,

Odpowiedzi:


22

W przypadku geometrii LOD większość gier po prostu przełącza się między kilkoma predefiniowanymi siatkami LOD. Na przykład „Infamous: Second Son” używa 3 oczek LOD ( Adrian Bentley - „inFAMOUS: Second son engine postmortem”, GDC 2014 ), a „Killzone: Shadow Fall” używa 7 oczek LOD na postać ( Michal Valient - „Killzone: Shadow Fall” demo postmortem ”, Devstation2013 ). Większość z nich jest generowana, ale ważniejsze (jak główny bohater) można wykonać ręcznie. Siatki są często generowane przy użyciu popularnego oprogramowania pośredniego Simplygon, ale czasami są one po prostu generowane przez grafików w ich ulubionym pakiecie 3D.

Gry o dużej odległości losowania dodatkowo wykorzystują oszustów do liści, drzew i wysokich budynków ( Adrian Bentley - „inFAMOUS: Second Son engine postmortem”, GDC 2014 ). Stosują również hierarchiczne LOD, które zastępują zestaw obiektów jednym. Na przykład w „Just Cause 2” drzewa są najpierw renderowane indywidualnie jako normalne siatki LOD, następnie indywidualnie jako oszustki, a na koniec jako pojedyncza połączona siatka leśna ( Emil Persson, Joel de Vahl - „Zaludnianie masywnego świata gry”, Siggraph2013 ) i w Odległe części „Sunset Overdrive” zostały zastąpione pojedynczą siatką generowaną automatycznie w trybie offline ( Elan Ruskin - „Streaming Sunset Overdrive's Open World”, GDC2015 ).

Kolejnym elementem systemu LOD jest uproszczenie materiałów i shaderów. Na przykład „Killzone: Shadow Fall” wyłącza przestrzeń styczną i normalne mapowanie odległych LOD ( Michał Valient - „Killzone: Shadow Fall demo postmortem”, Devstation2013 ). Zwykle jest to realizowane przez wyłączenie globalnie zestawu funkcji modułu cieniującego dla LOD, ale w przypadku silników z grafami modułu cieniującego, w których artyści mogą tworzyć niestandardowe moduły cieniujące, należy to zrobić ręcznie.

W przypadku przejść LOD niektóre gry po prostu zamieniają siatki, a niektóre wykorzystują dithering do płynnych przejść LOD - przy przełączniku LOD renderowane są dwa oczka: pierwsze stopniowo zanikają, a drugie zanikają ( Simon Schreibt Blog - „Assassins Creed 3 - LoD Blending” ). Klasyczne techniki progresywnej siatki nie są wykorzystywane, ponieważ wymagają kosztownej aktualizacji siatki i przesłania do GPU. Tesselacja sprzętowa jest używana w kilku tytułach, ale tylko w celu dopracowania najbardziej szczegółowego LOD, ponieważ jest powolna iw ogólnym przypadku nie może zastąpić wstępnie zdefiniowanych LOD geometrii.

LOD terenu są obsługiwane osobno w celu wykorzystania jego specyficznych właściwości. LOD geometrii terenu jest zwykle implementowany przy użyciu clipmap ( Marcin Gollent - „Tworzenie i renderowanie krajobrazu w REDengine 3” ). LOD dla materiału terenu są obsługiwane podobnie jak siatki LOD lub przy użyciu wirtualnej tekstury Ka Chen - „Adaptacyjne wirtualne renderowanie tekstur w Far Cry 4 .

Na koniec, jeśli chcesz zobaczyć prawdziwe potoki LOD gry, po prostu przejrzyj dokumentację dowolnego z nowoczesnych silników gier: Unreal Engine 4 - „Tworzenie i używanie LOD , CryEgnine - Statyczny LOD i Unity - LOD .


1
Silniki gier mają zwykle zestaw wstępnie zdefiniowanych metod i nie można dostać się do rdzenia, aby faktycznie zmienić algorytm LOD. czy mam rację? Mówiłem o sprawie, w której piszesz grę samodzielnie w ramach OpenGL lub SpriteKit, nie wiem, czy można dostosować algorytm LOD w Unity lub Unreal, czy to możliwe?
Iman

3

LOD (poziom szczegółowości) oznacza zarządzanie obiektami w różnych skalach wyświetlania, które mogą być podzielone na dwie części. Możesz jednak użyć jednego z nich i to wystarczy w większości przypadków.

  1. Pokaż / ukryj warstwy (grupa obiektów tego samego typu) w zależności od wielkości (skala wyświetlania).

  2. Metoda oparta na geometrii algebraicznej, zwana Generalizacją (która jest algorytmem upraszczającym wielokąty). spójrz na poniższy obrazek

    uogólnienie

Najsłynniejsza i najskuteczniejsza metoda uogólnienia (uproszczenia) siatki wielokątów jest znana jako twierdzenie wielościanu Descartesa-Eulera (równanie 4.5 przepraszam, jeśli mam na myśli książkę, najlepiej, co potrafię) i jest używane przez większość przestrzennych baz danych na przykład moduły PostGIS w PostgreSQL. Po prostu usuwa mniejsze boki wielokąta i tworzy bardzo zaokrąglony. (Powyżej zdjęcia)

Aby zaimplementować LOD w grze, musisz zapisać skalę swojej mapy (sceny) i zarządzać nią podczas operacji powiększania / pomniejszania. Skala zmienia się od zera do nieskończoności i musisz podzielić to na określoną liczbę zakresów, na przykład coś takiego:

  1. 1 / zero = nieskończoność do 1/50
  2. 1/50 do 1/100
  3. 1/100 do 1/1000
  4. 1/1000 do 1 / nieskończoność = 0

Następnie musisz określić, które typy obiektów (warstw) powinny być widoczne lub niewidoczne w każdym z powyższych zakresów. Na przykład mały typ obiektu, taki jak zawór hydrantowy, nie powinien być widoczny, gdy użytkownik znajduje się w czwartym zakresie, ponieważ będzie bardzo mały w tej skali i nie może być dyskryminowany, więc nie ma znaczenia, jeśli pominiesz rysowanie go na ekran.

Kiedy więc użytkownik używa powiększania i pomniejszania w celu zmiany powiększenia, przesuwa się on powyżej powyższych granic z jednego do drugiego zakresu, a gra wykorzystuje te skale wyświetlania do zarządzania poziomem szczegółów poprzez pokazywanie lub ukrywanie obiektów na scenie. To dyskretne rozwiązanie, które nagle blaknie podczas operacji zmniejszania, jednak mając dokładnie zdefiniowane skale wyświetlania i zakresy powiększeń, użytkownik nic nie poczuje.

Powyższa grupa 4 zakresów jest tylko przykładem i musisz znaleźć najlepszą dla swojej sprawy metodą prób i błędów. Nie ma na to żadnej reguły.

Czasami gry używają własnych metod LOD, Subway Surfer na chwilę, pokazuje mały prostokąt bez tekstury, aby pokazać budynek z daleka, a gdy zbliża się nagle, robi się tekstury, gracz odczuwa to. Nie mówiłeś o swoim systemie projekcji, co jest bardzo ważne, nie mówiłeś też o tym, jaką grę tworzysz.

Załóżmy jednak, że wdrażasz pełną grę 3D z OpenGl i chcesz przefiltrować trochę siatki przed przeniesieniem ich do sprzętu graficznego, jestem pewien, że pomoże to zmniejszyć operacje wiązania / rozpinania obiektów buforowych i tablic wierzchołków (VBO, VAO) podczas radzenie sobie z OpenGl.

Używając tylko zarządzania warstwami lub po prostu zaimplementuj Uogólnienie Eulera

W większości przypadków nie jest konieczne wdrażanie algorytmu uogólnienia, a filtrowanie obiektów po prostu działa i pozwala uzyskać wymaganą wydajność (częstotliwość odświeżania), jednak jest to całkowicie zależne od przypadku. Chociaż jest to prosty algorytm, który po prostu usuwa małe boki wielokąta, musisz zdefiniować próg, który jest iloczynem wielkości i stałej liczby, aby większe boki były filtrowane z dużo większego punktu widzenia.

Zapominanie o zarządzaniu warstwami i wdrażanie tylko algorytmu generalizacji Eulers zapewnia bardzo schludną i ciągłą metodę, w której wystarczy sprawdzić każdą stronę i linię w stosunku do wcześniej określonego progu i pokazać je tylko w przypadku, gdy są wystarczająco duże, aby można je było rozróżnić na ekranie.

PS: powiększenie to liczba zmiennoprzecinkowa> 0, która jest równa 1 / skala, a skala jest zwykle <1, ponieważ skala 1: 1 oznacza, że ​​masz rzeczywiste długości świata w grze.


Drodzy wyborcy, proszę rozważyć ponowne głosowanie, jeśli nadal jest to -1, Zastanów się nad pozostawieniem komentarza dla mnie. Dzięki
Iman

Nie przegłosowałem, ale część mnie zastanawia się, jaka jest tu sztuka? Więc nie mogę głosować.
joojaa,

1
Głosowałem za tym, ponieważ trudno było go przeczytać, a IMHO nie ma znaczenia dla LOD w grach. Po ponownym rozpatrzeniu zdecydowałem się anulować mój donwvote, aktualizując i po prostu dodając własną odpowiedź.
Krzysztof Narkowicz,

Stan techniki ma oznaczać bardzo wybitną pracę, ale różne metody dają różne wyniki w różnych przypadkach, na przykład Call of duty ma zarządzanie warstwami i mipmapowanie, jednak Dear haunting (DH 2014) wykorzystuje tło z paralaksą i mipmapowaniem, które wcześniej zostały uogólnione tekstury. Subway Surfer to zupełnie inna historia i mówię wszystkim, że jest najnowocześniejszy, mimo że Subway Surfer dyskretnie rysuje budynki i inne obiekty miejskie, a Call of duty jest nieco powolny podczas powiększania lub przesuwania. Myślę, że wszystkie są najlepsze w ich przypadku.
Iman

3

Iman przygotował już pełną odpowiedź, ale chcę coś do niej dodać

LOD można wykonać na dwa różne sposoby

  1. Ciągły, który nazywa się CLOD i jest optymalizacją siatki wielokątów
  2. Dyskretny, który prawie każdy inny algorytm oprócz optymalizacji siatki wielokątów, należy do tej grupy.

Na przykład mipmapowanie jest dobre, szybkie, ale ciężkie, które należy do drugiej grupy powyżej

tutaj możesz znaleźć dobre wyjaśnienie mipmapowania i kodu implementacyjnego z OpenGl.

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.