Saat merender lingkungan VR (stereo view), apakah Anda sarankan hanya melakukan 2 frustum checks untuk menentukan apa yang harus ditarik selama frustum culling pass atau adakah beberapa cek lain yang dapat menggabungkan kedua frusta?
Saat merender lingkungan VR (stereo view), apakah Anda sarankan hanya melakukan 2 frustum checks untuk menentukan apa yang harus ditarik selama frustum culling pass atau adakah beberapa cek lain yang dapat menggabungkan kedua frusta?
Jawaban:
Sangat mudah untuk membuat satu frustum yang membungkus kedua mata individual frusta, seperti yang ditunjukkan dalam diagram yang dibuat oleh Cass Everitt di Oculus. Anda hanya perlu menempatkan simpul frustum ini di antara mata dan di belakangnya sedikit. Anda juga dapat meningkatkan jarak pesawat dekat agar sesuai dengan pesawat dekat asli dari mata frusta.
Frustrasi semacam itu mencakup sedikit ruang yang tidak berada dalam persatuan dua frusta asli. Ada volume kecil secara horizontal di antara kedua mata; juga, diagram tidak menunjukkan dimensi vertikal, tetapi menarik vertum frustum membuatnya memasukkan beberapa ruang di atas dan di bawah frusta asli. Namun, untuk tujuan pemusnahan praktis mungkin tidak masalah. Frustum culling biasanya konservatif, dan ruang ekstra hanya beberapa sentimeter.
Dimungkinkan juga untuk menyisihkan terhadap pesawat asli bagian atas dan bawah frustum (yang dibagi di antara mata) bersama dengan pesawat sisi luar. Pesawat-pesawat ini tidak membentuk frustrasi, secara teknis, tetapi jika menggunakan algoritma pemusnahan "yang biasa" yang menguji terhadap satu pesawat pada suatu waktu, algoritme dengan senang hati akan bekerja pada setiap pesawat yang Anda ingin berikan.
Berbagi frustum culling, pemilihan LOD, dll di antara mata, daripada melakukannya kembali dua kali setiap frame, adalah cara yang bagus untuk mengoptimalkan biaya CPU rendering stereo. Ini juga merupakan prasyarat jika Anda ingin menggunakan metode render yang menarik kedua mata dalam satu lintasan, seperti render stereo yang dipasang .
Saya telah menggeneralisasi hasil Everitt jika itu diperlukan.
Sebagai bonus, cara untuk mengekstrak left0 / right0 dari matriks perspektif mata:
left0 = n0 * (Mle13 - 1) / Mle11;
right1 = n1 * (Mre13 + 1) / Mre11;
Jika Anda memiliki baris utama. transpos untuk kolom utama. lih jawaban ini
Hati-hati, menggunakan satu frustum untuk memusnahkan hanya berfungsi jika bidang pandang gabungan mata kurang dari 180 derajat. Sekarang ada headset VR dengan bidang pandang yang lebih besar sekitar 200 derajat, yaitu Pimax 5k + dan StarVR . Tidak mungkin untuk membangun frustum tampilan tradisional atau matriks proyeksi tunggal untuk bidang pandang lebih dari 180 derajat.
Headset ini menggunakan layar miring, sehingga bidang proyeksi dan vektor maju dalam ruang tampilan tidak paralel. Persamaan dari jawaban lain di sini mengasumsikan bahwa mereka paralel, dan akan menghasilkan hasil yang salah ketika asumsi itu salah.
Satu frustrasi tampilan gabungan masih bisa berguna, tetapi kode Anda harus siap untuk menangani kasus-kasus di mana ini tidak dapat dibangun untuk memastikan bahwa itu bukti masa depan. Atau, pertimbangkan untuk melakukan pemusnahan per tampilan mata, atau beralih ke pemusnahan berbasis sudut yang dapat mengekspresikan FOV lebih besar dari 180 derajat.