Внутренняя навигация в AR с Unity

Мы писали о востребованности дополненной реальности в обычной жизни, но то были общие примеры. А в этом материале мы рассмотрим конкретный пример использования AR, а также расскажем об основных этапах его разработки с помощью Unity. Программа от компании Mapbox.

Легче ориентироваться в помещении, когда вы можете видеть свое окружение. Не просто смотреть на точку на сетке, но двигаться через пространство, естественно, как контекстуальная информация соответствует вашему движению, а не наоборот.

С помощью Maps SDK для Unity, было создано приложение для навигации в офисе города Сан-Франциско в дополненной реальности.



Работа осуществлялась в Unity 2017.2.0f3 Далее мы ведем рассказ от лица Адарш Павани

Мы разделили этот проект на 3 этапа:
  1. Импорт внутренних данных карты в данные Mapbox: на первом этапе мы загрузили изображение в формате geotiff нашего офиса план в Mapbox студии и создали набор данных, содержащий векторные объекты, такие как стены, комнаты и коридоры.

  2. Загрузка пользовательских данных в Unity: на втором этапе, мы сделали 3D карту в Unity, поэтому масштаб был 1:1 с реальным пространством.

  3. Локализация в мировом масштабе АР: на третьем этапе, мы создали дополненную реальность с навигацией в 3D нашего офиса.
Этап 1: Импорт внутренней карты

Для создания векторных объектов и добавления скрытых картографических данных, надо было сначала добавить географическую привязку изображения к Mapbox студии. После этого в набор данных были добавлены стены, коридоры и объекты конференц-зала, а также пользовательские свойства, предназначенные для использования в Unity.



Конференц-залы были оцифрованы с использованием точек. Каждому точечному объекту были присвоены свойства, помогающие идентифицировать и перемещаться в соответствующий конференц-зал. Вот скрин свойств, которые мы добавили:



После добавления необходимых функций и свойств, мы экспортировали эти данные в тему , которую мы использовали в нашем проекте Unity.

Этап 2: рендеринг в Unity

Мы использовали MapAtWorldScale с RangeAroundTransformTileProvider. Мы выбрали MapAtWorldScale, потому что мы хотели на карту для отображения в реальном масштабе для поддержки расширенной реальности. RangeAroundTransformTileProvider использует АР камеру для загрузки плитки вокруг него. Отображаемые листы содержат сведения о векторных данных, добавленные в набор.

Для рендеринга конференц-залов мы использовали модификатор POI для создания 3D префабов планет с их именами под ними — наши конференц-залы названы в честь планет в нашей Солнечной системе.



Кроме того, мы использовали модификаторы высоты и материала для выделения стен и отрисовки их с помощью затененного шейдера, чтобы обеспечить окклюзию в AR.



Ниже приведен обзор настройки стека модификаторов для отрисовки перечисленных ниже функций

Точки cинхронизации



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

Пункты назначения



Чтобы настроить пункты назначения, мы использовали SpawnPrefabModifier, вариация FixedLocationMonoBehaviorModifier, которая в дополнение к регистрации точки назначения, также порождает панелевозы (3D модель планеты) представляющие конференц-залы.

Сетка

Мы используем NavMesh Unity для вычисления пути навигации для этой демонстрации. Для NavMesh требуется сетка в качестве входных данных, которая используется в качестве навигационного пути. Чтобы создать этот путь, мы добавили линейные объекты в наш набор данных, соединяющие коридоры с местами синхронизации и точки назначения.

Чтобы использовать данные пути навигации, мы используем стек модификаторов, как показано ниже.



Этап 3: Локализация в АР мировом масштабе

Реальная проблема заключается в позиционировании, ориентации и отслеживании устройства пользователя в мире AR. Перед началом опыта, мы должны были убедиться, что 3D-объекты в Unity были полностью согласованы с реальным положением и ориентацией устройства. Мы решили это, добавив двухэтапный процесс, который пользователь должен был завершить, прежде чем увидеть AR мир позиционируется и ориентированы должным образом

На первом этапе пользователь должен отсканировать окружающий пол на наличие плоскости земли.

После завершения первого шага, приложение вызывает пользовательский интерфейс, показывающий различные идентификаторы точек синхронизации. Затем пользователь должен подойти к точке синхронизации и нажать соответствующую кнопку, чтобы расположить и сориентировать карту AR относительно положения и ориентации устройства. Для легкой идентификации, мы отметили 9 пятен в офисе с соответствуя IDS пункта синхронизации от нашего dataset. В таблице ниже показан набор свойств, добавленных для этих точек синхронизации

После того, как 3D-карта выровнена, мы показываем список направлений, к которым пользователь может перейти. Затем, на основе назначения, приложение помещает непрерывную цепочку спрайтов стрелок на NavMesh, чтобы показать направления к выбранному месту назначения.



Будущие улучшения

Основной целью этого проекта было воспользоваться Mapbox Studio в способности использовать скрытые картографических данные, визуализировать их в АР с карты SDK для Unity, и осуществлять на основе карт навигацию в закрытых помещениях. По этой причине мы ограничились синхронизацией положения и ориентации устройства с базовым шагом синхронизации вручную, который зависит от ввода пользователя.

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