Стерео рендеринг
Unigine поддерживает "легкий для глаз" стерео 3D-рендеринг "из коробки" для всех поддерживаемых видеокарт. Стереоскопическая 3D-визуализация на базе Unigine обеспечивает поистине захватывающий опыт даже в большом поле зрения или на трех мониторах. Это полностью родное решение для API DirectX и OpenGL, которое не требует установки каких-либо специальных драйверов. В зависимости от установленного стереорежима единственными требованиями к оборудованию являются оборудование, необходимое для стереоскопического просмотра (например, очки с активным затвором, пассивные поляризованные или анаглифические) или специальное устройство вывода.
Стерео режимы#
Для приложения на платформе Unigine доступно несколько режимов стерео-рендеринга. Для их включения никаких специальных действий или модификаций не требуется. Просто используйте готовую скомпилированную библиотеку плагинов, установите желаемый вариант запуска, и ваше приложение готово для стерео!
Стереобиблиотеки находятся в папке lib/ UNIGINE SDK.
Отдельные изображения#
Чтобы использовать этот функционал вам необходимо получить лицензию на
Этот режим служит для вывода двух отдельных изображений для каждого глаза. Его можно использовать с любыми устройствами вывода VR / AR, которые поддерживают раздельный вывод изображений, например для 3D-видео очков или шлемов (HMD). См. Дополнительные сведения о рендеринге ниже .
Чтобы запустить стереорежим с отдельными изображениями, загрузите плагин Separate.
Quad Buffered Stereo#
Чтобы использовать этот функционал вам необходимо получить лицензию на
В этом режиме используется лучшая из аппаратной поддержки 3D стерео в видеокартах NVIDIA Quadro, которые поддерживают четырехкратную буферизацию. Unigine использует это для достижения хорошей производительности. Однако другие карты NVIDIA также поддерживают этот режим и не демонстрируют более низкого уровня производительности.
Чтобы включить режим Quad Buffered Stereo, следуйте инструкциям .
Oculus Rift#
Этот режим используется для поддержки головного дисплея Oculus Rift (также доступен режим HD).
Чтобы запустить режим Oculus Rift, загрузите плагин Oculus .
Anaglyph Mode#
Анаглифическое стерео просматривается через красно-голубые анаглифические очки. См. Дополнительные сведения о рендеринге ниже .
Чтобы запустить стерео режим Анаглиф:
- Укажите определение STEREO_ANAGLYPH при запуске (вместе с другими обязательными аргументами CLI ).
- Запустите 64-битное приложение (или его отладочную версию).
main_x64 -extern_define STEREO_ANAGLYPH
Interlaced Lines#
Режим чересстрочного стерео используется с мониторами с чересстрочной разверткой и поляризованными 3D-очками. См. Дополнительные сведения о рендеринге ниже .
Чтобы запустить стереорежим с чересстрочной разверткой:
- Укажите определение STEREO_INTERLACED при запуске (вместе с другими обязательными аргументами CLI ).
- Запустите 64-битное приложение (или его отладочную версию).
main_x64 -extern_define STEREO_INTERLACED
Split Stereo#
Горизонтальный и вертикальный стереорежимы поддерживаются для дисплеев MasterImage 3D без стекла. Такой же режим (горизонтальный или вертикальный) выбран в настройках драйвера графического чипа. Подробнее о рендеринге см. Ниже .
Чтобы запустить режим горизонтального стерео:
- Укажите определение STEREO_HORIZONTAL при запуске (вместе с другими обязательными аргументами CLI ).
- Запустите 64-битное приложение (или его отладочную версию).
main_x64 -extern_define STEREO_HORIZONTAL
Чтобы запустить вертикальный стереорежим:
- Укажите определение STEREO_VERTICAL при запуске (вместе с другими обязательными аргументами CLI ).
- Запустите 64-битное приложение (или его отладочную версию).
main_x64 -extern_define STEREO_VERTICAL
Стерео модель рендеринга#
Модель стерео-рендеринга использует асимметричную проекцию усеченной параллельной оси (называемую внеосевой ) для создания оптимальных стереопар без вертикального параллакса (вертикальный сдвиг к углам). (Br)
Это означает создаются две камеры с параллельными линиями обзора, по одной на каждый глаз. Они разделены по горизонтали относительно центрального положения (это расстояние называется расстоянием разделения глаз, и его можно регулировать, чтобы избежать утомления глаз от стереоскопического просмотра). Обе камеры используют асимметричную усеченную вершину, когда дальняя плоскость параллельна ближней плоскости, но они не симметричны относительно оси обзора. Это позволяет правильно выровнять плоскости проекции двух камер относительно плоскости нулевого параллакса (т.е. экрана). Асимметричная проекция на параллельную ось усеченного конуса не вызывает искажений в углах, делая стереоскопическое изображение полностью комфортным для глаза.
При визуализации объекты, которые попадают на расстояние фокусного расстояния камеры (то есть ее плоскость проекции), воспринимаются как выскакивающие из экрана; объекты, находящиеся за ним, кажутся скрытыми за экраном и создают впечатление глубины сцены.
Конвейер стерео рендеринга Unigine#
Движок Unigine вычисляет изображения для обоих глаз, используя соответствующий шейдер постобработки. Какой шейдер применяется, зависит от выбранного стереорежима.
- В режиме Анаглиф используется материал постобработки post_stereo_anaglyph и только одна цель рендеринга. Два изображения фильтруются по красному и синему каналам, накладываются друг на друга и выводятся на экран для просмотра через цветные очки.
- В режиме разделения изображений используется материал постобработки post_stereo_separate . Он создает две цели рендеринга и выводит изображения для левого и правого глаза, смещенные относительно друг друга, на два отдельных монитора.
- В режиме Oculus Rift используется материал постобработки post_stereo_separate . Изображения для левого и правого глаза выводятся на соответствующую половину экрана, и линзы дисплея Oculus Rift искажают их, чтобы глаза воспринимали эти изображения так же, как в реальном мире.
- В случае режима Quad Buffer используется материал постобработки post_stereo_separate .
- В режиме Interlaced lines используется материал постобработки post_stereo_interlaced . Этот режим основан на чересстрочном кодировании. Например, изображение для левого глаза может отображаться на нечетных строках пикселей с одной поляризацией, а изображение для правого глаза - на четных строках с другой поляризацией.
- Горизонтальный и вертикальный стереорежимы используют только одну цель рендеринга. После этого драйвер графического чипа обрабатывает его как два изображения, выровненных по горизонтали или вертикали (в зависимости от установленного режима), и растягивает их на экране для создания стереоэффекта. Если используется горизонтальный стерео режим, применяется материал постобработки post_stereo_horizontal . В случае вертикального стереорежима используется материал постобработки post_stereo_vertical .
Если стерео-рендеринг отключен (например, когда приложение 3D Vision переключается в оконный режим), используется материал post_stereo_replicate , и шейдер постобработки создает простое моно-изображение (то же самое для всех окон просмотра, если есть много). Этот материал позволяет переключиться на нормальный рендеринг и избежать черного экрана, когда движок не рендерит стереопары.
Стерео рендеринг оптимизирован для повышения производительности без ущерба для качества изображения. Например, карты теней визуализируются только один раз и используются для обоих глаз; отбраковка геометрии также выполняется только один раз. Большинство проходов рендеринга по-прежнему удваиваются, поэтому имеет смысл отключить ненужные проходы или установить более низкое качество глобального шейдера, чтобы минимизировать падение производительности.
Настройка стерео#
Стерео-рендерингом можно управлять с помощью следующего кода:
- Стерео скрипт stereo.h (находится в папке data/core/scripts/system). По умолчанию он включен в системный скрипт unigine.cpp. Вы можете изменить сценарий stereo.h, чтобы изменить конфигурацию камеры по умолчанию.
- Если вы решите не включать стереосценарий в системный, вы можете установить соответствующее определение стереорежима и управлять параметрами стерео напрямую через engine.render.setStereoRadius() и engine.render.setStereoDistance() функций.
В этом случае вам необходимо реализовать свою собственную конфигурацию камеры в функции render() системного скрипта:
Исходный код (UnigineScript)
int render() { #ifdef STEREO_MODE // implementation of a custom camera configuration #endif return 1; }
Скрытая область#
Некоторые пиксели не видны в VR. Вы можете оптимизировать производительность рендеринга, пропустив их. Для таких пикселей доступны следующие режимы отсечения:
- Режим отбраковки на основе OpenVR - отбраковка выполняется с использованием сеток, возвращаемых OpenVR. Обратите внимание, что результат отбраковки зависит от используемого HMD.
- Пользовательский режим отсечения: отсечение выполняется с использованием овальной или круглой сетки, определяемой настраиваемыми параметрами.
Вы можете указать настраиваемую сетку , представляющую такую скрытую область, настроить ее преобразование и назначить ее области просмотра.
Чтобы установить значение через консоль, используйте консольную команду render_stereo_hidden_area.