Настройка и запуск примеров WLT и ASA

Итоги

Решение World Locking Tools для Unity (WLT) обеспечивает стабильную систему координат на основе локального отслеживания. В сочетании с Пространственными привязками Azure (ASA) эту стабильную систему координат можно сохранять для разных сеансов и совместно использовать на разных устройствах.

Из этого видео вы узнаете, чего следует ожидать при запуске примера.

Что содержится в этом примере?

Этот пример предоставляет ресурсы и скрипты для выполнения следующих задач:

  1. Настройка глобальной системы координат Unity относительно физической среды.
  2. Публикация этой конфигурации системы координат в Azure с использованием Пространственных привязок Azure.
  3. Извлечение данных из Azure для восстановления системы координат в последующих сеансах или на других устройствах.

Структура этого документа

  1. Настройка. Как установить и развернуть пример приложения.
  2. Примечания и предлагаемые действия по запуску приложения.
  3. Описание архитектуры поддерживающих скриптов.

Настройка и протестированные версии

Этот пример был разработан и протестирован с помощью следующих решений:

  • Unity 2020.3.8f1;
  • Пространственные привязки Azure (ASA) версии 2.9.0–2.10.2;
  • набор средств для смешанной реальности версии 2.7.2;
  • World Locking Tools для Unity версии 1.4.1;
  • FrozenWorldEngine версии 1.1.1.

Вы можете установить WLT и этот пример из пакета выпусков WLT .unitypackage или из Mixed Reality Feature Tool. При установке из FeatureTool необходимо не только установить зависимость примеров WLT (автоматически), но и импортировать примеры в проект. Дополнительные сведения см. в статье Установка WLT из компонента MR Feature Tool.

Установка Frozen World Engine DLL в проект

Первый шаг — установка Frozen World Engine DLL версии 1.1.1. Здесь можно найти инструкции по использованию NuGet для Unity или средства программной строки nuget.exe.

Установка ASA

Создание ресурсов пространственных привязок

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

Поля учетных данных

Установка пакета SDK

Затем установите Пространственные привязки Azure версии 2.9.0 с помощью одного из методов, описанных в этих инструкциях. Здесь использовался метод MR Feature Tool.

Дополнительная настройка для грубого перемещения

При использовании грубого перемещения требуется дополнительная настройка для развертывания на устройстве Android или HoloLens 2.

Что такое грубое перемещение?

Грубое перемещение — это технология, позволяющая выполнять поиск ранее созданных облачных привязок в пределах текущего окружения. Дополнительные сведения см. в разделе "Грубое перемещение" документации по Пространственным привязкам Azure.

В этом примере демонстрируется поиск облачных привязок путем грубого перемещения либо явным образом с помощью идентификатора облачной привязки (GUID). Если включено грубое перемещение, выполните следующие дополнительные действия по настройке. Если вам не подходит грубое перемещение, его можно отключить в компоненте Publisher ASA (ASA издателя) в объекте SpacePinBinder.

Отключение грубого перемещения

Дополнительные действия по настройке для HoloLens 2

Чтобы включить грубое перемещение на HoloLens 2, добавьте разрешение в файл Package.appxmanifest, созданный в ARM/WorldLockingTools/Package.appxmanifest (при условии, что вы выбрали папку ARM в качестве целевого объекта сборки). Если это ваш собственный проект, подставьте в этот путь соответствующее имя для WorldLockingTools. В раздел возможностей добавьте следующую строку:

    <DeviceCapability Name="wiFiControl"/>

Дополнительные сведения об этой проблеме см. в этой публикации в GitHub.

Если вы пропустите этот шаг, параметр издателя Readiness (Готовность) не перейдет в состояние Ready (Готово), частота кадров будет очень низкой, а в вашем журнале UnityPlayer.log (если он создан) будет множество исключений такого вида:

InvalidOperationException: CoarseReloc: WiFi access has been declined. Request CV: . Response CV: . (Запрос на доступ Wi-Fi отклонен. CV запроса: . CV ответа: .)

Вам нужно будет добавлять эту возможность в пакет. Package.appxmanifest при каждом создании решения с нуля. Но в последующих сборках из Unity возможность будет сохраняться.

В разделе Project Settings (Параметры проекта) выберите элемент XR Plugin Management (Управление подключаемыми модулями XR) и убедитесь, что в качестве поставщика подключаемых модулей на вкладке UWP выбрано решение Windows Mixed Reality (для WLT с ASA также поддерживается OpenXR).

Профиль MRTK XAmple XRSDK ToolkitConfigurationProfile в XAmpleApp/CustomProfiles подходит для работы на HoloLens 2.

Дополнительные действия по настройке для Android

Чтобы включить грубое перемещение в Android, выполните эти инструкции по настройке файла Assets/Plugins/Android/mainTemplate.gradle.

Кроме того, в Assets/Plugins/Android/AndroidManifest.xml нужно включить множество разрешений, чтобы обеспечить доступ Wi-Fi в Android. При внедрении элементов этого проекта в собственный проект нужно выполнить те же действия, что и для грубого перемещения. Дополнительные сведения о необходимых разрешениях для доступа Wi-Fi в Android см. в этой публикации, а также в публикации, на которую указывают содержащиеся в ней ссылки.

Примеры измененных mainTemplate.gradle и AndroidManifest.xml включены в пример проекта WLT-ASA, который настроен специально для совместного использования WLT и ASA. Их можно скопировать непосредственно в проект после включения Custom Main Manifest (Настраиваемый основной манифест) и Custom Main Gradle Template (Настраиваемый основной шаблон Gradle) в разделе параметров публикации игрока, как здесь описано.

Если при выборе элемента Build & Run (Сборка и запуск) происходит сбой сборки и поступает сообщение об ошибке шейдера в материале MRTK_Standard, просто попробуйте выбрать элемент Build & Run (Сборка и запуск) еще раз. У меня сборка выполняется со второй попытки. Об этом есть некоторые сведения в разделе информации об ошибках MRTK, но, насколько я могу судить, все они ошибочны.

В разделе Project Settings (Параметры проекта) выберите элемент XR Plugin Management (Управление подключаемыми модулями XR) и убедитесь, что в качестве поставщика подключаемых модулей на вкладке Android выбрано решение ARCore.

Профиль MRTK XAmple AR ToolkitConfigurationProfile подходит для работы на мобильных устройствах. Обязательно выполните скрипт Mixed Reality/Utilities/UnityAR/Update Scripting Defines после перехода на Android или iOS.

Назначение кнопок

Ready

  • Переключение закреплений. Если закрепления SpacePins неактивны, их маркеры манипулирования могут быть скрыты.
  • Публикация. Вы можете сохранить текущую конфигурацию, включив ее извлечение в более позднем сеансе или на других устройствах.
  • Загрузка Oracle. С помощью сохраненных ранее привязок можно восстановить пространственную конфигурацию.
  • Очистка Oracle. Удаление всех базовых ресурсов, особенно пространственных привязок Azure, а также привязок Oracle.
  • Поиск. Поиск всех пространственных привязок Azure в непосредственном окружении и восстановление пространственной конфигурации на их основе.
  • Очистка. Поиск всех пространственных привязок Azure в непосредственном окружении и их удаление.
  • Сброс закреплений. Отмена манипулирования с закреплением пространства. При этом пространственные привязки Azure не удаляются.

Меню на мобильном устройстве немного отличается по форме, но положения и значения кнопок будут теми же.

Пошаговое руководство. Публикация из HoloLens 2

Размещение сцены с помощью закреплений SpacePin

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

Длина дивана в сцене PinTestSofa — 2,18 м, его высота — 0,78 м, а ширина —1,0 м. Таким образом, расстояние между маркерами SpacePin на концах верхней части спинки дивана составляет 2,18 м, а расстояние между ними и полом — 0,78 м. Я рекомендую измерять и размещать временные маркеры на расстоянии 2,18 м друг от друга и на удобной высоте. Кроме того, можно настроить сцену в соответствии с физическим пространством.

После создания и развертывания приложения на устройстве HoloLens 2 подождите, пока на перемещающемся меню не отобразится состояние Ready (Готово) (подсказка: при готовности цвет строки состояния изменится с красного на белый).

Не готов

По одному захватите все маркеры SpacePin (белые каркасные шарики) и перетащите их в нужное расположение относительно опорных маркеров.

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

Публикация координатного пространства

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

Если вы используете грубое перемещение, на этом этапе лучше удалить все созданные ранее облачные привязки. Нажмите кнопку Purge from Search (Удалить из поиска) и дождитесь завершения операции.

Теперь в перемещающемся меню нажмите кнопку Publish (Опубликовать) и дождитесь завершения операции.

Ready

Пошаговое руководство. Использование данных с HoloLens 2 с применением грубого перемещения

Снова запустите приложение на другом устройстве HoloLens 2 или на том же устройстве после закрытия предыдущего сеанса. Когда отобразится состояние Ready (Готово), нажмите кнопку Load from Search (Загрузить из поиска). По завершении операции глобальная система координат Unity будет повторно согласована с физической средой, как и в предыдущем (опубликованном) сеансе.

Пошаговое руководство. Использование данных с HoloLens 2 с применением IBindingOracle (SpacePinBinderFile)

Когда привязки публикуются на устройстве или восстанавливаются из поиска, они записываются в IBindingOracle. Этот пример включает базовое средство Oracle, которое просто записывает привязки в текстовый файл.

Перезапустите приложение в новом сеансе. Если вы используете то же устройство HoloLens 2, с которого была выполнена публикация, значит, у вас есть файл привязок, оставшийся после публикации. Если вы используете другое устройство HoloLens 2, но в предыдущем сеансе был успешно выполнен поиск, значит, файл привязок сохранился после предыдущего сеанса.

Нажмите кнопку Load from File (Загрузить из файла), чтобы загрузить ранее записанные привязки и восстановить координатное пространство.

Пошаговое руководство. Использование данных из Android с применением грубого перемещения

В Android UX немного отличается по виду, но работает точно так же. Основное отличие состоит в том, что по сравнению с HoloLens 2 требуется немного больше проверок среды при запуске, прежде чем служба ASA будет готова к продолжению работы.

Когда для системы будет отображаться состояние Ready (Готово), можно нажать синюю кнопку (третья справа), чтобы выполнить поиск ранее опубликованных привязок и восстановить систему координат.

Пошаговое руководство. Использование данных из Android с применением IBindingOracle (SpacePinBinderFile)

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

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

HoloLens 2: папки пользователей/LocalAppData/WLT-ASA/LocalState/BinderFile.txt;

Android: внутреннее общее хранилище/Android/data/com.WorldLockingTools.WLTASA/files/BinderFile.txt.

См. также