VR und Kegelstumpf-Keulen


13

Wenn Sie VR-Umgebungen (Stereo-Ansicht) rendern, empfehlen Sie, nur zwei Kegelstumpftests durchzuführen, um zu bestimmen, was während des Kegelstumpftests gezogen werden soll, oder gibt es einen anderen Test, der beide Kegelstumpftests kombinieren kann?

Antworten:


13

Es ist ziemlich einfach, einen einzelnen Kegelstumpf zu erstellen, der beide einzelnen Augenstümpfe einschließt, wie in diesem Diagramm gezeigt, das von Cass Everitt bei Oculus erstellt wurde. Sie müssen nur den Scheitelpunkt dieses Kegelstumpfes zwischen die Augen und etwas dahinter legen. Sie können auch den Abstand in der Nähe der Ebene erhöhen, um ihn an die ursprüngliche Nähe der Augenstumpf-Ebene anzupassen.

Bildbeschreibung hier eingeben

Solch ein Kegelstumpf schließt ein wenig Raum ein, der nicht in der Vereinigung der ursprünglichen zwei Kegelstümpfe war. Zwischen den beiden Augen befindet sich horizontal ein kleines Volumen. Das Diagramm zeigt auch nicht die vertikale Abmessung, aber wenn Sie den Kegelstumpf nach hinten ziehen, wird über und unter dem ursprünglichen Kegelstumpf etwas Platz eingeräumt. Aus praktischen Gründen spielt es jedoch wahrscheinlich keine Rolle. Das Keulen von Kegelstumpf ist normalerweise sowieso konservativ, und der zusätzliche Raum ist nur wenige Zentimeter dick.

Es ist auch möglich, einfach gegen die ursprüngliche Kegelstumpfober- und -unterseitenebene (die zwischen den Augen geteilt werden) zusammen mit den äußeren Seitenebenen zu stoßen. Diese Ebenen bilden technisch gesehen keinen Kegelstumpf. Wenn Sie jedoch den "üblichen" Culling-Algorithmus verwenden, der jeweils für eine Ebene getestet wird, funktioniert der Algorithmus problemlos für alle Ebenen, die Sie ihm geben möchten.

Die gemeinsame Nutzung von Frustum-Culling, LOD-Auswahl usw. zwischen den Augen, anstatt es zweimal in jedem Frame zu wiederholen, ist eine hervorragende Möglichkeit, die CPU-Kosten für das Stereo-Rendering zu optimieren. Dies ist auch eine Voraussetzung, wenn Sie eine Rendering-Methode verwenden möchten, die beide Augen in einem Durchgang zeichnet, z. B. das instanziierte Stereo-Rendering .


2
Danke Nathan, genau danach habe ich gesucht. Woher hast du dieses Diagramm? Darf ich fragen, ob es in einer öffentlichen Dokumentation von Oculus enthalten ist?
Garry Wallis

2
@GarryWallis Cass hat es vor ein paar Monaten getwittert .
Nathan Reed

5

Ich habe die Ergebnisse von Everitt verallgemeinert, falls dies erforderlich ist.

generalisierter Kegelstumpf

Als Bonus eine Möglichkeit, left0 / right0 aus den Augenperspektivenmatrizen zu extrahieren:

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

Wenn Sie Row Major haben. transponieren für Spalte Dur. Siehe diese Antwort


4

Seien Sie vorsichtig, die Verwendung eines einzelnen Stumpfes zum Keulen funktioniert nur, wenn das kombinierte Sichtfeld der Augen weniger als 180 Grad beträgt. Es gibt jetzt VR-Headsets mit einem größeren Sichtfeld um 200 Grad, nämlich das Pimax 5k + und StarVR . Es ist unmöglich, einen herkömmlichen Betrachtungskegelstumpf oder eine einzelne Projektionsmatrix für ein Sichtfeld über 180 Grad zu konstruieren.

Diese Headsets verwenden abgewinkelte Bildschirme, sodass die Projektionsebenen und die Vorwärtsvektoren im Betrachtungsraum nicht parallel sind. Die Gleichungen aus den anderen Antworten hier gehen davon aus, dass sie parallel sind, und würden zu falschen Ergebnissen führen, wenn diese Annahme falsch ist.

Ein einziger kombinierter Sichtkegel kann immer noch nützlich sein, aber Ihr Code sollte darauf vorbereitet sein, Fälle zu behandeln, in denen dies nicht konstruiert werden kann, um die Zukunftssicherheit zu gewährleisten. Alternativ können Sie auch eine Keulung pro Auge durchführen oder zu einer winkelbasierten Keulung wechseln, die ein FOV von mehr als 180 Grad ausdrücken kann.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.