Renderowanie tylko części ekranu z dużą szczegółowością

11

Jeśli grafika jest renderowana z dużym kątem widzenia (np. Bardzo duży telewizor lub zestaw VR), widz nie może skupić się na całym obrazie, tylko na jego części. (W rzeczywistości dotyczy to również ekranów o zwykłych rozmiarach.)

W połączeniu ze sposobem śledzenia oczu widza (co wydaje się, że jest to najbardziej opłacalne w VR), możesz teoretycznie to wykorzystać i odciągnąć grafikę od koncentracji widza z stopniowo mniejszą ilością szczegółów i rozdzielczości, zyskując wydajność, nie tracąc postrzeganej jakości.

Czy istnieją obecnie jakieś dostępne lub opracowywane techniki?

Bart van Heukelom
źródło
To ciekawy pomysł, ale myślę, że nie jest wykonalny, ponieważ większość wyświetlaczy nie jest wyposażona w narzędzie do śledzenia wzroku. Uważam również, że zmiana geometrii w tempie ruchu oczu może mieć negatywny wpływ na wydajność. Oczywiście możesz zaprojektować swój poziom / sceny w taki sposób, aby zachęcić gracza do spojrzenia na określone punkty zainteresowania i zapewnienia tam szczegółowych szczegółów, podczas gdy będziesz korzystać z zasobów o niższej jakości dla otoczenia ...
bummzack
1
Sprawdź ten artykuł Siggraph 2014: graphics.cs.cmu.edu/projects/multirate . Nie miałem czasu go przeczytać, ale opisuje sposób cieniowania obrazu przy wykonaniu mniejszym niż „1x shader fragmentu na piksel” i wciąż uzyskanie rozsądnego obrazu. Być może można użyć dowolnego algorytmu lub pomysłów, które naszkicują, aby zmniejszyć częstotliwość próbkowania na krawędziach ekranu i poprawić wydajność.
TravisG,
Kolejny artykuł, który może być interesujący: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG
To jest teraz rzecz zwana Foveated Rendering. roadtovr.com/…
Bart van Heukelom

Odpowiedzi:

7

Istnieją przykłady takich efektów, o których mówisz w wielu grach. Po pierwsze, istnieje głębia ostrości , która sprawia, że ​​obiekt z odległości wygląda rozmazany, tak jakby aparat ustawiał ostrość tylko na obiektach znajdujących się blisko niego, jak w tym przykładzie. Możesz zbadać więcej związanych z tym przykładów w pakiecie DirectX SDK - one również mają tam przykładowy kod. W przypadku OpenGL znajdziesz je w sieci, jeśli będziesz szukać.

wprowadź opis zdjęcia tutaj

Drugą rzeczą, którą możesz chcieć zobaczyć, może być tak zwana Geometry MipMaping lub Progressive Meshes, która, jak sama nazwa wskazuje, jest podobna do mapowania mipów tekstur, ale w przypadku geometrii. Liczba wielokątów w siatce zmniejsza się w miarę oddalania się obiektu od aparatu. Pomaga to w zwiększeniu wydajności. W D3D istnieje funkcja, która pomoże automatycznie wygenerować siatki progresywne. Oto on:

HRESULT WINAPI D3DXGeneratePMesh(
                                  LPD3DXMESH pMesh,
                                  const DWORD *pAdjacency,
                                 const D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,             
                                  const FLOAT *pVertexWeights,
                                  DWORD MinValue,
                                  DWORD Options,
                                  LPD3DXPMESH *ppPMesh
                                 );

Oto przykład:

wprowadź opis zdjęcia tutaj

EDYCJA: Rozważ następujący obraz- wprowadź opis zdjęcia tutaj

To jest wybrzuszony fragment aparatu. Linia przechodząca przez środek jest wektorem LookAt. Teraz, zakładając, że gracz zawsze będzie chciał skupić się na środku ekranu, definiujesz kąt x. Każdy obiekt, który zostanie ustawiony pod kątem większym niż określony x, będzie renderowany w niskiej rozdzielczości, a te, które znajdują się w tym kącie, będą renderowane ze szczegółami. W ten sposób obiekty na środku ekranu będą bardziej szczegółowe niż te po bokach. Bo jeśli gracz nie patrzy na środek, po prostu dostosuj tę linię środkową do kierunku, w którym gracz patrzy. (lub może obróć całą kamerę w tym kierunku).

The Light Spark
źródło
Chociaż wątpię, byś mógł zwiększyć wydajność, wdrażając dof.
badweasel
@badweasel Cóż, to prawda. DOF nie zapewnia poprawy wydajności, ale warto o tym wspomnieć. Pozwala ukryć niską szczegółowość, masywną geometrię, która czasem może wyskoczyć z daleka.
The Light Spark
Podniosłem głos twojej odpowiedzi. To dobra odpowiedź. Chciałem tylko to podkreślić, ponieważ było to częścią jego pytania.
badweasel
Techniki te wykorzystują odległość Z od kamery, ale mam na myśli odległość x / y od punktu na ekranie, na który patrzy użytkownik. Przypuszczam, że można je jednak zaadaptować.
Bart van Heukelom,
1
@BartvanHeukelom Dlaczego, jeśli gracz nie skupia się na środku, obracasz kamerę, aby robić to, co on robi w centrum. Brzmi zabawnie.
The Spark Spark
2

Tak, Foveated Rendering wykorzystuje śledzenie wzroku, aby renderować tylko to, na co patrzy użytkownik. Cała reszta może być renderowana w niższych szczegółach.

wprowadź opis zdjęcia tutaj

Chociaż jest to dość oczywiste, patrząc na taki zrzut ekranu, jest podobno niewidoczny dla użytkownika w VR.

Istniejące zestawy słuchawkowe głównego nurtu (jeszcze) nie obejmują śledzenia wzroku, ale istnieje kilka posprzedażowych rozwiązań, które umożliwiają dodanie śledzenia wzroku. Ponadto do renderowania wymagana jest niewielka ilość dodatkowego przetwarzania. Korzyści są jednak znaczące. Po wdrożeniu zaawansowanego renderowania tylko bardzo mały procent pola widzenia musi być renderowany z dużą szczegółowością, co może skutkować radykalnie wyższą liczbą klatek na sekundę. Dokładne liczby zależą od implementacji.

Co więcej, nie ogranicza się to nawet do zestawów VR. Można go również stosować na monitorach stacjonarnych (z dodanym śledzeniem wzroku i bardziej ograniczonym efektem).

MichaelHouse
źródło
1

Rozwijając odpowiedź Byte56, tak, coś takiego jest rozwijane w branży. Naprawiono Foveated Rendering to technika zastosowana przez Valve w demo naprawy robota ( https://youtu.be/DdL3WC_oBO4?t=769 ) oraz w kilku komercyjnych grach (Resident Evil VII na PSVR). Naprawiono Foveated Rendering nie wykorzystuje śledzenia wzroku, ale oznacza to, że działa dobrze z obecnymi wersjami zestawów VR, które obecnie nie mają żadnych możliwości śledzenia wzroku. Chociaż w tej chwili Vive ma otrzymać zestaw aktualizacyjny do śledzenia wzroku, więc możesz zobaczyć, że niektóre tytuły AAA VR wykorzystują to.

Nie znajdziesz wielu dostępnych przykładów kodu związanych z tego rodzaju rzeczami, ale Nvidia ma pewne rozszerzenia sprzętowe, które są porządnie udokumentowane. Wiele rozdzielczości jest dość dobrze wyjaśnione, ale jest to funkcja związana z ich sprzętem.

Słoik miodu
źródło