Publicado por Dan Galpin, representante de desarrolladores
Con más de 2500 millones de dispositivos activos por mes, la plataforma de Android aumenta exponencialmente el alcance de los desarrolladores. Aprovechar esa oportunidad puede resultar desafiante, especialmente si el juego que desarrollas intenta realmente superar los límites de los dispositivos móviles. Después de años de trabajar en conjunto con los desarrolladores de juegos para detectar y solucionar los problemas más importantes, por fin podemos plasmar los resultados de nuestro esfuerzo en el lanzamiento del SDK de juegos para Android. Este SDK es un conjunto de bibliotecas que puedes usar para mejorar los juegos de Android.
La primera biblioteca que tenemos previsto lanzar en el SDK de juegos para Android ayuda a los desarrolladores con la regulación de marcos, es decir, la sincronización del bucle de representación de un juego con el subsistema de la pantalla del SO y su hardware subyacente. El subsistema de la pantalla de Android está diseñado para evitar la división que tiene lugar cuando el hardware de la pantalla cambia a un marco nuevo durante una actualización. Para lograrlo, guarda marcos anteriores en el búfer, detecta si un marco llega tarde y, en tal caso, vuelve a reproducirlo. Cuando la velocidad del bucle de representación de un juego es diferente de la del hardware nativo de la pantalla, el flujo óptimo de la pantalla se logra sincronizando el bucle de representación del juego con el compositor del sistema y el hardware de la pantalla. Este sería el caso de un juego que se ejecuta a 30 marcos por segundo e intenta reproducirse en un dispositivo compatible con 60 FPS de forma nativa.
Flujo de pantalla óptimo
Cualquier discrepancia en la sincronización puede crear incoherencias importantes en los tiempos de los marcos. Si la representación de un marco demora muy poco, puede reducir la presentación del marco anterior y generar una secuencia de 33 ms, 16 ms y 50 ms, por ejemplo.
Incoherencia en la sincronización: representación muy rápida
Si la representación de un marco demora demasiado, ocurre algo similar. La presentación del marco abarca un marco adicional y se genera una secuencia de 50 ms, 16 ms y 33 ms, por ejemplo.
Incoherencia en la sincronización: marco lento
En cualquiera de estas situaciones, el jugador experimenta demoras incoherentes entre los datos que envía el juego y las actualizaciones de la pantalla. En términos visuales, el juego sufre interrupciones y se ve menos pulido. Pueden verse afectadas la experiencia de juego y el aspecto.
La biblioteca de regulación de marcos usa la API de Choreographer de Android para lograr la sincronización con el subsistema de la pantalla. A tal fin, utiliza extensiones de marca de tiempo para la presentación en API de OpenGL y Vulkan a fin de garantizar que los marcos se presenten en el momento adecuado, además de límites de sincronización que evitan que se llene el búfer. Si el dispositivo lo admite, se manejan varias frecuencias de actualización para otorgar al juego más flexibilidad a la hora de presentar un marco. En el caso de dispositivos que admiten frecuencias de actualización de 60 Hz y 90 Hz, un juego incapaz de producir 60 marcos por segundo puede reducir la frecuencia a 45 FPS (en lugar de 30) para evitar las interrupciones. La biblioteca detecta la velocidad de marcos prevista del juego y ajusta automáticamente los tiempos de presentación de marcos para adaptarse. La biblioteca de regulación de marcos permite que los juegos aprovechen las pantallas con mayor velocidad de actualización (de 90 y 120 Hz), al tiempo que facilita fijar dicha velocidad en un valor deseado, independientemente de la velocidad de actualización subyacente de la pantalla.
La biblioteca de regulación de marcos está integrada en las versiones de Unity a partir de la 2019.2. Basta con seleccionar la casilla de verificación para optimizar la regulación de marcos en la configuración de Android y lograrás que las velocidades de marcos de tus juegos funcionen sin interrupciones. Si tienes acceso al motor del juego, resulta muy sencillo integrar la biblioteca en el representador de OpenGL o Vulkan. Los archivos binarios pueden descargarse en developer.android.com/games/sdk/ o puedes descargar el código fuente desde el Proyecto de código abierto de Android.
Para obtener más información sobre la regulación de marcos, consulta la documentación en developer.android.com, junto con la sección sobre regulación de marcos de la charla acerca de cómo optimizar el rendimiento de los juegos para Android que tuvo lugar en Google I/O 2019. No olvides suscribirte a nuestro canal de Twitter ni te pierdas los anuncios de GDC 2020 para enterarte qué estamos haciendo a fin de mejorar el desarrollo de juegos para Android y permitirte generar la mejor experiencia de juego en miles de millones de dispositivos.
Source: Google Dev