VR et tri sélectif

13

Lors du rendu des environnements VR (vue stéréo), recommandez-vous de ne faire que 2 vérifications du tronc pour déterminer ce qui doit être dessiné pendant la passe de tri du frustum ou existe-t-il un autre contrôle qui pourrait combiner les deux frusta?

Garry Wallis
la source

Réponses:

13

Il est assez facile de créer un seul tronc qui englobe les deux troncs oculaires individuels, comme le montre ce diagramme créé par Cass Everitt à Oculus. Il suffit de placer un peu le sommet de ce tronc entre les yeux et derrière eux. Vous pouvez également augmenter la distance du plan proche pour qu'elle corresponde au plan proche d'origine de la frusta oculaire.

entrez la description de l'image ici

Un tel tronc comprend un petit espace qui n'était pas dans l'union des deux troncs d'origine. Il y a un petit volume horizontal entre les deux yeux; De plus, le diagramme ne montre pas la dimension verticale, mais en tirant le sommet du tronc vers l'arrière, il inclut un espace au-dessus et en dessous du tronc d'origine. Cependant, pour des raisons pratiques d'abattage, cela n'a probablement pas d'importance. L'abattage du tronc est généralement conservateur de toute façon, et l'espace supplémentaire n'est que de quelques centimètres d'épaisseur.

Il est également possible de simplement éliminer les plans supérieurs et inférieurs du tronc d'origine (qui sont partagés entre les yeux) ainsi que les plans latéraux extérieurs. Ces avions ne forment pas un tronc, techniquement, mais si vous utilisez l'algorithme de tri "habituel" qui teste contre un avion à la fois, l'algorithme fonctionnera avec plaisir sur n'importe quel ensemble d'avions que vous voudrez lui donner.

Partager le tri sélectif, la sélection de LOD, etc. entre les yeux, plutôt que de le refaire deux fois à chaque image, est un excellent moyen d'optimiser le coût CPU du rendu stéréo. C'est également une condition préalable si vous souhaitez utiliser une méthode de rendu qui dessine les deux yeux en une seule passe, comme le rendu stéréo instancié .

Nathan Reed
la source
2
Merci Nathan, c'est exactement ce que je cherchais, où avez-vous obtenu ce diagramme puis-je demander, est-ce dans une documentation publique d'oculus?
Garry Wallis
2
@GarryWallis Cass l'a tweeté il y a quelques mois.
Nathan Reed
5

J'ai généralisé les résultats d'Everitt si nécessaire.

tronc commun généralisé

En bonus, un moyen d'extraire left0 / right0 des matrices de perspective des yeux:

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

Si vous avez un rang majeur. transposer pour colonne majeur. cf cette réponse

v.oddou
la source
4

Attention, l'utilisation d'un seul tronc pour l'abattage ne fonctionne que si le champ de vision combiné des yeux est inférieur à 180 degrés. Il existe désormais des casques VR avec un champ de vision plus large autour de 200 degrés, à savoir le Pimax 5k + et StarVR . Il est impossible de construire un tronc de vue traditionnel ou une matrice de projection unique pour un champ de vision de plus de 180 degrés.

Ces casques utilisent des écrans inclinés, de sorte que les plans de projection et les vecteurs avant dans l'espace de vue ne sont pas parallèles. Les équations des autres réponses ici supposent qu'elles sont parallèles et produiraient des résultats incorrects lorsque cette hypothèse est fausse.

Un seul tronc de vue combiné peut toujours être utile, mais votre code doit être prêt à traiter les cas où cela ne peut pas être construit pour garantir sa pérennité. Vous pouvez également envisager de procéder à un abattage par vue à l'œil, ou de passer à un abattage basé sur l'angle qui peut exprimer un champ de vision supérieur à 180 degrés.

klausw
la source