Как Jam City создала Disney Magic Match 3D для высокой производительности

Dec 3, 2025
Disney Magic Match 3D | Jam City | Disney

В Disney Magic Match 3D игроки приглашаются восстановить порядок в заколдованной Книге Магии, чья магия вышла из-под контроля, разбрасывая знаковые предметы Disney и Pixar по страницам. Игроки должны сопоставлять заколдованные объекты, организовывать причудливый беспорядок и заново открыть радость уборки, чтобы восстановить порядок в Книге Магии — по одному уютному уровню за раз.

На протяжении разработки каждая команда Jam City ставила амбициозные цели: Художественная команда стремилась к высокой визуальной точности в рамках строгих полигонных бюджетов; продуктовая команда оптимизировала идеальные целевые показатели времени сессии; дизайнеры обеспечивали постоянный поток свежего контента, а тестировщики QA требовали мощные инструменты. Тем временем инженеры Jam City придавали приоритет мировому техническому исполнению, стабильности, отзывчивости и многому другому на всех платформах. Вот как они справились со сложными задачами, чтобы воплотить свою визуализацию в жизнь.

ЗАДАЧА:

Создание высококачественной 3D-игры на соответствие, которая работает плавно и поддерживает стабильную производительность на широком диапазоне устройств

ПЛАТФОРМА:

iOS и Android

МЕСТОПОЛОЖЕНИЕ:

Калвер-Сити, Калифорния

ПЕРСОНАЛ ПРОЕКТА:

50

Disney Magic Match 3D: Пример использования Unity

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

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

«Перегрев был серьезной проблемой в начале, особенно при 20-минутных сессиях — телефоны становились неудобно горячими», — говорит Хебби Мэтью, менеджер по программному обеспечению в Jam City и технический руководитель Disney Magic Match 3D. «Мы решили эту проблему, улучшив производительность и разработав способ постоянно измерять тепло устройства на различных аппаратных платформах.»

Еще одной проблемой была доставка контента — потоковая передача ресурсов асинхронно без влияния на частоту кадров. “Редактор Unity помог нам создать эффективные инструменты для управления тем, когда и как загружалось содержимое,” говорит Мэтью.

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

“Оптимизация этих проблем привела как к увеличению производительности, так и помогла решить проблемы с перегревом,” говорит Мэтью.

Disney Magic Match 3D

Результаты

- Увеличена частота кадров на 40 fps на устройствах Android низкого класса и на 35 fps на устройствах среднего класса

- Снижено количество вызовов отрисовки на 40% на iOS и на 45% на устройствах Android

- Снижено использование оперативной памяти на 30% на iOS и на 15% на устройствах Android

- Уменьшено время загрузки ненетевой обработки на 55%

- Сокращено количество мешей с более чем 10,000 треугольниками с 33 до 0

- Сокращено количество мешей с 5,000 до 10,000 треугольников с 324 до 235

- Уменьшено количество источников света на 67%

Disney Magic Match 3D | Jam City | Disney

Скриншот в редакторе времени загрузки игры на начальном этапе

Отслеживание производительности по кадрам и системам

Когда команда столкнулась с проблемами производительности, они обратились к инструментам профилирования для более глубокого анализа.

Маркер Unity Profiler был особенно полезен для отслеживания многокадровых задач,” говорит Кевин Джонсон, инженер-программист в Jam City. “Я также использовал Profiler Analyzer для сравнений.”

Андреа Рамирес, другой инженер, расширила анализ, используя двоичные журналы для захвата конкретных снимков кадров. “Это позволило нам анализировать производительность без необходимости в профайлере в реальном времени,” объясняет она.

Disney Magic Match 3D | Jam City | Disney

Скриншот в редакторе более быстрых времен загрузки игры после оптимизации

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

«Одним из самых больших преимуществ движка является его расширяемость», добавляет Рамирес. «С помощью захвата многокадровых снимков и написания тестов мы собрали последовательные, надежные данные о производительности.»

Disney Magic Match 3D | Jam City | Disney

Disney Magic Match 3D | Jam City | Disney

Снижение больших пиков производительности

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

«Мы заранее загрузили элементы интерфейса и игровые элементы», говорит разработчик Джон Энни. «Неправильно сгруппированные пакеты активов были ключевой проблемой, что вызвало повторную компиляцию шейдеров – на что я изначально не обратил внимания.»

На раннем этапе они интегрировали Быстрый контур, чтобы быстро добавить выделение элементов. Хотя это привело к некоторому избыточному рисованию – дополнительным затратам на рендеринг – оптимизации позволили им сохранить это без полной переработки.

Аудио также способствовало пикам производительности. «Каждый игровой элемент вызывал свой собственный звук столкновения», объясняет Энни. «Сначала это работало нормально, но при одновременном падении 300 элементов время кадра возросло до 500 мс. Замена этих множества звуков одним звуком окружающей среды снизила это до 20-30 мс – и на самом деле это звучало лучше.»

Disney Magic Match 3D | Jam City | Disney

Захват в редакторе начальных больших пиков производительности во время игрового процесса

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

Освещение стало еще одной проблемой. Хотя отложенное рендеринг улучшило производительность, оно противоречило художественным целям. «Прямое рендеринг испытывает трудности с несколькими источниками света, потому что требует дорогих проходов на объект», объясняет Рамирес. Чтобы сбалансировать качество и эффективность, Энни разработал решение для запеченного освещения, которое сохранило визуальную целостность, улучшив производительность во время выполнения.

Сложность геометрии также была проблемой. «Наши первоначальные модели превышали 10 000 треугольников», говорит ведущий технический художник Кристен Уикс. «Мы уменьшили большинство моделей до менее 2500 треугольников, чтобы обеспечить хорошую производительность на устройствах начального уровня.»

Disney Magic Match 3D | Jam City | Disney

Захват в редакторе меньших пиков производительности после оптимизации

Оптимизация инициализации и обработки активов

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

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

Сетевые задержки, особенно во время начальной загрузки, также повлияли на производительность. Чтобы справиться с этим, команда перешла от корутин Unity к C# async/await для сетевых вызовов, что снизило задержку. «Мы также оптимизировали десериализацию JSON, заменив основанный на рефлексии подход Newtonsoft на генерацию кода, улучшив производительность», говорит Джонсон.

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

Disney Magic Match 3D | Jam City | Disney

Disney Magic Match 3D | Jam City | Disney

«Большая часть затрат была связана с тяжелой инициализацией Awake() на многих объектах», объясняет Джонсон. «Мы оптимизировали инстанцирование, отключая объекты при создании и включая их только по мере необходимости. Мы также откладывали или распределяли инстанцирование, а не делали это все сразу, что уменьшало видимую задержку.»

Чтобы более точно измерить производительность, команда использовала System.Diagnostics.Stopwatch для измерения интервалов инстанцирования и инструментировала различные части кода.

Несмотря на эти оптимизации, качество сети в реальном мире все еще влияет на время загрузки. Чтобы решить эту проблему, команда экспериментирует с ленивой загрузкой – отправляя игру со всеми конфигурациями и позволяя игрокам входить немедленно, обновляя конфигурации асинхронно в фоновом режиме. «Ранние тесты выглядят многообещающе, но мы осторожно следим за результатами в реальном времени», говорит Мэтью.

Disney Magic Match 3D | Jam City | Disney

Disney Magic Match 3D | Jam City | Disney

Преодоление ограничений GPU на устройствах низкого уровня

Во время оптимизации производительности команда заметила, что некоторые устройства низкого уровня показывают минимальное улучшение. Они обнаружили, что эти устройства в основном использовали GPU Mali, которые испытывали трудности с эффективной обработкой целевых количеств объектов игры. Тем не менее, им удалось поддерживать целевой уровень 60 fps на всех уровнях устройств.

Уикс подробно рассказывает об этих ограничениях: «Старые третьи и четвертые поколения GPU Mali являются строгими тайловыми рендерерами, которые легко становятся ограниченными геометрией. В отличие от этого, многие другие GPU используют гибридные методы рендеринга, которые помогают избежать этой узкой горловины. Новые GPU Mali, такие как те, что находятся в последних телефонах Pixel, имеют больше вычислительных блоков и гораздо лучше обрабатывают геометрию.»

Disney Magic Match 3D | Jam City | Disney

Disney Magic Match 3D | Jam City | Disney

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

«На предпроизводстве арт-директор запросил активное использование эффектов постобработки и нескольких динамических источников света», говорит Уикс. «Тем не менее, мы убрали постобработку для производства из-за ее значительного вклада в перегрев устройств и падение производительности.»

Enney также повысил эффективность, встроив точечный свет непосредственно в шейдеры, что позволило сократить количество активных источников света с трех или четырех до одного.

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

Загрузите Unity Pro сегодня

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