Заархивировано - RealPerspective: отслеживание движения головы с помощью технологии Intel® RealSense™

Выпуск комплекта Intel® RealSense™ SDK прекращен. Его поддержка и обновления более недоступны.

Code Sample

Введение

В RealPerspective используется технология Intel® RealSense™. В этом примере кода реализовано отслеживание движения головы для точного позиционирования в трехмерном пространстве.

Работая с системой, оборудованной камерой Intel® RealSense®, пользователь может управлять обзором в игре, поворачивая голову. Так наши технологии позволяют заглянуть в вирту­альный мир. Обычно для таких задач применялись цветные камеры или инфракрасные датчики[3], но камера Intel RealSense предоставляет данные о глубине сцены, поэтому с ней не требуется никакого дополнительного оборудования на пользователе.

В образце кода используется проецирование перспективы вне осей, описанное в работе Куима (Kooima)[1]. Входные данные — пространственные координаты X и Y лица, а также средняя глубина лица.

Сборка и развертывание

Для создания программы требуется пакет Intel® RealSense™ SDK и Intel RealSense Depth Camera Manager.

Для развертывания пакета конечными пользователями понадобится установить соответствующий распространяемый модуль среды выполнения SDK.

Загрузить SDK, среду выполнения SDK и Depth Camera Manager можно здесь: https://software.intel.com/ru-ru/intel-realsense-sdk/download

Unity

В проекте Unity для совместимости с пакетом SDK, установленным на компьютере, следует заменить файлы libpxcclr.unity.dll и libpxccpp2c.dll, находящиеся в папках проекта Libraries\x64 и Libraries\x86, на библиотеки DLL из папок bin\x64 и bin\x86 пакета Intel RealSense SDK.

Метод

Инициализация камеры Intel RealSense

При запуске Sense Manager инициализирует и настраивает модуль face для обнаружения лица (ограничивающий прямоугольник и глубина). После этого конвейер Sense Manager будет готов к приему данных.

Обработка ввода

Функция обработки ввода возвращает объект Vector3, нормализованный до 0 к 1, содержащий положение лица в трехмерном пространстве, полученное от камеры Intel RealSense. Если камера Intel RealSense недоступна, используются координаты мыши.

Координаты расположения лица X, Y и Z берутся из модуля face пакета Intel RealSense SDK. Плоские координаты X и Y лица отсчитываются от центра прямоугольника, в который вписано лицо, измеряются в пикселях. Координата Z лица — средняя глубина лица в миллиметрах. Эта функция не блокирует другие, поэтому, если данные недоступны, работа функции Update не будет задержана. В противном случае прежние матрицы перспективы и просмотра не изменяются.

Вычисление внеосевых параметров

Точки pa, pb и pc определяют пространство экрана и задают размер экрана, его соотношение сторон и ориентацию в пространстве. Пространство экрана масштабируется на основе размера экрана и окна приложения. Наконец, n и f определяют передний и задний планы. В Unity эти значения берутся из класса Camera.

Например, если комната имеет размер 16 на 9 единиц с соотношением сторон 16:9, то можно задать такие pa, pb, pc, чтобы комната занимала весь экран. Расстояние от pa до pb будет шириной комнаты, 16 единиц, а расстояние от pa до pc — высота комнаты, 9 единиц. Дополнительные примеры см. в статье Роберта Куима (Kooima)[1].

Off-Axis Parameters

Вычисление внеосевых матриц

Назначение этой функции — возвращать внеосевую матрицу. Матрица проекции основывается на стандарте OpenGL* glFrustum. Последний этап — выравнивание направления взгляда с плоскостью XY и преобразование координат. Этот процесс аналогичен действиям камеры или матрицы просмотра в графическом конвейере.

Матрица проекции

Сначала вычисляются ортонормальные базисные векторы (vr, vu, vn) на основе пространства экрана. Впоследствии ортонормальные базисные векторы помогут спроецировать пространство экрана на передний план и создать матрицу, чтобы выровнять пространство отслеживания с плоскостью XY.

Off-Axis Matrices

Затем из плоскости экрана создаются векторы пространства экрана va, vb и vc.

Screen extents vectors

После этого на основе пространства экрана вычисляются стороны усеченной пирамиды l, r, b и t (путем проецирования базовых векторов на векторы пространства экрана для получения их расположения на плоскости), а затем уменьшаются на коэффициент расстояния от плоскости экрана до переднего плана. Это обусловлено тем, что стороны усеченной пирамиды определяют усеченную пирамиду, построенную на плоскости переднего плана.

Наконец, после вычисления сторон усеченной пирамиды значения подаются в функцию glFrustum для получения матрицы перспективной проекции. Поле обзора вычисляется по сторонам усеченной пирамиды[2].

Ориентация плоскости проекции

Эффект перспективного сокращения проекции работает только при исходном положении точки обзора. Поэтому первый шаг — выравнивание экрана с плоскостью XY. Матрица M создается для получения системы прямоугольных (декартовых) координат по базисным векторам (vr, vu и vn). Пространство экрана нужно выровнять с плоскостью XY, поэтому берется транспозиция матрицы M.

Сдвиг точки обзора

Аналогичным образом отслеживаемое положение глаза pe необходимо переместить к усеченной пирамиде. Для этого используется матрица преобразования T.

Композиция

Вычисленные матрицы передаются обратно в структуру данных Camera в Unity.

Производительность

В качестве тестового устройства использовалась система BRIX* Pro компании GIGABYTE Technology с процессором Intel® Core™ i7-4770R (выделение тепла — 65 Вт).

Издержки производительности в среднем весьма низки. На выполнение функции Update() требуется менее 1 мс. Около 0,5 мс необходимо для последовательно обнаруженных кадров с лицами, 0,2 мс — для кадров без лиц. Новые данные поступают каждые 33 мс.

Использование и дальнейшая работа

Методику, описанную в этом примере, можно применять в играх при наличии оборудования RealSense в системах с процессорами Intel®. Предоставляемая дополнительная система ввода обеспечивает дополнительный уровень детализации, позволяющий глубже погружаться в игровой мир и добиваться большей точности позиционирования в нем.

Возможные сценарии использования — игры жанра RTS (стратегии в реальном времени), MOBA (многопользовательская сетевая боевая арена), настольные игры, в которых пользователь может наблюдать за действиями и ходами, как при игре в шахматы. В симуляторах и играх с экспериментальной средой пользователь наблюдает действие и может выбрать наиболее удобный ракурс наблюдения за своими виртуальными персонажами с возможностью приближения для более подробного просмотра.

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

Справочные материалы

[1]: Роберт Куима (Kooima, Robert). Перспективное проецирование в целом. 2009.

[2]: OpenGL.org. Преобразования.

[3]: Джонни Ли (Johnny Lee). Отслеживание движений головы для систем виртуальной реальности с использованием Wii Remote. 2007.

Приложение

Требования

  • Система с Intel RealSense или камера SR300
  • Intel RealSense SDK 6.0 или более поздней версии
  • Intel RealSense Depth Camera Manager SR300 3.0 или более поздней версии
  • Microsoft Windows 8.1* или более поздней версии
  • Unity 5.3 или более поздней версии
Для получения подробной информации о возможностях оптимизации компилятора обратитесь к нашему Уведомлению об оптимизации.
Возможность комментирования русскоязычного контента была отключена. Узнать подробнее.