Отрисованная вручную 2D прелесть Cuphead совсем недавно была выпущена на Nintendo Switch. Unity поговорили с Адамом Винкелсом, разработчиком из Studio MDHR, чтобы узнать о подходе команды к оптимизации под эту платформу.
Перенос Cuphead на Nintendo Switch прошёл довольно гладко. Большая часть игры работала сразу из коробки, что позволило нам сосредоточиться на том, чтобы качество и производительность соответствовали нашим стандартам.
— Адам Винкельс, инженер из Studio MDHR
Предварительный план для Nintendo Switch
Studio MDHR изначально планировали выйти на Nintendo Switch.
Если вы планируете на ранних этапах разработки опубликовать или портировать игру на Nintendo Switch, всегда проектируйте и тестируйте её производительность с учётом минимальной целевой спецификации платформы. Это позволяет избежать ситуации, когда вы тестируете свою игру только на высокопроизводительном ПК при разработке, чтобы внезапно осознать, что игра плохо работает на целевых устройствах.
Необходимо профайлерить игру с ранних этапов
Использование профилировщиков для оптимизации под Nintendo Switch помогло создать плавный и отзывчивый игровой процесс, которым славится Cuphead.
Будьте в курсе узких мест в плане производительности в вашей игре. Studio MDHR использовали встроенный в Unity профилировщик и собственный CPU-профилировщик Nintendo для анализа кода, устраняя любее спайки и делая всё возможное, чтобы максимально снизить базовое использование процессора. Не бойтесь почаще использовать эти инструменты на ранних этапах разработки, чтобы избежать глобального рефакторинга архитектуры в будущем.
Снизить потребление памяти с помощью атласов
Первоначально в игре было более 45 000+ нарисованных от руки анимационных кадров, которые не были упакованы, но такой подход не очень эффективен. Используйте SpriteAtlas
.
На некоторых уровнях игра использовала слишком много памяти. Команда решила использовать атласы для спрайтов. После удаление прозрачных частей и используя ASTC сжатие, атласы значительно сократил использование оперативной памяти.
Преимущества AssetBundles
AssetBundles помогли Studio MDHR не только сократить общий размер игры, но также настроить процесс для будущих обновлений.
Постарайтесь использовать AssetBundles для как можно большей части своей игры. Для Cuphead команда расфасовала и сжала SpriteAtlases
по различным бандлам. Это значительно уменьшило размер игры и очень помогло в соблюдении требований Nintendo к размеру патчей. Бандлы также помогают устаканить части игры, чтоб они меньше менялись между билдами.
Поколдуйте над механизмом загрузки шейдеров
Намного лучше загружать все шейдеры заранее, чтобы избежать проблем с производительностью, когда новые или редко используемые спрайты загружаются на уровне впервые.
Studio MDHR столкнулась с небольшими спайками производительности при спавне определённых врагов на Run ‘n Gun уровнях. После продолжительных поисков они поняли, что всему виной была загрузка шейдеров. К счастью, Unity предоставляет возможность предзагрузить шейдеры с помощью Shader Variant Collections, поэтому, хотя проблему было довольно сложно определить, её было легко исправить!
Танцы с бубном вокруг сборщика мусора
Unity отлично справляется с автоматической сборкой мусора, но команда решила делать ручные вызовы сборщика, чтобы добиться дополнительного прироста производительности.
Хотя в Unity нет прямого способа контролировать размер кучи, вы можете заставить её расширяться, вручную выделяя память при запуске игры. К счастью, у них в запасе был определённый объём RAM для увеличения кучи, чтобы GC срабатывал каждые 15-20 минут. Учитывая, что они в придачу сами запускают сборку мусора при каждой паузе, загрузке или перезагрузке, а также потому, что Cuphead — очень сложная игра, крайне нежелательно, чтобы игроки, находясь на уровне достаточно долго, столкнулись с автоматической сборкой мусора непосредственно во время игры.
Вот и всё, котята!
Если хотите узнать больше о Studio MDHR и Cuphead (которая сейчас доступна на Nintendo Switch), посетите официальную страницу Made with Unity. Чтобы узнать больше о создании игр под Nintendo Switch, посетите портал разработчиков Nintendo.