VR i wybijanie frustum

13

Czy podczas renderowania środowisk VR (widok stereo) chłopaki zalecają tylko wykonanie 2 testów frustum w celu ustalenia, co ma zostać narysowane podczas przejścia do wycinania frustum, czy jest jakiś inny test, który byłby w stanie połączyć oba frusta?

Garry Wallis
źródło

Odpowiedzi:

13

Łatwo jest stworzyć pojedyncze frustum, które otacza obie pojedyncze frusty oka, jak pokazano na schemacie stworzonym przez Cass Everitt z Oculus. Trzeba tylko nieco umieścić wierzchołek tego skórka między oczami i za nimi. Możesz także zwiększyć odległość w pobliżu płaszczyzny, aby dopasować ją do oryginalnej płaszczyzny w pobliżu oka oka.

wprowadź opis zdjęcia tutaj

Takie frustum zawiera trochę miejsca, które nie było w połączeniu dwóch oryginalnych frust. Między obiema oczami jest poziomo mała objętość; schemat nie pokazuje również wymiaru pionowego, ale pociągnięcie wierzchołka skorupy do tyłu powoduje, że zawiera ona trochę miejsca powyżej i poniżej oryginalnej frusty. Jednak dla praktycznych celów uboju prawdopodobnie nie ma to znaczenia. Ubijanie frustum i tak jest zwykle konserwatywne, a dodatkowa przestrzeń ma zaledwie kilka centymetrów grubości.

Możliwe jest również po prostu przylgnięcie do pierwotnej płaszczyzny górnej i dolnej płaszczyzny ściętej (które są wspólne dla oczu) wraz z zewnętrznymi płaszczyznami bocznymi. Płaszczyzny te nie tworzą frustum, technicznie, ale jeśli użyje się „zwykłego” algorytmu tłumienia, który testuje na jednej płaszczyźnie naraz, algorytm z radością będzie działał na każdym zestawie płaszczyzn, który chcesz mu dać.

Udostępnianie wygładzania fragmentów, doboru LOD itp. Między oczami, zamiast ponownego wykonywania tego dwukrotnie w każdej klatce, to świetny sposób na optymalizację kosztów procesora renderowania stereo. Jest to również warunkiem wstępnym, jeśli chcesz użyć metody renderowania, która przyciąga oboje oczu w jednym przejściu, takiej jak instancja renderowania stereo .

Nathan Reed
źródło
2
Dzięki Nathan, właśnie o to mi chodziło, skąd wziąłem ten diagram, mogę zapytać, czy jest w jakiejkolwiek publicznej dokumentacji od oculusa?
Garry Wallis,
2
@GarryWallis Cass opublikował tweeta kilka miesięcy temu.
Nathan Reed,
5

W razie potrzeby uogólniłem wyniki Everitt.

uogólnione frustum

Jako bonus, sposób na wydobycie left0 / right0 z matryc perspektywy oka:

left0   = n0 * (Mle13 - 1) / Mle11;
right1  = n1 * (Mre13 + 1) / Mre11;

Jeśli masz większy rząd. transponuj dla kolumny głównej. por. tę odpowiedź

v.oddou
źródło
4

Zachowaj ostrożność, stosowanie pojedynczego fragmentu do wybijania działa tylko wtedy, gdy łączne pole widzenia oczu jest mniejsze niż 180 stopni. Istnieją teraz zestawy VR z większym polem widzenia około 200 stopni, tj. Pimax 5k + i StarVR . Niemożliwe jest zbudowanie tradycyjnej matrycy widoku lub matrycy pojedynczej projekcji dla pola widzenia powyżej 180 stopni.

Te zestawy słuchawkowe używają ekranów ustawionych pod kątem, więc płaszczyzny projekcji i wektory przednie w przestrzeni widoku nie są równoległe. Równania z innych odpowiedzi tutaj zakładają, że są one równoległe i przyniosą niepoprawne wyniki, gdy to założenie jest błędne.

Pojedynczy widok widoku łączonego może być nadal użyteczny, ale Twój kod powinien być przygotowany do radzenia sobie z przypadkami, w których nie można go skonstruować, aby zapewnić, że będzie on w przyszłości odpowiedni. Alternatywnie, rozważ wykonanie wyrównywania na widok oka lub przełącz się na wyrównywanie kątowe, które może wyrażać pole widzenia większe niż 180 stopni.

klausw
źródło