Как подготовить мою игру к виртуальной реальности?
Давайте представим, что у нас есть C++ OpenGL игра. Он использует наш собственный движок для рендеринга (ни Unity, ни UE и т. Д.). Давайте упростим нашу проблему.
Например, нам нужно визуализировать некоторый простой куб в режиме VR. Что мы должны сделать для этого?
Я знаю, что нам нужно разделить наш экран на две части. Но что тогда? Как рассчитать поворот, расстояние для обеих частей?
Под VR я имею в виду такие устройства, как VR Box, Gear VR, Oculus Rift и т. Д.
1 ответ
Все основные гарнитуры имеют API-документацию на своих сайтах, которая объясняет, как интегрировать поддержку VR в ваш движок. Вы должны обратиться к этой документации для деталей. Мой опыт в основном с Oculus SDK, но другие SDK похожи.
Как правило, вы сами не разделяете экран на две части - вы предоставляете изображения с левым и правым обзором в SDK, а SDK выполняет деформацию для оптики объектива и отправляет выходные данные на HMD-дисплей (-ы).
SDK предоставляет API для получения параметров камеры и области просмотра, необходимых для визуализации каждого глаза. С помощью Oculus SDK вы также получаете цели рендеринга для каждого взгляда через вызовы API. Вы строите матрицы вида и проекции и устанавливаете области просмотра для каждого вида глаза на основе информации, предоставленной API-интерфейсами для положения HMD, ориентации, поля зрения, разрешения цели и т. Д.
Рендеринг для каждого глаза по сути такой же, как и то, что вы уже делаете в своем движке, но, конечно, вам придется рендерить дважды (один раз для каждого глаза), используя информацию о камере и области просмотра, предоставленную SDK, и вы можете захотеть сделать третий вид для дисплей на штатном мониторе. Возможно, вы захотите реструктурировать части вашего движка для повышения эффективности, поскольку взгляды на левый и правый глаза очень похожи, а не наивно визуализируют всю сцену дважды, но это не является строго необходимым.
Возможно, в конце кадра будет звонок, чтобы сообщить SDK о том, что вы завершили рендеринг, и отправить готовые глазные буферы для отображения. Кроме этого не так уж много. Большая часть проблемы рендеринга виртуальной реальности заключается в достижении требуемой производительности, а не в интеграции SDK, которые довольно просты с точки зрения отображения.