Оптимизация Deep Rock Galactic: Survivor под мобильные устройства
Public- 19 Sep, 2026

Перенести Deep Rock Galactic: Survivor на мобильные означало взять bullet-heaven игру с ПК и заставить её работать на железе с куда меньшим запасом GPU, CPU и памяти. Портом занималась Piktiv, пока ветка для ПК ещё активно разрабатывалась, и команды разошлись настолько, что слияние шло только в одну сторону: из ПК в мобильную версию, но никогда обратно. Такое разделение дало Piktiv свободу поступать с исходными системами жёстко — разбирать устоявшиеся подходы и перестраивать их под совсем другой набор задач оптимизации. Главным ограничением была память: почти все целевые устройства несли 4 ГБ оперативки, кроме одного iPad, у которого было только 3 ГБ. На нём у команды оставалось примерно 1 850 МБ на всё, и выход за пределы означал падение.
Работу над производительностью сосредоточили на системах, чья стоимость растёт вместе с числом врагов. Цифры урона изначально были GameObjects с TextMesh Pro, но генерация текстовой сетки сразу для тысячи врагов становилась узким местом. Решением стала обычная система частиц Unity со спрайт-листом цифр от 0 до 9. Поиск пути ушёл со встроенной NavMesh-системы, которая плохо справляется, когда тысячи агентов прокладывают маршрут каждый сам по себе, на подход через flow-field, где стоимость зависит от площади, а не от числа агентов. Физические запросы ускорили KD-деревом для пространственных выборок — например, чтобы найти всех врагов в радиусе гранаты, — хотя это требовало частых перестроек по мере движения врагов. В рендере врагов примерно тысячу skinned mesh renderer'ов заменили запечённой анимацией вершин: каждый ключевой кадр хранится в текстуре и воспроизводится шейдером на GPU, что сводит затраты CPU почти к нулю и открывает GPU-инстансинг на одной общей сетке и материале.
Более глубокие технические детали объясняют, как эти замены устроены. Flow-field переворачивает модель стоимости поиска пути: на уровень накладывается сетка, и от цели плитки рисуют стрелки в сторону соседей, у которых стрелки уже есть, пока всё поле не покроется. Тогда стоимость зависит от покрытой площади, а не от числа агентов, и её можно дополнительно ограничить, вычисляя ограничивающий параллелепипед вокруг всех врагов и игрока и обновляя поле только внутри этой области. KD-дерево рекурсивно делит пространство, так что запрос «точка и радиус» быстро возвращает всё внутри, подменяя более тяжёлые физические запросы. Эти системы складывались в цепочку Burst-джобов длиной в 10–15 зависимостей, которая выводит всех врагов за пределы обычной физики и заметно поднимает нижнюю планку частоты кадров.
Addressables занимали центральное место в том, чтобы уложиться в лимит iPad с 3 ГБ. Поскольку игра никогда не показывает больше одного биома за раз, Piktiv вынесла графические ассеты и настройки конкретных биомов так, чтобы они грузились только при необходимости. Плата за это — Addressables привносят асинхронность в код, который раньше был синхронным, а перестройка системы под async может стать серьёзной архитектурной задачей, но здесь это оправдало себя. Тестирование опиралось на автоматическую систему измерений, прогонявшую шесть сценариев по всем биомам: базовый с простаивающим игроком, тысяча наступающих врагов или 500 врагов плюс автоматически стреляющее оружие. На всём протяжении замерялись CPU, GPU и память, а Unity Profiler вёл ранние аудиты по CPU. Один сценарий, который за десять секунд порождал около 4 000 синих кубов-подборок, до оптимизации был серьёзным ударом, а после неё стал неизмеримым. Геометрию уровня, которая процедурно строится из отдельных объектов, тоже собрали в батчи через пользовательские draw-команды, ведь фиксированная камера сверху позволяет легко вычислить видимую область.
Для команд, раздумывающих над похожим портом, выводы касаются не столько какого-то одного трюка, сколько раскладки данных и взаимодействия между системами. Перекладывать данные из компонентов и обратно дорого, когда тысячи сущностей выполняются каждый кадр, поэтому выгодно держать всё в нативных контейнерах и прогонять эти же контейнеры через весь конвейер. А игре, которой следовало бы использовать ECS или Data-Oriented Technology Stack, не нужна полная переработка: этот проект опёрся на компилятор Burst и нативные типы данных, не переводя игру целиком. Deep Rock Galactic: Survivor доступна в Steam, Xbox, App Store и Google Play.