Мир 2 повышает производительность рендеринга с помощью Swappy

Mir 2: Return of the King — это высококачественная мобильная игра Legend IP, авторизованная Actoz Soft и разработанная HK ZHILI YAOAN LIMITED с использованием Unity Engine.

Эта игра не только прекрасно воссоздает ощущения «Мир 2», представителя корейской фэнтезийной MMORPG, но также предлагает множество самых популярных игровых материалов, таких как сбор снаряжения, масштабная атака песком и другой основной игровой процесс.

В игре использовался Android Frame Pacing API ( Swappy ), чтобы улучшить стабильность частоты кадров, добиться плавного рендеринга и значительно повысить показатели Android Vitals (показатель медленной сессии).

Slow Session запущен на Android Vitals

Медленная сессия — это показатель Android Vitals в консоли Google Play. В медленном сеансе более 25% медленных кадров. Кадр медленный, если он:

1) При 20 кадрах в секунду он не отображается в течение 50 мс после предыдущего кадра. 2) При 30 кадрах в секунду он не отображается в течение 34 мс после предыдущего кадра.

Со временем Play начнет отвлекать пользователей от игр, которые не могут достичь 20 FPS на их телефонах.

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

Что такое Свапи

Библиотека Android Frame Pacing, также известная как Swappy , является частью библиотек AGDK. Swappy помогает играм OpenGL и Vulkan добиться плавного рендеринга и правильной частоты кадров на Android.

Библиотека поддерживает несколько частот обновления, если они поддерживаются устройством, что дает игре большую гибкость при представлении кадра. Например, для устройства, которое поддерживает частоту обновления 60 Гц, а также 90 Гц, игра, которая не может воспроизводить 60 кадров в секунду, может снизить частоту кадров до 45 кадров в секунду вместо 30 кадров в секунду, чтобы оставаться плавной. Библиотека определяет ожидаемую частоту кадров в игре и соответствующим образом автоматически корректирует время представления кадров.

Библиотека Frame Pacing также увеличивает срок службы батареи, поскольку позволяет избежать ненужных обновлений дисплея. Например, если игра рендерится со скоростью 60 кадров в секунду, но дисплей обновляется с частотой 120 Гц, экран обновляется дважды для каждого кадра. Библиотека Frame Pacing позволяет избежать этого, устанавливая частоту обновления на значение, поддерживаемое устройством, которое наиболее близко к целевой частоте кадров.

Как Мир 2 улучшил производительность рендеринга с помощью Swappy

Mir 2 ( 미르2: 왕의 귀환 ) столкнулся с проблемой нестабильной производительности рендеринга, из-за которой наблюдались 40% медленные сеансы при пороге частоты кадров 20 кадров в секунду, что намного выше порогового значения Google Play в 20%.

Рисунок 1. Показатель медленного сеанса перед интеграцией Swappy.

Mir 2 ( 미르2: 왕의 귀환 ) — это графическая игра с высокой точностью воспроизведения, на некоторых устройствах возникают проблемы с поддержанием стабильного FPS. Их распределение частоты кадров показывает, что многие сеансы работают с частотой кадров ниже 20 кадров в секунду.

Рисунок 2. Распределение FPS в игре до интеграции Swappy.
Каждый сегмент представляет собой процент сеансов, в которых 75 % кадров были быстрее, чем метка сегмента.

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

Рисунок 3. Длинный кадр B дает неправильный темп для двух кадров — A и B.

Библиотека Swappy решает эту проблему, используя ограничения синхронизации ( EGL_KHR_fence_sync и VkFence ) для внедрения ожиданий в приложение, которые позволяют конвейеру отображения подстраиваться, вместо того, чтобы создавать противодавление. Кадр A по-прежнему представляет дополнительный кадр, но кадр B теперь отображается правильно.

Рисунок 4. Кадры C и D ожидают представления.

Mir 2 легко интегрировал библиотеку Swappy, используя встроенную в Unity функцию оптимизированной синхронизации кадров . Это действие привело к значительному улучшению производительности рендеринга, в частности, к снижению показателя медленного сеанса с 40% до 10% .

Рисунок 5. Улучшение медленного сеанса после интеграции Swappy.

Количество медленных сессий в Mir2 значительно сократилось после интеграции Swappy.

Рисунок 6. Распределение FPS в игре после интеграции Swappy.
Каждый сегмент представляет собой процент сеансов, в которых 75 % кадров были быстрее, чем метка сегмента.

Начните работу со Swappy

Как использовать Swappy в собственных игровых движках

См. следующие руководства по интеграции библиотеки Android Frame Pacing в вашу игру:

Как использовать Swappy в игровом движке Unity

Unity интегрировала Android Frame Pacing в свой движок. Чтобы включить эту функцию в Unity, установите флажок «Оптимизированная скорость кадров» в разделе «Настройки проекта» > «Плеер» > «Настройки для Android» > «Разрешение и презентация» :

Рисунок 7. Включите синхронизацию кадров в Unity Engine.

Альтернативно, программно включите параметр «Оптимизированное изменение частоты кадров» в вашем логическом коде, чтобы позволить Unity равномерно распределять кадры и уменьшать различия в частоте кадров, обеспечивая более плавный игровой процесс.

Как использовать Swappy в игровом движке Unreal

Unreal 4.25 и выше интегрирует Android Frame Pacing Library , которая является частью Android Game Development Kit . В статье «Мобильная синхронизация кадров» объясняется, как включить библиотеку кадровой синхронизации Android и как управлять синхронизацией кадров из кода C++.

Для дальнейшего чтения вы можете узнать о Slow Sessions и Swappy .