Первый взгляд на разработку приложений для Apple Vision Pro в Unity

После последнего мероприятия Unite компания Unity выпустила в открытом бета-тестировании инструменты для разработки приложений для Apple Vision Pro. Этими инструментами могут пользоваться только владельцы Unity Pro или Enterprise, но документация находится в открытом доступе для всех желающих.

В нашей компании есть подписка на Unity Enterprise, так что очень скоро появится возможность поработать с SDK... надеюсь сделать для вас свой классический туториал по разработке приложения с кубом для этой новой платформы. Пока же я ознакомился с доступной документацией и думаю, что уже сейчас стоит рассказать вам о некоторых интересных моментах, которые я узнал о разработке Apple Vision Pro в Unity.

Общие впечатления

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

Разработка для Vision Pro

Судя по документации, команды Unity и Apple работали вместе, чтобы разработка для этой новой платформы была максимально приближена к разработке для других платформ. Unity — кроссплатформенный движок, и одна из причин его популярности заключается в том, что теоретически, создав игру для одной платформы (например, ПК), ее можно собрать и развернуть на всех остальных платформах (например, Android, iOS). Мы, разработчики Unity, знаем, что на 100% так не бывает, обычно требуется несколько небольших доработок, чтобы все работало на всех платформах, но в целом это почти так. Это преимущество не только для разработчика, который может проделать тяжелую работу только один раз, но и для владельцев платформы: если бы разработка для Vision Pro требовала переписывания приложений с нуля, многие команды не имели бы на это ресурсов и пропустили бы Vision Pro, сделав экосистему Apple бедной.

Первый взгляд на разработку приложений для Apple Vision Pro в Unity
Первый взгляд на разработку приложений для Apple Vision Pro в Unity

Поэтому очень важно, чтобы разработка под новую платформу имела общие основы с разработкой под другие платформы. По сути, и при разработке для Apple используются те же базовые инструменты, что и для других XR-платформ: такие ключевые слова, как URP, XR Interaction Toolkit, New Input System, AR Foundation, Shadergraph, должны быть знакомы всем разработчикам XR. И это очень хорошо.

Я также должен сказать, что при чтении различной документации многие вещи напомнили мне о том, как я занимался разработкой интерфейса для HoloLens 1: я думаю, что Apple черпала вдохновение из работы, проделанной Microsoft при разработке своего SDK. Это также помогло мне понять, насколько Microsoft опередила свое время (и своих конкурентов), создав HoloLens, и как много наработок она выкинула на свалку, закрыв свое подразделение Mixed Reality.

Типы возможностей

На Apple Vision Pro можно запускать три типа приложений
На Apple Vision Pro можно запускать три типа приложений

На Apple Vision Pro можно запускать три типа приложений:

  • VR-эксперименты Эксклюзивный опыт MR (запущенный процесс является единственным в данный момент) 
  • Совместный опыт MR (запущенный процесс выполняется одновременно с другими) 
  • 2D-окна (приложение для iOS в плавающем окне).

Разработка VR-приложений для Apple Vision Pro очень похожа на разработку для других платформ. В данном случае мантра Unity «создай один раз — разверни везде» работает вполне успешно. И это фантастика. Создание MR-опыта, напротив, сопряжено со многими изменениями: базовые инструменты используются те же, что и в других MR-платформах, но фактическая реализация совершенно иная. Я думаю, что перенос существующего MR-опыта с другой платформы (например, HoloLens) на Vision Pro потребует серьезного рефакторинга. И это не самый лучший вариант. Я надеюсь, что в будущем Apple усовершенствует эту часть.

Документация и форумы

Компании Unity и Apple совместно выпустили приличную документацию для новой платформы. Ее вполне достаточно для начала работы. Кроме того, на Unity Discussions есть специальный форум, посвященный разработке Vision Pro. Побродив по форуму, можно почерпнуть интересную информацию. Прежде всего, интересно отметить, что первые сообщения были опубликованы 17 июля, и в них упоминается о том, что содержащаяся в них информация не может быть передана посторонним. Это означает, что первые разработчики-партнеры получили закрытую бета-версию уже 4 месяца назад: Unity постепенно распространяет SDK среди разработчиков. Сначала он распространялся только среди партнеров, теперь только среди подписчиков Pro, и, возможно, позже будет открыт для всех. Это нормальный процесс: SDK очень сложно создавать (я сам в этом убеждаюсь), поэтому важно контролировать их распространение, предоставляя их большему количеству людей только тогда, когда качество их работы станет более стабильным.

 

Внутренние тесты с Vacation Simulator и Vision Pro (что, конечно, не гарантирует запуск игры на нем, но... дает нам надежду)
Внутренние тесты с Vacation Simulator и Vision Pro (что, конечно, не гарантирует запуск игры на нем, но... дает нам надежду)

На форумах можно увидеть несколько известных имен в нашей экосистеме, потому что, конечно, все мы в области XR хотим поэкспериментировать с этим новым устройством. Например, мне бросилось в глаза имя разработчика из Owlchemy Labs, который, похоже, проводит внутренние тесты с Vacation Simulator и Vision Pro (что, конечно, не гарантирует запуск игры на нем, но... дает нам надежду). Думаю, что все самые известные XR студии уже работают с этим устройством.

Запуск проектов

Компания Apple уже открыла регистрацию на получение девайса, чтобы разработчики могли приступить к работе с ним. Количество девайсов очень ограничено, поэтому я думаю, что пока они выдаются только партнерам Apple и наиболее перспективным студиям. В сообщении от Owlchemy выше инженер упоминает о тестировании на устройстве, так что, похоже, у Owlchemy уже есть устройство, на котором можно тестировать. Что вполне объяснимо, ведь это одна из лучших студий, работающих с XR.

Все мы, те, кто еще не получил устройство, можем провести тесты с помощью эмулятора Apple Vision Pro
Все мы, те, кто еще не получил устройство, можем провести тесты с помощью эмулятора Apple Vision Pro

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

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

Это видео дает хорошее техническое представление о разработке Vision Pro:

Видео файл
Это видео дает хорошее техническое представление о разработке для Apple Vision Pro

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

Вот требования для разработки под Apple Vision Pro:

  • Unity 2022.3 LTS
  • Mac на базе Apple Silicon (компьютеры Mac на базе Intel будут совместимы позже)
  • XCode 15 Beta 2

Что касается используемых функций Unity:

  • Настоятельно рекомендуется использовать URP. Некоторые вещи могут работать и со стандартным конвейером рендеринга, но все обновления будут делаться с учетом URP
  • Пакет систем ввода, т. е. новая система ввода для проработки ввода
  • XR Interaction Toolkit для управления основами XR-опыта.

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

Unity + среда исполнения Apple

При запуске приложений Unity на Vision Pro происходит интеграция между игровым движком и средой исполнения ОС. 

Как Unity работает с RealityKit для создания смешанной реальности
Как Unity работает с RealityKit для создания смешанной реальности

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

Управление вводом

Определение ввода происходит через XR Interaction Toolkit + New Input System, так что используются инструменты, которые мы, разработчики Unity XR, уже хорошо знаем. Добавлены некоторые предопределенные действия для определения взаимодействий, характерных для Apple Vision Pro (например, взгляд + щипок).

Приложения на Vision Pro не используют контроллеры, а только руки. Согласно документации, при использовании XR Interaction Toolkit система может абстрагироваться от факта использования рук и просто работать с обычным механизмом hover/select/activate, который мы применяем при использовании контроллеров. Я хотел бы проверить это на практике, но если это так, то это было бы замечательно, поскольку означало бы, что большинство базовых взаимодействий при использовании контроллеров (например, наведение на кнопку меню и ее нажатие) будут работать без особых модификаций с помощью Vision Pro и отслеживания рук.

Кадр Rec Room с полноценным движением рук взят из обучающего видео Vision Pro. Думаю, что это уже версия Rec Room, работающая на Apple Device.
Кадр Rec Room с полноценным движением рук взят из обучающего видео Vision Pro. Думаю, что это уже версия Rec Room, работающая на Apple Device.

Помимо обнаружения системных жестов (например, щипок + взгляд) с помощью системы ввода или использования инструментария XR Interaction Toolkit для абстрагирования высокоуровневых взаимодействий, существует и третий способ реализации ввода. Таким способом является пакет XR Hands, который обеспечивает кроссплатформенное отслеживание рук. На низком уровне руки отслеживаются с помощью ARKit, а данные отслеживания абстрагируются с помощью XR Hands, что позволяет разработчику получить доступ к положению всех суставов обеих рук. Apple утверждает, что именно таким образом компания Rec Room смогла сделать руки для своих аватаров на Vision Pro.

Отслеживание движения глаз

В Apple Vision Pro встроена высокоточная система отслеживания взгляда. Однако из соображений конфиденциальности Apple не позволяет разработчику получить доступ к данным о взгляде. Единственный момент, когда разработчик имеет доступ к результатам отслеживания взгляда, — это кадр, когда пользователь смотрит на элемент и нажимает на него (и только в том случае, если приложение запущено в режиме «unbounded»).

Static Foveated Rendering рендерит центральную часть изображения с более высоким качеством
Static Foveated Rendering рендерит центральную часть изображения с более высоким качеством

Но даже когда Apple ограничивает доступ к данным отслеживания взгляда, она все равно позволяет использовать их в своих приложениях. Например, жест «взгляд+прищур» абстрагируется в приложении как «щелчок». А если вы хотите перемещать объекты по движению глаз, есть специальный скрипт, который делает это автоматически: поместив этот скрипт на объект с коллайдером, вы убедитесь, что элемент будет автоматически выделен ОС, когда на него посмотрят глаза пользователя. Я немного озадачен тем, как это автоматическое выделение работает в отношении материалов объекта, и я буду исследовать это, когда проведу более практические тесты (надеюсь, когда-нибудь и на реальном устройстве)

Фовеативный рендеринг

Apple упоминает Foveated Rendering как один из способов, с помощью которого Vision Pro удается создавать впечатляющие эффекты, которые так хорошо смотрятся на устройстве. Я бы добавил, что при таком огромном разрешении экрана рендеринг с фовеацией просто необходим, чтобы не расплавить GPU устройства.

Пока Apple говорит только о Fixed Foveated Rendering (также называемом Static Foveated Rendering), который используется в Quest: при FFR центральная часть дисплеев рендерится с максимальным разрешением, а периферийные — с меньшим. FFR предполагает, что пользователь в основном смотрит глазами перед собой. Учитывая высокую стоимость устройства и качество трекинга глаз, я предполагаю, что в будущем они перейдут на более качественный «динамический» foveated-рендеринг, при котором устройство будет рендерить с максимальным разрешением именно ту часть экрана, на которую вы смотрите. Динамический фовеатный рендеринг лучше, поскольку при использовании FFR вы замечаете ухудшение визуального восприятия, когда смещаете взгляд и смотрите на переферию экрана.

Функции AR трекинга

Помимо отслеживания движения глаз и рук, Vision Pro также предлагает функцию отслеживания изображения. Я нашел упоминание об этом в одном из параграфов актуальной документации. Отслеживание изображений — это очень популярная стратегия AR, позволяющая размещать контент поверх некоторых предварительно заданных изображений, которые определяются как «маркеры». В этом режиме система может определять положение и поворот известного изображения в физическом мире, что позволяет накладывать на него 3D-объекты. Это одна из первых разновидностей AR, получившая распространение благодаря Vuforia и Metaio.

Разработка VR-иммерсивных впечатлений

Если вы уже используете те основы, которые я указал выше, перенести VR-приложение на Vision Pro довольно просто. Unity запускает VR-приложения на Vision Pro непосредственно поверх Metal (для рендеринга) и ARKit (для отслеживания движения глаз/рук/etc).

Единственное, что необходимо для запуска вашего опыта на Vision Pro, — это установить платформу VisionOS и указать запуск проекта поверх Apple VisionOS в XR Plugin Management. Это соответствует тому, что мы уже делаем на всех других платформах.

Вы просто активируете Vision Pro, как активируете другие устройства, например, Quest!
Вы просто активируете Vision Pro, как активируете другие устройства, например, Quest!

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

Это один из моментов, который напомнил мне о разработке HoloLens: чтобы создать UWP-приложение, нужно было создать решение Visual Studio, в котором и создавалось конечное приложение для устройства.

При создании VR-приложений для Vision Pro есть несколько ограничений:

  • Необходимо проверить совместимость шейдеров с Metal
  • Приходится перекомпилировать родные плагины для VisionOS и молиться, чтобы они заработали • Необходимо использовать однопроходный инстансный рендеринг
  • Необходимо убедиться, что в буфере глубины для каждого пикселя задана корректная глубина, поскольку она используется для алгоритмов репроекции на устройство (то, что делает и Meta). Это означает, что все шейдеры должны участвовать в записи в буфер глубины. Это может стать проблемой при использовании стандартных скайбоксов, поскольку скайбокс обычно отображается «на бесконечности» и имеет нулевое значение. Команда Unity уже позаботилась о том, чтобы все стандартные шейдеры, включая Skyboxes, записывали такое значение. Для собственных шейдеров вам придется проделать эту работу самостоятельно.
  • Необходимо проверить совместимость всего, что вы используете в целом

Все это означает, что перенос VR-приложения на Vision Pro должен быть достаточно тривиальным. 

Для лучшего воспроизведения системе необходима карта глубины окружения.
Для лучшего воспроизведения системе необходима карта глубины окружения.

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

Разработка иммерсивных эффектов смешанной реальности

Разработка приложений смешанной реальности на Vision Pro гораздо сложнее, чем в случае с VR, и может потребовать серьезного рефакторинга существующего приложения.

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

Существует два типа смешанной реальности:

  • Ограниченный: ограниченный опыт — это опыт, который происходит в кубической области вашей комнаты. Опыт просто работает в своих границах, и поэтому он может работать вместе с другими опытами, которые находятся в вашей комнате, каждый из которых находится в своем маленьком кубике. Ограниченные впечатления можно представить как виджеты в вашей комнате. Они имеют ограниченные возможности интерактивности.
  • Неограниченный: неограниченный опыт происходит вокруг вас, используя всю мощь AR/MR. Конечно, одновременно может работать только один неограниченный опыт, но вместе с ним могут работать и ограниченные виджеты. Неограниченные приложения — это классические приложения MR, поддерживающие все формы ввода.

Это различие также очень напоминает мне времена HoloLens, потому что там было точно так же: вы могли запускать множество 2D-виджетов вместе, но только один захватывающий 3D-эффект за раз.

Некоторые опыты происходят вокруг пользователя, другие - в определенном месте.
Некоторые опыты происходят вокруг пользователя, другие - в определенном месте.

Какой бы опыт вы ни хотели создать, вам придется установить не только платформу VisionOS, но и плагин Polyspatial, который гарантирует, что ваше приложение сможет работать поверх RealityKit. А плагин Polyspatial, как я уже говорил, имеет ооооооооочень много ограничений. Некоторые из них на первый взгляд кажутся просто безумными: даже стандартная камера Unity Camera не поддерживается этим плагином!

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

Если играть в игру, в которой вы пьете за каждую неподдерживаемую функцию, то можно напиться за 5 минут
Если играть в игру, в которой вы пьете за каждую неподдерживаемую функцию, то можно напиться за 5 минут

И дело не только в скриптах: не все шейдеры поддерживаются. Шейдеры должны быть переведены из Unity в MaterialX, чтобы их можно было использовать в RealityKit, но RealityKit не поддерживает все те возможности, которые есть в Unity. Основные стандартные шейдеры уже совместимы с Unity, но, например, нет поддержки пользовательских шейдеров ShaderLab. Пользовательские шейдеры можно создавать только через ShaderGraph (простите, поклонники Amplify), да и то не все узлы ShaderGraph поддерживаются.

Я не буду расписывать здесь все ограничения (их можно найти в документации), но достаточно сказать, что из всей документации по разработке под VisionOS есть 2 страницы про VR-разработку и, пожалуй, 10 про Polyspatial. Из этого видно, насколько сложнее привыкнуть к новой среде разработки.

Рабочий процесс разработки (разработка, сборка, тестирование)

Целевой объект сборки VisionOS
Целевой объект сборки VisionOS

Говоря о том, как разрабатывать приложение для Vision Pro, следует добавить еще несколько деталей:

  • Unity предоставляет шаблонный проект, в котором можно увидеть пример рабочего проекта, правильно настроенного для всех основных целей: VR, связанный MR, несвязанный MR и т. д...
  • Есть очень интересный Project Validator, который в виде предупреждающего знака отмечает в проекте все компоненты, которые были использованы, но не совместимы с Polyspatial. Это очень удобно для того, чтобы заметить проблемы еще до того, как попытаться собрать приложение. Я думаю, что все платформы должны иметь нечто подобное.

Что касается сборки и тестирования:

  • Приложения VisionOS в Unity поддерживают режим Play Mode (разумеется), поэтому вы можете нажать кнопку play, чтобы провести предварительное тестирование в редакторе. В любом случае это просто тестирование логики работы приложения в редакторе, что является очень базовым тестом. Есть замечательная функция, позволяющая записывать игровые сеансы, чтобы потом воспроизвести их без необходимости снова вводить те же данные, что и в прошлый раз... Это очень удобно для отладки.
  • Если вы хотите провести тестирование на устройстве, но без сборки, вы можете воспользоваться функцией «Play To Device», которая выполняет удаленный рендеринг приложения на вашем компьютере и передает визуальные данные на гарнитуру Vision Pro или эмулятор. Гарнитура обеспечивает отслеживание и визуализацию, но логика и рендеринг выполняются в Unity. Это похоже на использование Virtual Desktop для VR-игр, транслируемых с компьютера на гарнитуру Quest. Play To Device — это хороший гибридный тест, но, конечно, не полноценный, поскольку приложение все равно запускается на вашем Mac в безопасной среде Unity. 
Ограниченный опыт работы на симуляторе Apple Vision Pro
Ограниченный опыт работы на симуляторе Apple Vision Pro
  • В реальном режиме работы обычно обнаруживается множество новых проблем. Но пользоваться этой функцией все равно очень удобно. Я уже в который раз говорю, что эта программа напоминает мне HoloLens: у Microsoft была такая функция для HoloLens 1 в Unity, и называлась она что-то вроде Holographic Remoting. Я помню, что она была очень глючной, но все равно экономила кучу времени, потому что сборка проекта в Visual Studio (если говорить о HoloLens, то здесь это XCode), его пересборка и развертывание на внешнем устройстве занимали буквально вечность.
  • Когда приложение достаточно протестировано в редакторе, его можно собирать. Для сборки требуется собрать приложение для платформы VisionOS, которая помечена как «экспериментальная», что означает, что Unity не рекомендует сейчас собирать на ней все, что может пойти в производство (а риск этого отсутствует, поскольку Vision Pro еще не выпущен). Сборка для VisionOS представляет собой проект XCode. Разработчику остается взять XCode-проект, собрать его в XCode и развернуть либо на эмуляторе, либо на устройстве.
  • Если у вас нет Vision Pro или он есть, но вы не хотите тратить время на развертывание собранного приложения на устройстве, вы можете протестировать его в эмуляторе Vision Pro. Эмулятор очень удобен (например, позволяет опробовать приложение в разных комнатах), но, конечно, имеет ограничения, поскольку это эмулятор. 
В симуляторе Vision Pro вы можете попробовать свои виртуальные объекты в различных средах
В симуляторе Vision Pro вы можете попробовать свои виртуальные объекты в различных средах
  • Одним из текущих ограничений является то, что некоторые данные отслеживания ARKit не предоставляются, поэтому некоторые объекты не могут быть помещены в нужное место, как хотелось бы. Тестирование на устройстве — единственный способ убедиться, что все действительно работает.

Дополнительные ссылки

Некоторые важные ссылки для начала разработки Vision Pro:

Заключительный комментарий

Я думаю, что это здорово, что наконец-то появились инструменты для разработки Apple Vision Pro. Конечно, этот SDK находится в самом начале своего пути, поэтому я ожидаю, что он будет полон ошибок и в нем будет отсутствовать множество функций. Но мы, разработчики, можем приложить к нему руки и начать создавать прототипы, и это здорово!

Aspertin
На сайте с

Комментарии

Еще нет комментариев.


Для участия в обсуждении нужно зарегистрироваться или войти со своей учетной записью.


Войти с помощью: