Как команда из шести человек перенесла LEGO® Builder's Journey на Apple Vision Pro всего за три месяца

Начиная с Apple Arcade, LEGO Builder's Journey от Light Brick Studio, захватывающая мультиплатформенная игра-головоломка, постоянно набирает обороты. Вот что узнала команда, когда приняла новую эру пространственных вычислений и перенесла название на Apple Vision Pro.
Как студия, которая только начинает работать со смешанной реальностью, может создать ее для погружения в Apple Vision Pro, сохраняя при этом верность игровому процессу на других платформах?
Поскольку кирпичики LEGO® - это реальные физические продукты, Light Brick Studio осознавала сложность создания опыта, в котором игроки взаимодействуют с игровыми элементами в комнате. При выпуске игры для Apple Vision Pro время также было ограничено. Если другие порты платформ с 2D-интерфейсами команда выполняла в течение месяца или двух, то для этого нового направления пространственных вычислений трехмесячный срок был слишком мал.
This content is hosted by a third party provider that does not allow video views without acceptance of Targeting Cookies. Please set your cookie preferences for Targeting Cookies to yes if you wish to view videos from these providers.
Навигация по новому измерению
"Как только вы узнаете границы платформы для игры и ее геймплейный дизайн, вы сможете создать практически любой вид опыта, который захотите", - объясняет Миккель Фредборг, технический руководитель Light Brick Studios.
Для команды перенос игры на visionOS был "в основном технической задачей - обеспечить ее плавную работу и затем использовать все преимущества". Это означало проведение множества технических переделок, включая полную переработку пользовательского интерфейса (UI), чтобы разместить некогда плоские элементы UI в комнате. Команде также пришлось обновить инструменты и методы рендеринга, чтобы обеспечить визуальное качество и реалистичность конечного продукта. Параллельная балансировка систем Unity и RealityKit создала дополнительные препятствия для оптимизации производительности.
"Мы делали много разных портов, и этот был самым сложным, потому что Apple Vision Pro сильно отличается от других платформ", - говорит Карстен Лунд, управляющий директор Light Brick Studio. "Мы рассчитывали увидеть, как далеко мы сможем зайти в этом опыте, и все получилось очень хорошо".
Результаты
- Создал 80 уровней игры и 60 353 кирпича LEGO для Apple Vision Pro менее чем за 100 дней
- Благодаря поддержке команды Unity PolySpatial удалось избежать нескольких недель задержки разработки.
- Все игровые области остались нетронутыми, были произведены лишь специфические оптимизации производительности, но без изменений общего хода игры
- Реализован плавный переход с открытым стилем смешанной реальности, который становится все более захватывающим по мере продвижения игрока
Nintendo Switch — зарегистрированная торговая марка Nintendo.

Переработка пользовательского интерфейса и дизайна игрового процесса
LEGO Builder's Journey имеет минимальный пользовательский интерфейс, содержащий не более 20 кнопок для таких действий, как загрузка сохраненных игр и перезапуск уровня, поэтому переделать его было не так сложно, как это было бы сделано для многих игр. Они переделали UI в Unity, взяв GameObjects и прикрепив к ним коллайдеры, чтобы обеспечить правильную работу ввода, подражая при этом языку дизайна visionOS.
Команда также должна была учитывать гибкость движений тела. За исключением пользовательского интерфейса, все в игре построено из кирпичиков LEGO в инструменте под названием LEGO Digital Designer. Команда всегда пыталась смоделировать 3D-пространство в 2D-поверхности, но в Apple Vision Pro им пришлось учитывать тот факт, что игрок может перемещаться куда угодно. Для того чтобы создать полноценный 360-градусный эффект, команда переработала существующие модели, предназначенные для просмотра только под определенными углами, чтобы не было никаких дыр в геометрии модели. Чтобы уменьшить количество вызовов рисования, несколько сеток также были объединены в один GameObjects.
Фредборг говорит: "Мы смогли учесть, что игрок может ходить по всему периметру, а затем провести полную оптимизацию модели на 360 градусов. Мы избавились от всей геометрии, которая была внутри кирпичей, когда импортировали их в игру, поэтому мы удалили все детали интерьера, так как вы никогда их не увидите. Мы смогли воспользоваться имеющимися у нас автоматизированными инструментами и настроить их на работу с полноценной симуляцией".

Управление размещением в режиме Bounded
На ранних этапах команда решила разрабатывать проект в режиме Bounded, где они должны были действовать в пределах определенного объема. Если они пытались работать за пределами этого объема, элементы обрезались и оставались незамеченными. Они решили использовать ограничения режима Bounded, в котором нет никакой информации о положении/ориентации головы, глаз или рук игрока, пока не будет выполнено взаимодействие. Как только игрок выполняет жест щипка, игра понимает, где находится рука и с каким объектом происходит взаимодействие. Когда пинч заканчивается, заканчивается и информация. В этом смысле он похож на сенсорный экран, где вы знаете, что делает игрок, только когда он касается экрана.
"Мы не знали, на что смотрят люди, что было большим изменением, особенно учитывая, что наш геймплей требует, чтобы игроки смотрели на кирпич, чтобы выбрать его", - говорит Фредборг. "Как только мы преодолели все эти границы, он стал работать очень хорошо и отлично вписался в систему. В итоге оказалось, что работать таким образом очень приятно, поскольку все идет в одном и том же направлении".
This content is hosted by a third party provider that does not allow video views without acceptance of Targeting Cookies. Please set your cookie preferences for Targeting Cookies to yes if you wish to view videos from these providers.
Помощь шейдерам MaterialX
В самых ранних версиях LEGO Builder's Journey команда использовала собственную версию облегченного конвейера рендеринга Unity (LWRP), а затем перешла на конвейер рендеринга высокого разрешения(HDRP) для портов Xbox и PlayStation. Для Apple Vision Pro пришлось сначала преобразовать все в Universal Render Pipeline(URP) и Shader Graph, а затем перенести в Apple RealityKit.
Для этого они перевели шейдеры, созданные в Shader Graph, в шейдеры MaterialX, которые можно загрузить в RealityKit. Но команда столкнулась с трудностями, обнаружив, что результаты не очень хорошо оптимизированы и требуют больше работы, чем предполагалось.
Они планировали провести ручную оптимизацию, но обнаружили, что для масштабирования им необходимо автоматизировать процесс. Они вручную исправляли шейдеры, находили дублирующийся код, а затем заменяли этот участок кода, чтобы он выполнялся только один раз. "Было непросто наладить бесперебойную работу", - признается Фредборг, - "но я считаю, что команда PolySpatial отлично справляется со своей задачей, продвигаясь вперед и оптимизируя работу".

Поиск оптимального освещения
Из-за сжатых сроков создания игры им пришлось искать решения на ходу. "Нам пришлось искать решения, чтобы повысить реалистичность игры и при этом поддерживать Realtime Lights and Shadows", - говорит Фредборг. "Это было одним из самых значительных изменений".
Сначала они взяли освещение на основе изображения из Apple Vision Pro, чтобы правильно добавить его к материалам, которые они хотели включить, таким как пластик и различные вариации. Им пришлось решать такие сложные для устранения проблемы, как отпечатки пальцев и царапины на кирпичах.
Поскольку игра изначально разрабатывалась для ранних моделей iPhone, в ней очень простое освещение. Команда использовала объемную текстуру - 3D-текстуру с заложенной в нее окклюзией окружающего мира, - чтобы можно было брать образцы из любой точки сцены. Они брали образцы точек и анализировали, насколько сильна окклюзия окружающей среды. Поскольку 3D-текстуры не поддерживаются в Apple Vision Pro, пришлось конвертировать текстуры объемов в 2D-текстуры и вручную делать из них выборку. Сейчас этот процесс автоматизирован в PolySpatial, но на момент начала работы команды Light Brick Studio он был недоступен.

Команда начала с использования затенения пластиковых кирпичей и системы выборки объемных текстур. Затем они включили Realtime Lights, и, поскольку объемная текстура окутывала сцену, им потребовалось изменить внешнее освещение. Когда они начали разработку, было невозможно перезаписать освещение на основе изображения, поэтому им пришлось сэмплировать другую карту куба, а затем приглушить свет от освещения на основе изображения из RealityKit.
"То, что мы делали, на самом деле было невозможно, но мы нашли обходной путь, уменьшив гладкость кирпича и увеличив различные значения, прежде чем отправить его на освещение RealityKit", - объясняет Фредборг. "Разработчикам будет проще, ведь теперь в PolySpatial и RealityKit можно перезаписывать освещение на основе изображений".

Создание мягкой тени
Команде Light Brick Studio также пришлось искать решение для теней. Хотя в Apple Vision Pro можно добавлять тени к некоторым элементам, это не является стандартной функцией. Для этого команда рендерила тень в Unity как карту высоты или глубины, отправляла ее в RealityKit и переснимала там. Они отрисовали сцену в виде карты теней на бэкенде Metal в Unity, а затем передали ее на сторону рендеринга RealityKit.
"То, что вы можете продвинуть через рендеринг, ограничено, если вам все еще нужно получить 90 кадров в секунду. Мы сделали очень маленькую карту теней, 64 x 64 пикселя, а затем объединили уровни mipmap в RGBA-каналы одной текстуры, которую затем можно сэмплировать одним сэмплом в RealityKit, чтобы получить нечто, похожее на мягкую тень", - объясняет Фредборг. Когда кирпич находится очень близко к поверхности, тени получаются довольно резкими, но когда он поднимается вверх, тени становятся более мягкими". Мы сделали это с помощью одного образца текстуры".

Для Realtime Lights из Unity использовался узел PolySpatial Lighting Node в Shader Graph, который после преобразования в RealityKit расширился до нескольких узлов Shader Graph.
"Для RealityKit единственный способ изменения шейдеров - это интерфейс, похожий на Shader Graph, - говорит Фредборг. В Unity команда обнаружила, что можно создать пользовательскую функцию в Shader Graph, и, если она соответствует определенным правилам, ее можно затем преобразовать в нодовый граф MaterialX. "Это очень помогло нам, - продолжает он, - иначе это был бы монстр из спагетти внутри монстра из спагетти в Shader Graphs".

Оптимизация при 90 fps
По мере того как команда продвигала визуальные эффекты в новое измерение, они столкнулись с некоторыми трудностями в обеспечении бесперебойной работы платформы. Разработка велась как двухкомпонентная система, передавая все из Unity в RealityKit, который имеет различные методы рендеринга. Это означало, что Unity занималась логикой игры, а RealityKit - визуальным рендерингом, и для плавной работы при 90 кадрах в секунду требовалась оптимизация. Одна из главных проблем заключалась в том, чтобы определить, на чьей стороне узкое место - Unity или RealityKit, и команде требовалось несколько попыток, чтобы найти решение.
"В начале пакет PolySpatial отражал все, что мы делали в Unity, в RealityKit, так что каждый GameObjects или трансформация были там, и в то время мы не могли отключить передачу или отражение определенных слоев. В нем отражено все: рендеринг пользовательского интерфейса, рендеринг холста и система частиц аниматора", - объясняет Фредборг. "Сейчас есть фильтр, позволяющий не отслеживать определенные слои, но в то время нам нужно было найти способ очистить все, что мы не собирались видеть на стороне RealityKit".

Команде необходимо было оптимизировать иерархии GameObjects. На других платформах кирпичи представляют собой три или более связанных GameObjects, но для visionOS они установили максимум два GameObjects на кирпич, чтобы ограничить переходы между Unity и RealityKit. Это отлично сработало и стало большой победой для команды.
Усовершенствование анимации стоп-кадров также стало одним из главных моментов. Игра содержит анимированные водопады, которые обменивались сетками на кирпичи. Они состояли из сотен различных GameObjects, которые работали довольно медленно. "В итоге мы решили решать эту проблему поэтапно, а не делать каждый кадр для каждого GameObjects", - говорит Фредборг. Мы ждали и делали это каждые несколько кадров между разными потоками водопада". Это очень помогло".
Поиск лучших решений и партнеров
На протяжении всего пути создания продукта для Apple Vision Pro команде Light Brick Studio приходилось быть проворными, быстро решать проблемы и проводить итерации, чтобы сделать все правильно.
"Я думаю, чтобы понять это, нужно надеть очки", - говорит Фредборг. "Мы рекомендуем делать несколько сборок и использовать устройство как можно чаще, чтобы сосредоточиться на осязании и движении. У вас есть симулятор, который можно запустить на Mac, чтобы понять, как все работает, но входные данные отличаются. Это гораздо более физическая платформа".
В итоге команда осталась очень довольна тем, какой получилась игра, в том числе благодаря работе с сильным партнером. "Команда PolySpatial была очень отзывчива как в Slack, так и на дискуссионных форумах, - продолжает он. "Когда у нас возникали проблемы, они быстро находили решения, что было очень полезно. Они очень поддерживали нас и хотели сделать лучшую версию PolySpatial".


Сборка для Apple Vision Pro уже сегодня с Unity 2022 LTS
Обратитесь к нашей команде, чтобы узнать, как мы можем помочь вам использовать мощные инструменты и рабочие процессы Unity для создания захватывающих пространственных впечатлений.
Изучите конкретный пример
Заполните эту форму, чтобы получить доступ к последним историям успеха клиентов.