Mir 2 améliore les performances de rendu à l'aide de Swappy

Mir 2: Return of the King est un jeu mobile de haute qualité sous licence Legend, autorisé par Actoz Soft et développé par HK ZHILI YAOAN LIMITED à l'aide d'Unity Engine.

Ce jeu recrée parfaitement les sensations de "Mir 2", un MMORPG de fantasy coréen, mais propose également de nombreux contenus de jeu parmi les plus populaires, tels que la collecte d'équipements, les attaques de sable à grande échelle et d'autres éléments de gameplay de base.

Le jeu a utilisé l'API Android Frame Pacing (Swappy) pour améliorer la stabilité de sa fréquence d'images, obtenir un rendu fluide et améliorer considérablement ses Android Vitals (métrique "Session lente").

Lancement de la session lente sur Android Vitals

Session lente est une métrique Android Vitals dans la Google Play Console. Une session lente comporte plus de 25% d'images affichées lentement. L'affichage est considéré comme lent si:

1) À 20 FPS, il n'est pas présenté dans les 50 ms suivant le frame précédent. 2) À 30 FPS, il n'est pas présenté dans les 34 ms suivant le frame précédent.

À terme, Play évitera de proposer aux utilisateurs des jeux qui ne peuvent pas atteindre 20 FPS sur leur téléphone.

Un cadre peut s'afficher ou s'afficher plus longtemps à l'écran pour de nombreuses raisons par rapport à la cible du développeur. Le jeu peut être limité par le processeur ou le GPU, surchauffer, ce qui active un état thermique limité, ou il peut y avoir un incompatibilité entre la fréquence d'images du jeu et la fréquence d'actualisation de l'écran de l'appareil.

Qu'est-ce que Swappy ?

La bibliothèque Android Frame Pacing, également appelée Swappy, fait partie des bibliothèques AGDK. Swappy permet aux jeux OpenGL et Vulkan d'obtenir un rendu fluide et un frame pacing correct sur Android.

La bibliothèque gère plusieurs fréquences d'actualisation si celles-ci sont compatibles avec l'appareil, ce qui offre plus de flexibilité dans la présentation de chaque image pour un jeu donné. Par exemple, pour un appareil compatible avec une fréquence d'actualisation de 60 Hz et de 90 Hz, un jeu ne pouvant pas produire 60 images par seconde peut passer à 45 FPS au lieu de 30 FPS pour rester fluide. La bibliothèque détecte la fréquence d'images de jeu prévue et ajuste automatiquement les temps de présentation des frames en conséquence.

La bibliothèque Frame Pacing améliore également l'autonomie de la batterie, car elle évite les mises à jour inutiles de l'affichage. Par exemple, si un jeu effectue un rendu à 60 FPS, mais que l'écran est mis à jour à 120 Hz, il est mis à jour deux fois pour chaque frame. La bibliothèque Frame Pacing évite ce problème en définissant la fréquence d'actualisation sur la valeur acceptée par l'appareil le plus proche de la fréquence d'images cible.

Comment Mir 2 a amélioré les performances de rendu avec Swappy

Mir 2 (미르2: 왕의 귀환) rencontrait un problème de performances de rendu instables, avec 40% de sessions lentes à un seuil de fréquence d'images de 20 FPS, bien supérieur au seuil de 20% de Google Play.

Figure 1. Métrique de session lente avant l'intégration de Swappy.

Mir 2 (미르2: 왕의 귀환) est un jeu graphique haute fidélité. Certains appareils ont du mal à maintenir un FPS stable. La distribution de la fréquence d'images montre que de nombreuses sessions s'exécutent à une fréquence d'images inférieure à 20 FPS.

Figure 2 : Distribution des FPS du jeu avant l'intégration de Swappy.
Chaque bucket représente le pourcentage de sessions au cours desquelles 75% des images étaient plus rapides que le libellé du bucket.

Lorsque la charge de travail d'affichage demande plus de temps que celle de l'application, des images supplémentaires sont ajoutées à une file d'attente. Cela entraîne, ici encore, du stuttering et peut également causer une latence supplémentaire due au remplissage de la mémoire tampon.

Figure 3. L'image longue B perturbe la cadence de deux images (A et B).

La bibliothèque Swappy résout ce problème en utilisant des périmètres de synchronisation (EGL_KHR_fence_sync et VkFence) pour injecter des temps d'attente dans l'application afin de permettre au pipeline d'affichage de rattraper son retard plutôt que faire monter la pression. L'image A présente toujours une image supplémentaire, mais la présentation de l'image B s'effectue à une cadence correcte.

Figure 4. Les images C et D sont en attente de présentation.

Mir 2 a facilement intégré la bibliothèque Swappy en exploitant la fonctionnalité Optimized Frame Pacing (Rythme de frames optimisé) intégrée à Unity. Cette action a permis d'améliorer considérablement les performances de rendu, en particulier en réduisant la métrique "Session lente" de 40% à 10%.

Figure 5 : Amélioration des sessions lentes après l'intégration de Swappy.

Le nombre de sessions lentes a été considérablement réduit pour Mir2 après l'intégration de Swappy.

Figure 6. Distribution des FPS du jeu après l'intégration de Swappy.
Chaque bucket représente le pourcentage de sessions au cours desquelles 75% des images étaient plus rapides que le libellé du bucket.

Premiers pas avec Swappy

Utiliser Swappy dans les moteurs de jeu natifs

Consultez les guides suivants pour intégrer la bibliothèque Android Frame Pacing à votre jeu:

Utiliser Swappy dans le moteur de jeu Unity

Unity a intégré Android Frame Pacing dans son moteur. Pour activer cette fonctionnalité dans Unity, cochez la case Optimized Frame Pacing (Frame pacing optimisé) sous Project Settings > Player > Settings for Android > Resolution and Presentation (Paramètres du projet > Lecteur > Paramètres Android > Résolution et présentation) :

Figure 7 : Activez le Frame Pacing dans Unity Engine.

Vous pouvez également activer de manière programmatique l'option Frame Pacing optimisé dans votre code logique pour permettre à Unity de distribuer uniformément les images afin de réduire la variance de la fréquence d'images, ce qui améliore le gameplay.

Utiliser Swappy dans le moteur de jeu Unreal

Unreal 4.25 et versions ultérieures intègrent la bibliothèque Android Frame Pacing, qui fait partie de l'Android Game Development Kit. L'article Frame Pacing mobile explique comment activer la bibliothèque Frame Pacing d'Android et comment contrôler le rythme d'affichage des frames depuis du code C++.

Pour en savoir plus, consultez les articles sur les sessions lentes et Swappy.