Перенос приложений HoloLens (1-го поколения) в HoloLens 2

Это руководство предназначено для разработчиков, которые используют существующее приложение Unity для HoloLens (1-го поколения) и хотят перенести его на устройство HoloLens 2. Процесс переноса приложения Unity для HoloLens (1-го поколения) на HoloLens 2 состоит из четырех основных шагов.

Эти шаги подробно описаны в приведенных ниже разделах.

Шаг 1 Шаг 2 Шаг 3 Шаг 4
Логотип Visual Studio Логотип Unity Значок Unity Логотип МРТК
Скачивание новейших средств Обновление проекта Unity Компиляция для ARM Миграция в MRTK версии 2

Предварительные требования

Настоятельно рекомендуется использовать систему управления версиями для сохранения снимка первоначального состояния приложения до начала переноса. Также рекомендуется в разное время сохранять состояния контрольных точек в ходе выполнения процесса. Может быть полезным, если вы откроете еще один экземпляр исходного приложения в Unity, чтобы вы могли выполнять сравнение в ходе портирования.

Примечание

Перед переносом убедитесь, что установлены последние версии средств разработки для Windows Mixed Reality. Для большинства разработчиков HoloLens это последняя версия Visual Studio 2019 и соответствующий пакет SDK для Windows. Подробное описание различных версий Unity и набора средств для смешанной реальности (MRTK) версии 2 представлено далее.

Дополнительные сведения см. в статье Установка инструментов.

Перенос проекта в последнюю версию Unity

Если вы используете MRTK версии 2, перед обновлением проекта до Unity 2020.3 LTS рекомендуется обновить до MRTK до версии 2.7. MRTK 2.7 поддерживает Unity 2018, 2019 и 2020, что позволяет обеспечить готовность проекта к использованию Unity 2020 даже перед обновлением Unity. Оцените все зависимости от подключаемых модулей, которые существуют в проекте, а также определите возможность сборки этих библиотек DLL для ARM64. Если в проекте есть жесткая зависимость от подключаемого модуля ARM, возможно, потребуется сохранить для приложения платформу ARM.

Обновление параметров сцены или проектов в Unity

После обновления до Unity 2020.3 LTS рекомендуется изменить определенные параметры в Unity, чтобы получить оптимальные результаты на устройстве. Подробное описание этих параметров см. в статье Рекомендуемые параметры для Unity.

Еще раз подчеркнем, что серверная часть скриптов .NET помечена как нерекомендуемая в Unity 2018 и удалена, начиная с Unity 2019. Мы настоятельно рекомендуем перевести проект на IL2CPP.

Примечание

Сервер сценариев IL2CPP может увеличить время сборки из Unity в Visual Studio. Разработчики должны настроить свои компьютеры разработки для оптимизации времени сборки IL2CPP. Кроме того, возможно, будет полезно настроить сервер кэширования, особенно для проектов Unity с большим объемом ресурсов (за исключением файлов скриптов) либо постоянно меняющимися сценами или ресурсами. Когда открывается проект, Unity сохраняет соответствующие ресурсы в формате для внутреннего кэша на компьютере разработчика. Измененные элементы нужно повторно импортировать и еще раз обработать. Этот процесс можно выполнить однократно, сохранить на сервере кэширования, а затем совместно использовать с другими разработчиками для экономии времени. При этом каждому разработчику не придется обрабатывать повторный импорт изменений локально.

Разобравшись с критическими изменениями, которые возникли после перехода на обновленную версию Unity, выполните сборку и тестирование текущих приложений для HoloLens (1-го поколения). Кроме того, это подходящий момент для создания и сохранения фиксации в системе управления версиями.

Компиляция зависимостей или подключаемых модулей для процессора ARM

Приложения для HoloLens (1-го поколения) выполнялись на 32-разрядных (x86) процессорах. HoloLens 2 использует процессор ARM. Существующие приложения HoloLens нужно перенести для поддержки ARM. Как отмечалось ранее, Unity 2018 LTS поддерживает компиляцию для приложений ARM32, а Unity 2019.x и более поздние версии — для приложений ARM32 и ARM64. Рекомендуется разрабатывать приложения ARM64, так как их производительность существенно выше. Но в таком случае все зависимости подключаемого модуля также должны быть созданы для ARM64.

Просмотрите все зависимости от библиотеки DLL в приложении. Рекомендуется удалить зависимости, которые больше не нужны для проекта. Для остальных необходимых подключаемых модулей примите соответствующие двоичные файлы ARM32 и ARM64 в проекте Unity.

Когда будут приняты соответствующие библиотеки DLL, создайте решение Visual Studio в Unity и скомпилируйте приложение AppX для ARM в Visual Studio, чтобы проверить, можно ли создать его для процессоров ARM. Мы рекомендуем сохранить это приложение как фиксацию в системе управления версиями.

Важно!

Приложения, использующие MRTK версии 1, можно запускать на HoloLens 2 после изменения целевой платформы сборки на ARM при условии соблюдения всех других требований. К ним относится наличие ARM-версий для всех ваших подключаемых модулей. Но при этом ваше приложение не будет иметь доступа к специальным функциям HoloLens 2, таким как точное отслеживание движений рук и глаз. MRTK версии 1 и MRTK версии 2 имеют разные пространства имен, что позволяет использовать обе версии в одном проекте. Это может быть полезно при переходе от одной версии к другой.

Обновление до MRTK версии 2

МРТК версии 2 — это новый набор средств на основе Unity, который поддерживает как HoloLens (1-го поколения), так и HoloLens 2. Именно в него были добавлены все новые возможности HoloLens 2, такие как взаимодействие с помощью рук и отслеживание глаз.

Дополнительные сведения об использовании MRTK версии 2 см. в следующих ресурсах:

Подготовка к миграции

Перед приемом новых файлов *.unitypackage для MRTK версии 2 мы рекомендуем составить список 1) пользовательского кода, который интегрируется с MRTK версии 1 и 2) пользовательского кода для взаимодействия с входными данными или для компонентов интерфейса. Наиболее распространенные конфликты при освоении возможностей MRTK версии 2 для разработчиков в сфере смешанной реальности касаются методов ввода и взаимодействия. Мы рекомендуем вам ознакомиться с моделью ввода MRTK v2.

Наконец, в новом решении MRTK версии 2 реализован переход с модели скриптов и объектов управления в сцене на архитектуру конфигурации и поставщика служб. В результате формируется более четкая иерархия и архитектурная модель. Но для этого нужно изучить новые профили конфигурации. Изучите руководство по настройке Mixed Reality Toolkit, чтобы приступить к ознакомлению с важными параметрами и профилями, которые нужно адаптировать к требованиям вашего приложения.

Перенос проекта

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

Дополнительные сведения об определенных различиях между API для HTK/MRTK и MRTK версии 2 приведены в руководстве по переносу на вики-сайте MRTK версии 2.

Рекомендации

  • Предпочтение отдайте стандартному шейдеру MRTK.
  • Одновременно обрабатывайте только один тип критических изменений (например, IFocusable со значением IMixedRealityFocusHandler).
  • Выполняйте проверку после каждого изменения и используйте систему управления версиями.
  • По возможности используйте стандартные элементы MRTK для взаимодействия с пользователем (кнопки, баннеры и т. д.).
  • Не изменяйте файлы MRTK напрямую. Создайте оболочки для компонентов MRTK.
    • Это упрощает дальнейший прием данных и обновление MRTK.
  • Просмотрите и изучите примеры сцен в MRTK, особенно HandInteractionExamples.scene.
  • Модифицируйте структуру пользовательского интерфейса на основе холста, используя четырехугольники, коллайдеры и текст TextMeshPro.
  • Включите общий доступ к буферу глубины или задайте точку фокусировки. Используйте 16-разрядный буфер глубины, чтобы повысить производительность. Убедитесь, что при рендеринге цвета также выполняется рендеринг глубины. Как правило, Unity не изменяет данные глубины для прозрачных и текстовых игровых объектов.
  • Выберите Single Pass Instanced Rendering (Однопроходная отрисовка экземпляра).
  • Примените профиль конфигурации HoloLens 2 для MRTK.

Тестирование приложения

В MRTK версии 2 вы можете имитировать взаимодействие с помощью рук непосредственно в Unity, а также выполнять разработку с новыми интерфейсами API для реализации взаимодействия с помощью рук и отслеживания глаз. Для создания оптимального пользовательского интерфейса требуется устройство HoloLens 2. Мы рекомендуем изучить документацию и инструменты, чтобы составить представление о них. MRTK версии 2 поддерживает разработку для устройств HoloLens (1-го поколения). Традиционные модели ввода (например, выбор элемента касанием) можно тестировать на HoloLens (1-го поколения).

Обновление модели взаимодействия для HoloLens 2

Внимание!

Если в проекте используются какие-либо API XR.WSA, в будущих выпусках Unity они будут выведены из эксплуатации и заменены новыми API ввода XR Unity. Дополнительные сведения об API-интерфейсах ввода XR см. здесь.

После переноса приложения и его подготовки к работе с HoloLens 2 можно приступить к обновлению модели взаимодействия и расположения макетов голограмм. В приложении, разработанном для HoloLens (1-го поколения), по всей вероятности, реализована модель взаимодействия с помощью направления взгляда с подтверждением. Она используется при взаимодействии с голограммами, расположенными на удалении, чтобы они могли поместиться в поле зрения.

Шаги по обновлению структуры приложения для максимальной адаптации к HoloLens 2:

  1. Компоненты MRTK. Если вы добавили MRTK версии 2, можно использовать различные компоненты и скрипты, которые разработаны и оптимизированы для HoloLens 2.
  2. Модель взаимодействия. Рекомендуется обновить модель взаимодействия. В большинстве случаев мы рекомендуем перейти с модели взаимодействия с помощью взгляда с фиксацией на модель взаимодействия с помощью рук. Для голограмм, которые оказываются за пределами досягаемости, используются лучи, указывающие на предмет при удаленном взаимодействии, и жесты захвата.
  3. Размещение голограмм: когда вы перейдете на модель взаимодействия с помощью рук, мы рекомендуем переместить некоторые голограммы ближе, чтобы пользователи могли взаимодействовать с ними с помощью жестов захвата руками для близкого взаимодействия. Типы голограмм, которые можно переместить ближе для непосредственного захвата или взаимодействия:
  • небольшие целевые меню;
  • controls
  • кнопки
  • небольшие голограммы, которые при захвате и проверке помещаются в поле зрения HoloLens 2.

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

Дополнительные советы по переносу приложений с архитектуры x86 на ARM

  • Базовые приложения Unity просты. Вы можете создать пакет приложений ARM или выполнить развертывание непосредственно на устройстве для запуска пакета. Некоторые собственные подключаемые модули Unity могут вызывать определенные проблемы при разработке. Поэтому необходимо обновить все собственные подключаемые модули Unity до версии Visual Studio 2019, а затем повторно выполнить сборку для ARM.

  • Одно приложение использовало подключаемый модуль Wwise для Unity AudioKinetic. Используемая версия Unity не имела подключаемого модуля ARM для UWP, при этом были приложены значительные усилия для внедрения аудиовозможностей в это приложение для выполнения на архитектуре ARM. Убедитесь, что все необходимые подключаемые модули для планов разработки установлены и доступны в Unity.

  • Иногда для подключаемых модулей, требующихся приложению, может не быть подключаемых модулей UWP или ARM. Это препятствует переносу приложения и его запуску на HoloLens 2. Обратитесь к поставщику подключаемого модуля, чтобы устранить проблему и обеспечить поддержку ARM.

  • Элементы minfloat (и их разновидности, такие как min16float, minint и т. д.) в шейдерах могут по-разному действовать на HoloLens 2 и HoloLens (1-го поколения). Но при этом гарантируется, что по крайней мере будет использоваться указанное количество битов. Графические процессоры Intel и Nvidia преимущественно обрабатывают minifloat как 32-битные. В ARM будет использоваться фактическое количество битов. На практике эти показатели будут менее точными, или диапазон на HoloLens 2 будет меньше, чем на HoloLens (1-го поколения).

  • Инструкции _asm не будут работать в ARM. Поэтому потребуется переписать все строки кода, где используются инструкции _asm.

  • ARM не поддерживает набор инструкций SIMD, потому что в ARM отсутствуют некоторые заголовки, такие как xmmintrin.h, emmintrin.h, tmmintrin.h и immintrin.h.

  • Компилятор построителя текстуры запускается в ARM во время первого вызова метода рисования после загрузки построителя текстуры или при изменении объекта, от которого зависит построитель, не во время его загрузки. Влияние на частоту кадров может быть заметным в зависимости от того, сколько шейдеров необходимо скомпилировать, и это определяет способ обработки, упаковки и обновления шейдеров для HoloLens 2 по сравнению с HoloLens (1-го поколения).

См. также статью