VR и выбраковка усеченного конуса

13

При рендеринге сред VR (стерео зрения) вы, ребята, рекомендуете просто выполнить 2 проверки усеченного конуса для определения того, что должно быть нарисовано во время прохода отсечки усеченного элемента, или есть какая-то другая проверка, которая могла бы объединить оба frusta?

Гарри Уоллис
источник

Ответы:

13

Довольно легко создать единый усеченный контур, охватывающий оба отдельных очага глаз, как показано на этой диаграмме, созданной Кассом Эвериттом в Oculus. Вы просто должны поместить вершину этого усеченного между глазами и немного позади них. Вы также можете увеличить расстояние в ближней плоскости, чтобы оно соответствовало исходной плоскости ближней плоскости глаза.

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

Такое усеченное пространство включает в себя небольшое пространство, которого не было в соединении оригинальных двух усеченных. Между двумя глазами есть небольшой объем; Кроме того, на диаграмме не показан вертикальный размер, но перетаскивание вершины усеченного конуса заставляет его включать в себя некоторое пространство над и под исходным порохом. Однако для практических целей выбраковки это, вероятно, не имеет значения. Выборка усеченного конуса обычно в любом случае консервативна, а толщина дополнительного пространства составляет всего несколько сантиметров.

Также возможно просто отбраковать исходную верхнюю и нижнюю плоскости усеченного конуса (которые разделяются между глазами) вместе с внешними боковыми плоскостями. Эти плоскости технически не образуют усеченного конуса, но если использовать «обычный» алгоритм отбраковки, который проверяет по одной плоскости за раз, алгоритм будет успешно работать на любом наборе плоскостей, которые вы ему предоставите.

Совместное использование усеченного контура, выбор LOD и т. Д. Между глазами, а не повторение его дважды в каждом кадре, является отличным способом оптимизации стоимости процессора при стерео рендеринге. Это также является обязательным условием, если вы хотите использовать метод рендеринга, который рисует оба глаза за один проход, например, инстансированный стерео рендеринг .

Натан Рид
источник
2
Спасибо, Натан, это именно то, что я сделал после того, где ты взял эту диаграмму, могу ли я спросить, есть ли она в какой-либо общедоступной документации от Oculus?
Гарри Уоллис
2
@GarryWallis Cass написал это несколько месяцев назад.
Натан Рид
5

Я обобщил результаты Эверитта, если это необходимо.

обобщенный общий усеченный

В качестве бонуса, способ извлечь left0 / right0 из матрицы перспективы глаза:

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

Если у вас есть ряд основных. транспонировать для основной колонки. ср этот ответ

v.oddou
источник
4

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

Эти гарнитуры используют угловые экраны, поэтому плоскости проекции и прямые векторы в пространстве обзора не параллельны. Уравнения из других ответов здесь предполагают, что они параллельны и будут давать неверные результаты, если это предположение неверно.

Единственное объединенное представление может все еще быть полезным, но ваш код должен быть подготовлен к тому, чтобы иметь дело со случаями, когда это не может быть сконструировано, чтобы гарантировать его будущее. В качестве альтернативы, рассмотрите возможность отбора на один глаз или переключитесь на выборку на основе угла, которая может выражать угол обзора больше 180 градусов.

klausw
источник