W nowoczesnych grach AAA z otwartym środowiskiem i dużą ilością statycznych treści (np. Crysis), w jaki sposób wykonuje się usuwanie okluzji?


19

Mam na myśli dwa pomysły:

1) Scena jest renderowana do niewidocznego bufora, przy użyciu modeli o niskiej rozdzielczości i niskiej liczbie wielokątów (lub nawet przy użyciu tylko ograniczających objętości, takich jak kostki lub kule). Bufor jest następnie sprawdzany, aby wiedzieć, co jest widoczne, czy nie. Przed renderowaniem sceny o niskiej rozdzielczości można zastosować wygładzanie fragmentów w celu usunięcia jak największej liczby obiektów.

2) Narzędzie jest uruchomione na mapie statycznej i wykona złożone (a zatem wolne) śledzenie promieni, aby wiedzieć dla niektórych pozycji 3D na mapie, co jest widoczne, a co nie. Wszystkie te informacje są następnie przechowywane w efektywny sposób, który może być później używany przez użytkownika w czasie wykonywania (np .: oktawa). To rozwiązanie działałoby tylko w przypadku siatek statycznych (np. Budowanie) nieporuszających się obiektów.


3
Pytania „Jak to zrobiła gra <X>” są wyraźnie nie na temat, zgodnie z FAQ . Może edytujesz to pytanie, aby zadać pytanie, w jaki sposób możesz zrobić wyciszenie okluzji, a nie jak robi to ktoś inny ? (Ponadto podanie własnych odpowiedzi w treści pytania sprawia wrażenie, jakbyś prosił o dyskusję lub listę, a nie odpowiedź )
Trevor Powell,

Odpowiedzi:


13

Odpowiedź Jovana jest świetna, ale chciałem tylko dodać, że czasami istnieje wsparcie sprzętowe do zadawania pytania „Czy ta geometria faktycznie renderowała jakieś piksele?” (Twój pomysł # 1) Są to tak zwane zapytań okluzji - to jest dobry artykuł GPU Gems o nich tutaj

Jest to dość podobne do twojego pomysłu nr 1, z tym wyjątkiem, że nie potrzebujesz niewidocznego bufora i może być bardziej wydajne lub prostsze niż sprawdzanie bufora. Artykuł z linkami wykonuje świetną robotę, dogłębnie omawiając działanie kwerend okluzji sprzętowej.

Unreal Engine wykorzystuje kwerendy dotyczące okluzji sprzętu na platformach, które ją obsługują, a także inne techniki, takie jak przeglądanie wycięcia frustum i wstępne obliczanie zablokowanej geometrii statycznej.


Zapytania dotyczące okluzji sprzętowej są obecnie nieco bardziej powszechne niż „czasami” - z możliwym wyjątkiem niektórych mobilnych procesorów graficznych można je uznać za wszechobecne.
Maximus Minimus

czyż nie są bardzo powolne?
Quonux

12

1) Scena jest renderowana do niewidocznego bufora, przy użyciu modeli o niskiej rozdzielczości i niskiej liczbie wielokątów (lub nawet przy użyciu tylko ograniczających objętości, takich jak kostki lub kule). Bufor jest następnie sprawdzany, aby wiedzieć, co jest widoczne, czy nie. Przed renderowaniem sceny o niskiej rozdzielczości można zastosować wygładzanie fragmentów w celu usunięcia jak największej liczby obiektów.

Ta technika jest używana przez Killzone i jest szczegółowo opisana w prezentacji Praktyczne wycinanie okluzji na PS3 . Używają również portali do wnętrz.

Przy dużych mapach zewnętrznych należy pamiętać o tym, że uproszczenie siatki jest tak samo ważne jak eliminacja okluzji, dlatego często stosuje się różne warianty pól wysokości z mapowaniem geometrii. Oto dobry papier, który obejmuje również ubijanie. GPU Gems 2 ma tę implementację .


5

Przynajmniej dwie pierwsze gry Quake używały strategii 2; Nie wiem, czy silniki idTech nadal go używają. Świat osiągalny jest podzielony na wypukłe przestrzenie zorganizowane w strukturę danych drzewa („partycja przestrzeni binarnej”), a dla każdego węzła w drzewie znajduje się wektor bitowy reprezentujący, które inne węzły są widoczne z tego węzła („potencjalnie widoczny zestaw”).


1
Jeśli zamierzasz sprowadzić Quake'a, równie dobrze możesz wprowadzić technologię renderowania Złodzieja;) - nothings.org/gamedev/thief_rendering.html
Jovan
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.