Mir 2 mejora el rendimiento de renderización con la biblioteca de Frame Pacing.

Mir 2: El regreso del rey

Mir 2: Return of the King es un juego para dispositivos móviles de alta calidad con la IP de Legend autorizado por Actoz Soft y desarrollado por HK ZHILI YAOAN LIMITED con el motor de juego Unity.

Este juego no solo recrea a la perfección los sentimientos de Mir 2, un representante de los MMORPG de fantasía coreanos, sino que también ofrece muchos de los contenidos de juego más populares, como la colección de equipos, el ataque de arena a gran escala y otros elementos básicos del juego.

El juego usó la biblioteca de Frame Pacing de Android (Swappy) para mejorar la estabilidad de su velocidad de fotogramas, lograr una renderización fluida y aumentar significativamente sus Android vitals (métrica de sesión lenta).

Lanzamiento de las sesiones lentas en Android vitals

Sesiones lentas es una métrica de Android vitals en Google Play Console. Una sesión lenta tiene más del 25% de fotogramas lentos. Un fotograma es lento en los siguientes casos:

  1. A 20 fps, no se presenta en un plazo de 50 ms después del fotograma anterior.

  2. A 30 fps, no se presenta dentro de los 34 ms posteriores al fotograma anterior.

A su debido tiempo, Play comenzará a alejar a los usuarios de los juegos que no puedan alcanzar los 20 FPS en sus teléfonos.

Existen muchos motivos por los que un fotograma puede mostrarse o renderizarse más tiempo en la pantalla que el tiempo de fotogramas objetivo del desarrollador. Es posible que el juego esté limitado por la CPU o la GPU, que se sobrecaliente (lo que causa la limitación térmica) o que haya una discrepancia entre la velocidad de fotogramas del juego y la frecuencia de actualización de la pantalla del dispositivo.

¿Qué es la biblioteca de Frame Pacing?

La biblioteca de Android Frame Pacing, también conocida como Swappy, es parte de las bibliotecas de AGDK. Swappy ayuda a los juegos de OpenGL y Vulkan a lograr una renderización fluida y un ritmo de fotogramas correcto en Android.

La biblioteca controla varias frecuencias de actualización si el dispositivo las admite, lo que le proporciona al juego una mayor flexibilidad a la hora de presentar un fotograma. Por ejemplo, en un dispositivo que admite tanto una frecuencia de actualización de 60 Hz como una de 90 Hz, un juego que no puede producir 60 fotogramas por segundo puede disminuir a 45 FPS en lugar de 30 FPS para que continúe sin problemas. La biblioteca detecta la velocidad de fotogramas esperada del juego y ajusta automáticamente los tiempos de presentación de fotogramas según corresponda.

La biblioteca de Frame Pacing también mejora la duración de batería porque evita actualizaciones de pantalla innecesarias. Por ejemplo, si un juego se renderiza a 60 FPS, pero la pantalla se actualiza a 120 Hz, la pantalla se actualiza dos veces por cada fotograma. La biblioteca de Frame Pacing evita esto configurando la frecuencia de actualización en el valor que admite el dispositivo que está más cerca de la velocidad de fotogramas objetivo.

Cómo mejoró Mir 2 el rendimiento de la renderización con la biblioteca de Frame Pacing

Mir 2 (미르2: 왕의 귀환) tenía un problema con el rendimiento de renderización inestable, en el que experimentaba un 40% de sesiones lentas con un umbral de velocidad de fotogramas de 20 FPS, mucho más alto que el umbral del 20% de Google Play.

Figura 1: Métrica de sesión lenta antes de integrar la biblioteca de Frame Pacing.

Mir 2 (미르2: 왕의 귀환) es un juego gráfico de alta fidelidad, y algunos dispositivos tienen dificultades para mantener un FPS estable. Su distribución de velocidad de fotogramas muestra que muchas sesiones se ejecutan a FPS inferiores a 20 fps.

Figura 2: La distribución de FPS del juego antes de integrar la biblioteca de Frame Pacing
Cada bucket representa el porcentaje de sesiones en las que el 75% de sus fotogramas fue más rápido que la etiqueta del bucket.

Cuando la carga de trabajo de visualización tarda más que la carga de trabajo de la aplicación, se agregan fotogramas adicionales a una fila. Una vez más, esto genera un salto y también puede provocar un fotograma adicional de latencia debido al exceso en búfer.

Figura 3: El fotograma B largo genera un ritmo incorrecto para 2 fotogramas: A y B.

La biblioteca de Frame Pacing resuelve este problema con vallas de sincronización (EGL_KHR_fence_sync y VkFence) que insertan esperas en la aplicación que permiten que se actualice la canalización de pantalla, en lugar de permitir la generación de contrapresión. El fotograma A aún presenta un fotograma adicional, pero ahora el fotograma B se presenta correctamente.

Figura 4: Los fotogramas C y D esperan para presentarse.

Mir 2 integró fácilmente la biblioteca de Frame Pacing aprovechando la función Optimized Frame Pacing integrada de Unity. La acción generó una mejora significativa en el rendimiento de renderización, en particular, redujo la métrica de sesión lenta del 40% al 10%.

Figura 5: Mejora de la sesión lenta después de integrar la biblioteca de Frame Pacing.

La cantidad de sesiones lentas se redujo significativamente en Mir2 después de que integraron la biblioteca.

Figura 6: Distribución de FPS del juego después de integrar el ritmo de fotogramas
Cada bucket representa el porcentaje de sesiones en las que el 75% de sus fotogramas fue más rápido que la etiqueta del bucket.

Comienza a usar la biblioteca de Frame Pacing

Cómo usar la biblioteca de Frame Pacing en motores de juegos nativos

Consulta las siguientes guías para integrar la biblioteca de Android Frame Pacing a tu juego:

Cómo usar la biblioteca de Frame Pacing en el motor de juegos de Unity

Unity integró la biblioteca de Android Frame Pacing en su motor. Para habilitar esta función en Unity, marca la casilla de verificación Optimized Frame Pacing en Project Settings > Player > Settings for Android > Resolution and Presentation:

Figura 7: Habilita Frame Pacing en Unity Engine.

Como alternativa, habilita de forma programática la opción de Frame Pacing optimizado en tu código lógico para permitir que Unity distribuya los fotogramas de manera uniforme y disminuya la variación en la velocidad de fotogramas, lo que crea una jugabilidad más fluida.

Cómo usar la biblioteca de Frame Pacing en el motor de juegos Unreal

Unreal 4.25 y versiones posteriores integran la biblioteca de Frame Pacing de Android, que forma parte de Android Game Development Kit. En el artículo sobre Frame Pacing para dispositivos móviles, se explica cómo habilitar la biblioteca de Frame Pacing de Android y cómo controlar el ritmo de fotogramas desde el código C++.