Seleção de VR e frustum


13

Ao renderizar ambientes VR (visualização estéreo), vocês recomendam apenas fazer duas verificações de frustum para determinar o que deve ser desenhado durante o passe de seleção de frustum ou há alguma outra verificação que seria capaz de combinar as duas frusta?

Respostas:


13

É muito fácil criar um único frustum que envolva ambos os olhos, como mostrado neste diagrama criado por Cass Everitt na Oculus. Você apenas precisa colocar um pouco o vértice desse frustum entre os olhos e atrás deles. Você também pode aumentar a distância do plano próximo para corresponder ao plano próximo original do olho frusta.

insira a descrição da imagem aqui

Esse frustum inclui um pouco de espaço que não estava na união dos dois frusta originais. Há um pequeno volume horizontalmente entre os dois olhos; Além disso, o diagrama não mostra a dimensão vertical, mas puxar o vértice do frustum para trás faz com que inclua algum espaço acima e abaixo do frusta original. No entanto, para fins práticos de seleção, provavelmente não importa. O abate de frustum geralmente é conservador de qualquer maneira, e o espaço extra tem apenas alguns centímetros de espessura.

Também é possível simplesmente selecionar os planos superior e inferior do tronco original (que são compartilhados entre os olhos) junto com os planos laterais externos. Tecnicamente, esses planos não formam um frustum, mas se você usar o algoritmo de descarte "habitual" que testa contra um plano de cada vez, o algoritmo funcionará alegremente em qualquer conjunto de planos que você queira fornecer.

Compartilhar seleção de frustum, seleção de LOD etc. entre os olhos, em vez de repeti-la duas vezes a cada quadro, é uma ótima maneira de otimizar o custo da CPU da renderização estéreo. Esse também é um pré-requisito se você quiser usar um método de renderização que atraia os dois olhos em uma única passagem, como a renderização estéreo instanciada .


2
Obrigado Nathan, foi exatamente o que eu estava procurando. De onde você tirou esse diagrama, posso encontrar em alguma documentação pública da oculus?
amigos estão

2
@GarryWallis Cass twittou alguns meses atrás.
19415 Nathan Reed

5

Eu generalizei os resultados da Everitt, se necessário.

frustum comum generalizado

Como um bônus, uma maneira de extrair left0 / right0 das matrizes da perspectiva dos olhos:

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

Se você tem linha principal. transpor para a coluna principal. cf esta resposta


4

Tenha cuidado, o uso de um único frustum para o abate só funciona se o campo de visão combinado dos olhos for inferior a 180 graus. Agora existem fones de ouvido VR com um campo de visão maior em torno de 200 graus, ou seja, o Pimax 5k + e o StarVR . É impossível construir um tronco de vista tradicional ou matriz de projeção única para um campo de visão acima de 180 graus.

Esses fones de ouvido usam telas angulares, para que os planos de projeção e os vetores avançados no espaço da vista não sejam paralelos. As equações das outras respostas aqui assumem que são paralelas e produziriam resultados incorretos quando essa suposição estiver errada.

Um único conjunto de vistas combinadas ainda pode ser útil, mas seu código deve estar preparado para lidar com casos em que isso não pode ser construído para garantir que seja uma prova futura. Como alternativa, considere fazer o descarte por visão ocular ou alterne para o descarte baseado em ângulo, que pode expressar um FOV maior que 180 graus.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.