
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 Unity Engine.
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 API de Android Frame Pacing (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 la sesión lenta 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 objetivo del desarrollador. Es posible que el juego esté limitado por la CPU o la GPU, lo que genera un sobrecalentamiento que activa un estado térmico limitado, o bien hay una discrepancia entre la velocidad de fotogramas del juego y la frecuencia de actualización de la pantalla del dispositivo.
Qué es Swappy
La biblioteca de Android Frame Pacing, también conocida como Swappy, forma 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 Mir 2 mejoró el rendimiento de la renderización con Swappy
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.

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.

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.

La biblioteca de Swappy 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.

Mir 2 integró fácilmente la biblioteca de Swappy 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%.

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

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 Swappy
Cómo usar Swappy en motores de juegos nativos
Consulta las siguientes guías para integrar la biblioteca de Android Frame Pacing a tu juego:
- Integra Android Frame Pacing a tu procesador de Vulkan
- Cómo integrar Android Frame Pacing en tu procesador OpenGL
Cómo usar Swappy en el motor de juegos de Unity
Unity integró 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:

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 Swappy en el motor de juego 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++.
Para obtener más información, puedes consultar los artículos sobre sesiones lentas y Swappy.