Optimizing Deep Rock Galactic Survivor for mobile
Adam Axler - Unity
Senior Content Marketing Manager
Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.
Что нужно, чтобы перенести сложную PC игру на мобильные устройства? Игры Funday Deep Rock Galactic: Выживший В игре сочетается динамичный игровой процесс с механикой пули и гномами, классами, оружием и механикой копания из Deep Rock Galactic . Задача, стоявшая перед компанией Piktiv, занимавшейся портированием игр, заключалась в управлении тысячами одновременно моделируемых врагов и элементов окружения при сохранении стабильной частоты кадров на оборудовании с гораздо меньшими ресурсами GPU, CPU и памяти.
Для обеспечения такого уровня интерактивности на мобильных устройствах потребовалась переработка систем, стоимость которых зависит от количества врагов: поиск пути, физические запросы, отрисовка врагов, отображение урона и отрисовка окружения. Команде также пришлось уместить игру на iPad с 3 ГБ памяти, обеспечить поддержку различных устройств, от современных флагманов до устаревших Android устройств, и поддерживать одностороннее слияние с PC веткой, которая все еще находилась в активной разработке.
Мы поговорили с руководителем инженерного отдела Маркусом Экелундом и главным инженером Фредриком Акербломом о портировании. Deep Rock Galactic: Выживший к мобильным устройствам, их собственным решениям и тому, как они оптимизировали производительность в условиях фрагментированного рынка устройств.
Как происходила передача дел между Funday Games и Piktiv?
Маркус Экелунд: Мы отошли от PC версии, когда она еще находилась в разработке, поэтому она еще не достигла версии 1.0, когда мы начали работу над мобильной версией. Изначально планировалось, что мобильная версия будет интегрирована в основную ветку, но в процессе разработки мы слишком сильно разошлись, поэтому в этом смысле мы по-прежнему остаемся отдельными проектами. Мы переходим с PC на мобильные устройства, поэтому происходит однонаправленный процесс, но не в обратном направлении.
В плане технической стороны работы над портом у нас практически не было сотрудничества. Что касается пользовательского интерфейса и пользовательского опыта, а также способов адаптации пользовательского интерфейса, здесь было гораздо больше нюансов. Это позволило нам действовать очень быстро, и, поскольку мы отделились от существующих структур, мы смогли очень эффективно разрушить многие из созданных ими систем — разбить их и внедрить что-то другое, поскольку у нас были другие цели оптимизации.

Каковы были ваши главные технические цели при разработке мобильной версии?
Фредрик Акерблом: Многие из технических целей, которые мы ставили перед собой на начальном этапе, были довольно простыми: Можно ли вообще запустить это на мобильных устройствах, и насколько широкий спектр устройств мы можем охватить? Если посмотреть на продукцию Apple , то там нет большого диапазона детализации, в который можно было бы осуществлять доставку. Есть самые современные товары, затем чуть более широкая категория, включающая в себя многое из того, что доступно в настоящее время, и, наконец, все остальное. Вам нужно попасть хотя бы в эту среднюю категорию.
Одной из повторяющихся проблем для нас было то, что все эти устройства имеют 4 ГБ оперативной памяти, за исключением одного iPad, у которого 3 ГБ. Таким образом, это стало ключевой технической целью: Можно ли запустить его на этом iPad без сбоев? В нашем распоряжении было примерно 1850 МБ, и если бы мы превысили этот лимит, игра была бы окончена. На начальном этапе большая часть работы заключалась в настройке оперативной памяти, а после этого мы смогли более детально изучить реальную производительность игры на различных платформах. С другой стороны, на данный момент существует около 9000 различных устройств, Android, поэтому обеспечение его корректной работы — это целая наука.

Deep Rock Galactic: Выживший | Веселые игры
С какими основными проблемами производительности вы столкнулись при переходе с PC на мобильное оборудование, и как вы их преодолели?
FÅ: Несколько ключевых систем особенно выделялись, и это были системы с тысячами активных объектов: Цифры урона, снаряды, сам игровой мир и анимированные 3D враги.
Например, тексты, отображающие повреждения, изначально представляли собой игровой объект, созданный с помощью TextMesh Pro . Но когда на экране тысяча врагов, и вы бросаете в них гранату, у каждого из них теперь должно отображаться числовое значение урона. Проблема заключается в генерации текстовой сетки: Пусть шрифт преобразует вашу строку в нечто визуальное.
В итоге мы использовали обычную систему частиц Unity с набором спрайтов, содержащим цифры от 0 до 9.
МНЕ: Другим примером был поиск пути для всех врагов, который использовал встроенную систему NavMesh на PC. Нас также поддерживала команда инженеров из Unity , и один из них начал работать над решением, использующим навигацию по полю потока. Другой инженер разработал решение на основе KD-дерева для оптимизации и исключения многих физических запросов.
FÅ: При отрисовке врагов на экране одновременно отображается около тысячи объектов с анимированной сеткой, и это не очень эффективно. Как оказалось, практически у всех этих врагов всего одна анимация, поэтому нам на самом деле не нужна поддержка нескольких анимаций.
Вместо этого используется система, в которой каждый ключевой кадр анимации запекается в текстуру. Мы проходим по каждому кадру таким образом, а затем все они анимируются вершинами с помощью шейдера на графическом процессоре, поэтому затраты на ЦП практически отсутствуют.
Запекание в единую статическую сетку и текстуру стало значительным улучшением, а также позволяет использовать такие возможности, как инстансинг на графическом процессоре , поскольку технически это одна и та же сетка с одним и тем же материалом.

Deep Rock Galactic: Выживший | Веселые игры
Как работают поля потока и KD-деревья, и что они заменили?
FÅ: Поле потока представляет собой инверсию того, где находится значение стоимости при поиске пути. Обычно, когда 20 или 30 агентов прокладывают путь в окружающей среде, вы создаёте сетку этой среды, и каждый агент отвечает за свой собственный поиск пути. Когда их тысячи, это становится довольно серьезным узким местом, поскольку стоимость, как правило, возрастает пропорционально количеству агентов.
Вы создаёте сетку по всему уровню, затем начинаете с целевой точки, и все клетки вокруг неё рисуют стрелку, указывающую на цель. Сделайте один шаг в сторону, снова направьте стрелки на ближайший объект, на котором уже есть стрелка, и продолжайте двигаться, пока не охватите все поле. Таким образом, вместо того чтобы взимать плату за каждого агента, расчет производится исходя из размера области, внутри которой вы хотите проложить маршрут.
Вы можете еще больше ограничить это. Мы производим расчеты, исходя из местоположения врагов, поэтому создаем ограничивающий прямоугольник, содержащий всех врагов и игрока, и обновляем только пространство внутри него.
Для пространственных запросов мы использовали KD-дерево. Если провести линию посередине большой комнаты, то внезапно разделите её на два пространства. Вы создаёте древовидную структуру, к которой можно довольно легко обращаться с запросами: Вот точка и радиус, покажите мне, что там находится.
Это могло бы заменить множество сложных физических задач, например, когда в этом месте взорвалась граната, и мне нужно найти всех врагов в этом круге. Я не уверен, что в итоге это идеально подошло, потому что дерево KD приходится часто перестраивать — враги постоянно двигаются, поэтому дерево KD нужно строить очень часто.

Поле потока
Как вы подходили к тестированию и настройке на мобильных устройствах?
FÅ: Одним из первых шагов, которые мы предприняли, было определение устройства, на котором, по нашему мнению, игра должна работать — довольно простого устройства, для которого мы хотели получить как минимум 30 кадров в секунду.
Мы разработали автоматизированную систему измерения производительности, позволяющую создавать различные сценарии. В общей сложности мы провели шесть сценариев. Deep Rock Galactic: Выживший . Мы можем создать игру специально в этом режиме измерения, и как только она запустится на устройстве, она перейдет в биом и проведет эти шесть сценариев.
Один из вариантов может быть базовым, когда игрок стоит неподвижно, а затем мы создаём тысячу врагов, движущихся в вашу сторону, или мы создаём 500 врагов, вооружаем вас всем этим оружием и автоматически стреляем во всех направлениях. Это дает нам некоторое представление о происходящем, и мы измеряем производительность ЦП, ГП, памяти — практически всего, что можем измерить. Мы запускаем его во всех биомах, чтобы выявить, есть ли в каком-либо из них специфические проблемы с производительностью.
Unity Profiler был одним из наших основных инструментов для анализа производительности процессора, особенно на начальном этапе, когда мы искали наиболее простые и эффективные способы повышения производительности.

Deep Rock Galactic: Выживший | Веселые игры
Как Addressables помогла управлять контентом и объемом памяти, используемой на мобильных устройствах?
FÅ: Addressables играли важную роль в достижении лимита памяти в 3 ГБ на iPad. В целом, мы выделили те вещи, которые на начальном этапе казались простыми. Например, в разных биомах вы никогда не окажетесь более чем в одном биоме одновременно, поэтому вы можете использовать все графические ресурсы и настройки по отдельности.
Addressables позволяют вводить асинхронное поведение в систему, которая ранее была полностью синхронной, и перестройка всей системы для асинхронного режима может стать довольно сложной архитектурной задачей, в зависимости от вашей игры. Но в данном случае это нам идеально подошло.

Deep Rock Galactic: Выживший | Веселые игры
Какие показатели эффективности вы отслеживали для оценки успеха мобильной версии?
FÅ: Большинство наших целей были связаны с повышением производительности: На этих моделях мы хотим достичь 30 кадров в секунду, а на флагманских моделях ожидаем 60 кадров в секунду.
В Deep Rock Galactic: Выживший Каждый раз, когда вы убиваете жука, из него появляется множество блестящих синих кубиков, которые вы подбираете, чтобы повысить свой уровень. В одном из наших сценариев автоматического измерения за 10 секунд было сгенерировано около 4000 таких запросов, что на начальном этапе серьезно сказалось на производительности. После проведения первоначальной оптимизации результат стал измеримым.
Оптимизация движений и физики врагов также значительно повысила минимальный уровень частоты кадров. Это привело к появлению полей потока, а также длинной цепочки заданий Burst — длиной в 10 или 15 зависимостей — отвечающих за перемещение всех врагов, и всё это за пределами обычной физической системы.
В этой игре уровни генерируются процедурно, поэтому первый этаж и все стены построены из отдельных объектов. Поскольку у нас есть камера, направленная сверху вниз, и мы постоянно находимся под одним и тем же углом, мы можем легко рассчитать область, в которой видим объекты, собрать все эти объекты и отправить их в рендерер с помощью наших собственных команд пакетной отрисовки. Это стало значительным улучшением как для графического процессора, так и для центрального процессора, поскольку отправка всех этих вызовов отрисовки по отдельности обходилась центральному процессору довольно дорого.

Deep Rock Galactic: Выживший | Веселые игры
Какой ваш главный совет разработчикам, желающим портировать свою PC игру на мобильные устройства?
МНЕ: Речь идёт не столько о поиске универсального решения, сколько о взаимодействии различных систем.
FÅ: Затраты на передачу данных между различными компонентами начинают существенно возрастать, когда вы обрабатываете тысячи объектов за каждый кадр. Если вы сможете управлять своими данными таким образом, чтобы все они находились в собственных контейнерах, и использовать одни и те же собственные контейнеры на протяжении всего процесса, вы сможете много заработать.
МНЕ: Ещё один вывод из этого проекта: Допустим, у вас есть игра, и, когда вы её закончили, вы понимаете, что, вероятно, следовало бы создать её с помощью ECS для Unity или любой другой системы из стека технологий, ориентированных на данные (DOTS) . Вам не нужно полностью конвертировать всю игру и переписывать её заново. Мы используем только компилятор Burst и множество собственных типов данных.
Deep Rock Galactic: Выживший Игра доступна в Steam, на Xbox , в App Store и в Google Play . Больше историй от разработчиков Unity вы найдете в блоге Unity и центре ресурсов Unity.