В этой статье вы узнаете об игре с дополненной реальностью, созданной с помощью камеры Intel® RealSense™ (заднего обзора), пакета Intel® RealSense™ SDK, игрового движка Unity 3d™и динамически изменяемого ландшафта (песка). Создатели компьютерных игр постоянно изучают новые способы расширения возможностей пользователя, помогающие игроку более полно погрузиться в игровой мир. При этом разработчики постоянно предоставляют пользователям самые разные способы самовыражения в виртуальном мире: от создания аватаров и глубокой настройки параметров игры до редакторов ландшафта и настраиваемых мини-игр. Технология Intel® RealSense™ раскрывает новые возможности взаимодействия пользователей с компьютерами. В игре TANKED!, где обычная песочница сочетается с аркадной видеоигрой и дополненной реальностью, эта технология позволяет устраивать увлекательные многопользовательские сражения. Разработчики Design Millв своем решении используют песочнику, технологию Intel RealSense и проектор изображений, чтобы предоставить пользователям возможность собственноручно изменять рельеф игрового пространства, динамически создавать виртуальный мир с помощью обычного песка.
Игра

TANKED!— видеоигра «один на один» в стиле танковой аркады. В начале игры ее участники строят виртуальную среду, используя песок — не виртуальный, а самый обычный. После завершения работы над поверхностью земли в виртуальном пространстве каждого игрока размещается танк, и игра начинается. Игроки управляют перемещением танков по динамически формируемому ландшафту, используя рельеф, чтобы уклоняться от снарядов другого игрока. Танки могут съезжать в долины или подниматься на вершины холмов, чтобы соответствующим образом изменялась траектория выстрелов, при этом танки также собирают бонусы, расположенные в стратегических местах в игре. Эти бонусы достаточно важны: увеличение здоровья, повышение скорости танка или повышение скорострельности пушки может оказаться решающим для победы в игре. Победителем становится игрок, первым нанесший достаточный урон танку своего противника.

Сюжет танкового боя дополнен мини-игрой «Сапер». Игроки получают предупреждение о появлении мин, танки прекращают сражение. Мины размещаются произвольным образом в местах, где, согласно данным с камеры Intel® RealSense™, глубина песка достаточна для размещения мин. Каждый игрок до истечения отведенного времени должен раскопать песок, чтобы найти мины и обезвредить их. Если мина найдена, игрок обезвреживает ее, нажимая свою кнопку действия. Если игрок не успевает найти и обезвредить все мины на своей территории, то его танк получает значительный урон.
Оборудование
Камера Intel RealSense и проектор изображений устанавливаются над прямоугольным столом-песочницей, предназначенном для двух игроков. В распоряжении каждого игрока — джойстик для управления движением танка, кнопка действий для ведения стрельбы в танк противника и для обезвреживания мин, а также кнопка начала игры.
Камера Intel RealSense настраивается таким образом, чтобы в фокус попадала внутренняя часть песочницы, а стенки (и все за их пределами) оставались вне поля зрения. Затем мы проецируем созданное изображение виртуальной поверхности земли на песок.
Пакет Intel® RealSense™ SDK используется для получения данных о глубине песка, что позволяет получить совершенно уникальные возможности тактильного управления виртуальным ландшафтом. С помощью Intel RealSense SDK нам удалось откалибровать датчик и проектор, получить данные о глубине песка, сгладить эти данные и исключить недопустимые значений.
На основе данных, полученных от Intel RealSense SDK, динамически формируемый рельеф влияет на траекторию снарядов танков. Если танк находится на склоне холма, то снаряд будет запущен в воздух под большим углом, а не непосредственно вперед. Кроме того, игрок может создавать и песчаные холмы для укрытия. Поэтому каждая игра — уникальна из-за динамически изменяемого рельефа местности: каждый раз игроки заново строят его в песке. Игрокам необходимо учитывать высоту расположения танков в игровом пространстве, сравнивать расстояние до танка противника с дальностью действия пушки своего танка.
Разработка
Камера Intel RealSense наряду с движком Unity* 3D участвует в динамическом создании ландшафта. Поскольку камера Intel RealSense устанавливается непосредственно над столом-песочницей, мы используем COORDINATE_SYSTEM_REAR_OPENCV SETTING для датчика и записываем поток STREAM_TYPE_DEPTH. Для каждого кадра метод Update в Unity вызывает код, который дает камере Intel RealSense команду на передачу данных глубины каждой точки стола-песочницы в Unity. Для повышения производительности показатели глубины, попадающие в приемлемый диапазон, усредняются в Unity для заданного количества кадров. После усреднения значения глубины сглаживаются, поворачиваются, к ним применяются операции сдвига и обрезки при необходимости. После этого значения глубины масштабируются таким образом, чтобы заполнить массив, размер которого равен разрешению heightmap
рельефа в Unity. Затем этот массив значений высоты передается в метод TerrainData.SetHeights
в Unity. Настраиваемая карта текстур splatmap
, которую мы предоставляем в Unity, обновляется в соответствии с новыми значениями высоты.
Затем динамически созданная карта рельефа с текстурами и изображением растительности проецируется на стол-песочницу. При этом танки игроков перемещаются по созданному ими миру. Все необходимые вычисления, несмотря на их кажущуюся сложность, осуществляются мгновенно и не приводят к замедлению игры.
В ходе мини-игры «Сапер» поверхность земли заново калибруется, поскольку игроки меняют рельеф песка, пытаясь отыскать мины. Это позволяет продемонстрировать возможности динамической работы со средой с помощью камеры Intel RealSense. Игроки могут взаимодействовать со скрытыми мирами и с тайнами в созданном ландшафте.
/// <summary> /// Gathers depth data from the sensor, adding it to the points you are accumulating for averaging purposes /// If the number of frames accumulated has reached the number you want to average, the terrain itself if refreshed. /// </summary> private void updateTerrain() { if (pp == null || !autoUpdate) return; pxcmStatus sts = pp.AcquireFrame (false, 0); if (sts == pxcmStatus.PXCM_STATUS_NO_ERROR) { PXCMCapture.Sample sample = pp.QuerySample(); If (sample.depth != null) { cumulativeFramesCount = GetRGB32PixelsDepth2 (sample.depth); if (cumulativeFramesCount >= averagePasses) cumulativeFramesCount = RefreshData2(); } pp.ReleaseFrame(); } else pp.ReleaseFrame(); } /// <summary> /// Populates the pointsToAverage list with the data from the sensor /// </summary> /// <returns> The number of frames accumulated /// <param name=”image”>Depth sample from the sensor</param> private int GetRBG32PixelsDepth2 (PXCMImage image) { PCXMImage.ImageData cdata; UInt16[] dpixels = null; if (image.AcquireAccess(PXCMImage.Access.ACCESS_READ, PXCMImage.PixelFormat.PIXEL_FORMAT_DEPTH, out cdata) >= pxcmStatus.PXCM_STATUS_NO_ERROR) { Int32 dpitch = cdata.pitches[0] / sizeof(Int16); Int32 dwidth = (Int32) image.info.width; Int32 dheight = (Int32) image.info.height; dpixels = cdata.ToShortArray(0, dpitch * dheight); image.ReleaseAccess(cdata); cumulativeFramesCount += 1; float testValue; foreach (PointForAveraging point in pointsToAverage) { //initialize based on the coordinates testValue = dpixels[point.heightCoord * dpitch + point.widthCoord]; if (testValue != depthLowConfidenceValue && testValue >= realSenseSettings.MinDepthValue&& testValue <= realSenseSettings.MaxDepthValue) { point.sumZValues += testValue; point.countZValues += 1; } } } return cumulativeFramesCount; }
Задачи
Для успешной работы игры важно расположение камеры Intel RealSense и проектора. Камеру Intel RealSense пришлось установить достаточно высоко над песочницей, чтобы в поле зрения камеры попали все четыре стенки песочницу. Мы создали программу для калибровки, которая дает игроку возможность выбрать область внутри стенок песочницы, устанавливая смещения по осям x и y и ширину отображаемой области. С помощью смещений можно указать, должен ли датчик работать в зеркальном режиме, следует ли поворачивать точки глубины на 180 градусов перед их отображением на песке. Эта программа вычисляет высоту отображаемой области на основе выбранной ширины и соотношения сторон камеры Intel RealSense.
Параметры калибровки определяют точки глубины, которые будут использованы в фактической игре. Точки глубины измеряются для каждого кадра в Unity 3D. Для повышения производительности игры значения точек глубины усредняются для заданного количества кадров. Малодостоверные данные датчика глубины и точки глубины, выходящие за пределы заданного диапазона, пропускаются. Вместо всех пропущенных значений глубины используется значение глубины ближайшего допустимого пикселя.
Ландшафт в Unity 3D — это квадратный объект, которым нужно заполнить прямоугольную песочницу. Поэтому перед обновлением значений высоты рельефа нужно применить масштабирование к допустимым точкам глубины, чтобы добиться соответствия с разрешением ландшафта. Для этого используется количество допустимых пикселей по ширине и по глубине пропорционально разрешению heightmap
. Масштабированные значения используются для создания массива разрешения heightmap
, а затем передаются в метод TerrainData.SetHeights()
. После этого текстуры земли и деревьев обновляются на основе этих новых значений высоты. Игрок видит обновленный ландшафт.
Иногда в рельефе возникали «пропасти», обусловленные неверными данными глубины. Из-за этого танки «проваливались» сквозь карту. Мы устранили эту проблему, использовав при расчете движения танка среднее значение для окружающих пикселей вместо одной точки. Кроме того, был создан сценарий выравнивания танков, позволяющий танку плавно перемещаться по поверхности.
Перспективы
Платформа для динамического создания среды на основе Intel RealSense SDK открывает совершенно новые возможности, которыми можно пользоваться при создании виртуальных миров. Это касается не только развлечений и игр, но также и учебных интерактивных решений. Впрочем, каким бы ни было назначение виртуальной среды, развлекательным или образовательным, виртуальный стол-песочница с камерой Intel RealSense помогут предоставить пользователям совершенно новые возможности как для игры, так и для обучения.
Разработка игры TANKED!была увлекательным и познавательным процессом, мы собираемся и дальше работать над этой игрой. Мы будем совершенствовать игровой процесс, оптимизировать игру для повышения кадровой скорости и постараемся сделать управление более плавным, чтобы повысить удобство пользователей.
Помимо разработки игры TANKED!, мы разработали и перешли к выпуску комплекта разработчиков систем с интерактивным проектором. Этот комплект получил название Torch. С помощью этого комплекта разработчики смогут создавать собственные интерактивные решения с использованием песочниц и поверхности стола. Дополнительные сведения о платформе Torchсм. по адресу www.ExperienceTorch.com.
Инструменты и поддержка Intel®
Документация к Intel RealSense SDK, программа просмотра примеров и образцы кода очень помогли при разработке TANKED!. В примерах «Raw Streams» и «Capture Viewer» были представлены потоки цветного изображения, данных глубины и данных ИК-датчика с камеры Intel RealSense при различных габаритах сцены и при разной кадровой скорости. Эти примеры помогли нам определить, что именно должно попадать в поле зрения камеры, и мы воспользовались этой информацией в игре. Примеры кода Unity и C# в составе SDK оказались исключительно полезными в качестве отправной точки для разработки. Для получения дополнительных инструментов и ресурсов для создания игры мы использовали портал Intel Developer Zone, нам оказывали личную поддержку члены команды разработчиков технологии Intel RealSense, мы получили помощь от сообщества и службы поддержки игрового движка Unity.
О компании Design Mill (www.designmillinc.com)
Design Mill, Inc. — стратегический системный интегратор, создающий передовые решения для ведущих отраслевых организаций и Министерства обороны США. В решениях Design Mill применяется интеграция современного интерактивного оборудования и программного обеспечения, используются самые передовые методики и процессы проектирования и разработки. Компания Design Mill занимается разработкой новейших решений в области виртуальной и дополненной реальности. Мы помогаем клиентам раскрывать самые передовые подходы взаимодействия с потребителями и развивать стратегии для достижения успеха на новом уровне.
Примечания
Данный документ не предоставляет явной или подразумеваемой лицензии, лишения права возражения или иных прав на интеллектуальную собственность.
Корпорация Intel не предоставляет никаких гарантий, явных и подразумеваемых, включая подразумеваемые гарантии коммерческой ценности, пригодности для какой-либо цели или ненарушения каких-либо прав, а также любых гарантий, связанных с работой программ, их распространением или их использованием в торговле.
Этот документ содержит информацию о продуктах, службах и процессах, находящихся на этапе разработки. Вся информация, представленная в данном документе, может быть изменена без предварительного уведомления. Для получения последних прогнозов, графиков, технических характеристик и планов развития обратитесь к своему представителю корпорации Intel.
Продукты и услуги, описанные в данном документе, могут содержать ошибки и неточности, из-за чего реальные характеристики продуктов могут отличаться от приведенных здесь. Уже выявленные ошибки могут быть предоставлены по запросу.
Копии документов с порядковым номером, ссылки на которые приведены в этом документе или в другой документации Intel, можно получить, обратившись по телефону 1-800-548-47-25 или на сайте www.intel.com/design/literature.htm.
Intel, эмблема Intel и RealSense являются товарными знаками корпорации Intel в США и в других странах.
* Прочие наименования и товарные знаки могут быть собственностью третьих лиц.
© Intel Corporation, 2015 г.
Пример исходного кода распространяется на условиях лицензионного соглашения корпорации Intel на использование образцов исходного кода.