Делаем Oculus Rift чуточку лучше
Привет, Хабр!
С момента появления первых серийных образцов Oculus DK1 прошло уже более года. За этот короткий промежуток времени к миру виртуальной реальности уже успели прикоснуться десятки тысяч разработчиков по всему миру, в том числе и из России (раз, два, три).
В марте был анонсирован Oculus DK2, обладающий целым рядом улучшений, из которых особенно значимыми являются обновленный экран и поддержка отслеживания абсолютного положения головы. И если с первым все более-менее понятно — увеличение разрешения уменьшает эффект зернистости изображения, особенно заметный в первом поколении устройства, а использование OLED экрана вместо LCD улучшает скорость отклика матрицы, то на втором пункте (а именно о его важности и о том, как нами была добавлена поддержка этой фичи в DK1) хотелось бы остановиться подробнее…Важность отслеживания абсолютного положения в шлемах виртуальной реальности большинство людей начинает понимать лишь попробовав их на себе: без него уже через несколько минут начинает теряться эффект погружения, так как линейное движение головой в стороны совершенно не меняет картины виртуального мира. И даже если на секунду представить, что голова не совершает линейных движений, необходимость отслеживания пространственного положения шлема для корректного рендеринга виртуальной реальности все равно остается, так как поворот головой совершается вокруг центра шеи (если смотреть сверху), а не вокруг переносицы. Приведенная ниже анимация наглядно демонстрирует данную проблему — с поворотом головы двигаются и глаза. Плюс сам экран находится на определенном расстоянии от глаз пользователя, что является дополнительно проблемой для разработчиков.
В дополнение ко всему, в шлемах, работа которых базируется исключительно на связке гироскоп + акселерометр + (опционально) магнитометр (как Oculus DK1) со временем накапливается ошибка и ориентация всей системы со временем смещается. Поддержка абсолютного трекинга является решением и этой проблемы.
В Oculus DK2 данная проблема решена с помощью внешней камеры, работающей на частоте около 60 кадров в секунду (минимум 16–17 миллисекунд задержки на реакцию) и отслеживающей интегрированные в корпус шлема ИК-светодиоды. Достаточно ли этой частоты для комфортного использования шлема — вопрос остается открытым. В любом случае, увеличение частоты трекинга уменьшило бы время задержки и, как следствие, обеспечило бы большее погружение в виртуальную реальность.
Задача быстрого и эффективного отслеживания абсолютного положения шлема виртуальной реальности мне и моим коллегам показалась интересной и поэтому в качестве эксперимента было решено сделать апгрейд DK1, обеспечив максимально возможную скорость работы всей системы трекинга. В результате удалось достичь скорости работы более 130 кадров в секунду c практически нулевой загрузкой CPU. Была использована высокоскоростная стерео камера DUO 3D со встроенными мощными ИК-светодиодами, синхронизированными с затворами матриц.
На сам шлем наклеены светоотражающие маркеры (видны на самом первом фото), которые и детектируются камерой. Благодаря тому, что метки расположены не только на корпусе устройства, но и на ремнях, трекинг стабилен даже в том случае, когда пользователь смотрит в противоположную сторону от камеры. Широкий угол обзора позволяет не терять шлем при сильном отклонении головы в сторону от камеры, а особенности подсветки маркеров позволяют возможным их отслеживание даже в агрессивной с точки зрения внешнего ИК света среде.
Все вышесказанное можно наблюдать в следующем ролике
[embedded content]
Буду рад услышать комментарии, предложения, замечания… Спасибо за внимание!