
Mir 2: Return of the King é um jogo para dispositivos móveis de alta qualidade da Legend IP autorizado pela Actoz Soft e desenvolvido pela HK ZHILI YAOAN LIMITED usando o Unity Engine.
O jogo recria perfeitamente os sentimentos de "Mir 2", um MMORPG de fantasia coreano, e também oferece muitos dos conteúdos mais populares, como a coleção de equipamentos, o ataque de areia em grande escala e outras jogabilidades principais.
O jogo usou a API Android Frame Pacing (Swappy) para melhorar a estabilidade do frame rate, ter uma renderização suave e aumentar significativamente os Android vitals (métrica de sessão lenta).
A sessão lenta foi lançada no Android vitals
Sessão lenta é uma métrica do Android vitals no Google Play Console. Uma sessão lenta tem mais de 25% de frames lentos. Um frame é considerado lento quando:
1) A 20qps, ele não é apresentado em 50 ms após o frame anterior. 2) A 30 fps, ele não é apresentado em 34 ms após o frame anterior.
No futuro, o Google Play vai direcionar os usuários a outras opções quando os jogos não alcançarem 20 QPS no smartphone.
Há muitos motivos para um frame aparecer ou renderizar por mais tempo na tela do que a meta do desenvolvedor. O jogo pode estar limitado à CPU ou à GPU, superaquecendo, ativando um estado térmico limitado ou havendo uma incompatibilidade na taxa de frames do jogo e na taxa de atualização da tela do dispositivo.
O que é o Swappy
A biblioteca Android Frame Pacing, também conhecida como Swappy, faz parte das bibliotecas do AGDK. O Swappy ajuda os jogos OpenGL e Vulkan a renderizar e corrigir o ritmo de frames no Android.
A biblioteca processa várias taxas de atualização, se compatíveis com o dispositivo, o que oferece ao jogo mais flexibilidade para apresentar um frame. Por exemplo, para um dispositivo que é compatível com uma taxa de atualização de 60 Hz e 90 Hz, um jogo que não pode produzir 60 frames por segundo pode diminuir para 45 FPS em vez de 30 FPS para continuar funcionando de maneira uniforme. A biblioteca detecta o frame rate esperado do jogo e ajusta automaticamente os tempos de apresentação de frame.
A biblioteca Frame Pacing também melhora a duração da bateria porque evita atualizações desnecessárias da tela. Por exemplo, se um jogo for renderizado a 60 QPS, mas a tela for atualizada a 120 Hz, a tela será atualizada duas vezes para cada frame. A biblioteca Frame Pacing evita isso definindo a taxa de atualização como o valor compatível com o dispositivo mais próximo do frame rate desejado.
Como o Mir 2 melhorou o desempenho da renderização com o Swappy
O Mir 2 (미르2: 왕의 귀환) estava enfrentando um problema com a performance de renderização instável, em que 40% das sessões eram lentas com um limite de taxa de frames de 20 QPS, muito maior do que o limite de 20% do Google Play.

Mir 2 (미르2: 왕의 귀환) é um jogo com gráficos de alta fidelidade. Alguns dispositivos estão enfrentando desafios para manter um QPS estável. A distribuição de taxa de frames mostra que muitas sessões estão sendo executadas com QPS menor que 20.

Cada bucket representa a porcentagem de sessões em que 75% dos frames foram mais rápidos do que o rótulo do bucket.
Quando a carga de trabalho de exibição demora mais que a carga de trabalho do aplicativo, frames adicionais são adicionados a uma fila. Isso causa, mais uma vez, renderização lenta e pode levar a um frame extra de latência devido ao buffer-stuffing.

A biblioteca Swappy resolve isso usando limites de sincronização
(EGL_KHR_fence_sync
e VkFence
) para
injetar esperas no aplicativo que permitem que o pipeline de exibição seja atualizado,
em vez de permitir que a pressão de retorno se acumule. O frame A ainda apresenta um frame
extra, mas o frame B agora é apresentado corretamente.

O Mir 2 integrou facilmente a biblioteca Swappy usando o recurso Optimized Frame Pacing integrado do Unity. A ação resultou em uma melhoria significativa no desempenho de renderização, especificamente reduzindo a métrica de sessões lentas de 40% para 10%.

O número de sessões lentas foi reduzido significativamente para Mir2 depois que a Swappy foi integrada.

Cada bucket representa a porcentagem de sessões em que 75% dos frames foram mais rápidos do que o rótulo do bucket.
Começar a usar o Swappy
Como usar o Swappy em mecanismos de jogo nativos
Consulte os guias a seguir para integrar a biblioteca Android Frame Pacing ao jogo:
- Integrar o Android Frame Pacing ao renderizador Vulkan
- Integrar a Android Frame Pacing ao renderizador OpenGL
Como usar o Swappy no mecanismo de jogo do Unity
O Unity integrou o Android Frame Pacing ao mecanismo. Para ativar esse recurso no Unity, marque a caixa de seleção Optimized Frame Pacing em Project Settings > Player > Settings for Android > Resolution and Presentation:

Como alternativa, ative programaticamente a opção de frame pacing otimizado no código lógico para permitir que o Unity distribua frames de maneira uniforme e tenha menos variação no frame rate, criando uma jogabilidade mais suave.
Como usar o Swappy no mecanismo de jogo Unreal
O Unreal 4.25 e versões mais recentes integram a Biblioteca Android Frame Pacing, que faz parte do Android Game Development Kit. O artigo Ritmo de frames para dispositivos móveis explica como ativar a Biblioteca Android Frame Pacing e como controlar o ritmo de frames pelo código C++.
Para saber mais, leia sobre Sessões lentas e Swappy.