ВР та знищення фрустуму


13

Коли ви рендеруєте середовище VR (стерео-вигляд), ви, хлопці, рекомендуєте просто зробити 2 перевірки фрустуму, щоб визначити, що потрібно зробити під час пропуску фрустуму, або є якась інша перевірка, яка могла б поєднати обидва frusta?

Відповіді:


13

Створити єдиний фрустум, який охоплює обидві окремі очні плоди, досить легко, як показано на цій діаграмі, створеній Кассом Еверіттом в Oculus. Ви просто повинні трохи розмістити вершину цього фрусту між очима та позаду них. Ви також можете збільшити близьку площину відстані, щоб відповідати початковій близько площині очної плоди.

введіть тут опис зображення

Такий фруст включає трохи місця, яке не було в союзі первісних двох фрустів. Між обома очима горизонтально є невеликий об'єм; також на діаграмі не відображається вертикальний розмір, але, якщо потягнути вершину плоду назад, вона містить деякий простір над і нижче оригінальної плоди. Однак для практичних цілей вибивання це, мабуть, не має значення. Знищення плоду зазвичай все одно консервативне, а зайвий простір - товщина лише декількох сантиметрів.

Можна також просто притиснутись до оригінальних площин верхньої та нижньої плодів (які розділяються між очима) разом із зовнішніми боковими площинами. Ці площини технічно не утворюють плоду, але якщо використовувати "звичайний" алгоритм відсікання, який перевіряється на одну площину за один раз, алгоритм із задоволенням буде працювати на будь-якому наборі площин, яким ви хочете його надати.

Спільний викид фрустуму, вибір LOD тощо між очима, а не повторне виконання двох разів у кожному кадрі - це чудовий спосіб оптимізувати витрати на стереорендування CPU. Це також є обов'язковою умовою, якщо ви хочете використовувати метод візуалізації, який малює обидва ока за один прохід, наприклад, встановлене стереорендування .


2
Дякую Натану, саме про це я пішов, де ти взяв цю діаграму, можу запитати, чи є вона в будь-якій публічній документації з oculus?
Гаррі Уолліс

2
@GarryWallis Каси написали її кілька місяців тому.
Натан Рід

5

Я узагальнив результати Еверітта, якщо це потрібно.

генералізований звичайний фрустум

Як бонус, спосіб витягнути ліві0 / праві0 з очей перспективних матриць:

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

Якщо у вас є головний рядок. транспонірувати для мажора колони. див. цю відповідь


4

Будьте уважні, використання одного фрустума для відсікання працює лише в тому випадку, якщо суміщене поле зору очей менше 180 градусів. Зараз є гарнітури VR із більшим полем зору близько 200 градусів, тобто Pimax 5k + та StarVR . Неможливо побудувати традиційний фрустум виду або матрицю єдиної проекції для поля зору понад 180 градусів.

У цих гарнітурах використовуються кутові екрани, тому площини проекцій та передні вектори у просторі зору не паралельні. Рівняння з інших відповідей тут припускають, що вони паралельні і давали б неправильні результати, коли це припущення неправильне.

Єдиний комбінований вигляд фрустума все ще може бути корисним, але ваш код повинен бути готовий вирішувати випадки, коли це не може бути побудовано таким чином, щоб забезпечити його майбутнє підтвердження. Крім того, розгляньте можливість відсікання на очний перегляд або переключіться на кут на основі кута, який може виражати FOV більше, ніж на 180 градусів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.