VR ve frustum kaldırma


13

VR (stereo görünüm) ortamları oluştururken, çocuklar frustum culling geçişi sırasında ne çizileceğini belirlemek için sadece 2 frustum kontrolü yapmanızı veya her iki frusta'yı birleştirebilecek başka bir kontrol var mı?

Yanıtlar:


13

Oculus'ta Cass Everitt tarafından oluşturulan bu şemada gösterildiği gibi, her iki göz frustasını kaplayan tek bir frustum oluşturmak oldukça kolaydır. Bu frustumun tepe noktasını gözler arasına ve arkalarına biraz yerleştirmelisiniz. Ayrıca, göz frustasının orijinal yakın düzlemine uyacak şekilde yakın düzlem mesafesini artırabilirsiniz.

resim açıklamasını buraya girin

Böyle bir frustum, orijinal iki frustanın birliğinde olmayan küçük bir alan içerir. İki göz arasında yatay olarak küçük bir hacim var; ayrıca, diyagram dikey boyutu göstermez, ancak frustum tepe noktasını geri çekmek, orijinal frustanın üstünde ve altında biraz boşluk olmasını sağlar. Bununla birlikte, pratik ayıklama amaçları için muhtemelen önemli değildir. Frustum culling genellikle yine de konservatiftir ve ekstra boşluk sadece birkaç santimetre kalınlığındadır.

Dış kenar düzlemleriyle birlikte orijinal frustum üst ve alt düzlemlere (gözler arasında paylaşılan) karşı çıkmak da mümkündür. Bu düzlemler teknik olarak bir hayal kırıklığı oluşturmaz, ancak bir kerede bir düzleme karşı test eden "olağan" ayıklama algoritması kullanılırsa, algoritma vermek istediğiniz herhangi bir düzlem setinde mutlu bir şekilde çalışır.

Frustum culling'i, LOD seçimini, vb. Her karede iki kez yeniden yapmak yerine gözler arasında paylaşmak, stereo oluşturmanın CPU maliyetini optimize etmenin harika bir yoludur. Bu, aynı zamanda, her iki gözü tek bir geçişte, örneğin stereo oluşturma gibi çizen bir oluşturma yöntemi kullanmak istiyorsanız bir önkoşuldur .


2
Teşekkürler Nathan tam olarak peşinde olduğum şeydi, bu diyagramı nereden edinebilirim, oculus'tan herhangi bir kamu dokümanında mı?
Garry Wallis

2
@GarryWallis Cass birkaç ay önce tweet attı .
Nathan Reed

5

Gerekirse Everitt'in sonuçlarını genelleştirdim.

genelleştirilmiş ortak frustum

Bonus olarak, gözler perspektif matrislerinden left0 / right0'ı ayıklamanın bir yolu:

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

Eğer büyük bir satır varsa. binbaşı sütun için devrik. cf bu cevap


4

Dikkatli olun, tek bir frustum kullanmak, sadece gözlerin birleşik görüş alanı 180 dereceden azsa işe yarar. Şimdi Pimax 5k + ve StarVR gibi daha geniş görüş alanına sahip VR kulaklıklar var . 180 dereceden fazla bir görüş alanı için geleneksel bir görünüm frustum veya tek bir projeksiyon matrisi oluşturmak imkansızdır.

Bu kulaklıklar açılı ekranlar kullanır, bu nedenle görüş alanındaki projeksiyon düzlemleri ve ileri vektörler paralel değildir. Buradaki diğer cevaplardan denklemler paralel olduklarını varsayar ve bu varsayım yanlış olduğunda yanlış sonuçlar verir.

Tek bir kombine görünüm frustum yine de yararlı olabilir, ancak kodunuzun gelecekteki kanıtı sağlamak için yapılamadığı durumlarla başa çıkmak için hazırlanmalıdır. Alternatif olarak, her göz görünümü için ayıklama yapmayı düşünün veya 180 dereceden daha büyük bir FOV ifade edebilen açı tabanlı ayıklamaya geçin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.