
Mir 2: Return of the King은 Actoz Soft의 승인을 받아 Unity Engine을 사용하여 HK ZHILI YAOAN LIMITED에서 개발한 고품질의 Legend IP 모바일 게임입니다.
이 게임은 한국 판타지 MMORPG의 대표작인 '미르 2'의 느낌을 완벽하게 재현할 뿐만 아니라 장비 수집, 대규모 모래 공격, 기타 핵심 게임플레이와 같은 가장 인기 있는 게임 콘텐츠를 많이 제공합니다.
이 게임은 Android Frame Pacing API (Swappy)를 사용하여 프레임 속도의 안정성을 개선하고, 원활한 렌더링을 달성하고, Android vitals (느린 세션 측정항목)를 크게 개선했습니다.
Android Vitals에 느린 세션 출시
느린 세션은 Google Play Console의 Android vitals 측정항목입니다. 느린 세션에는 느린 프레임이 25% 이상 포함됩니다. 다음과 같은 경우 프레임 속도가 느린 것입니다.
1) 20fps에서는 이전 프레임 후 50ms 이내에 표시되지 않습니다. 2) 30fps에서는 이전 프레임 후 34ms 이내에 표시되지 않습니다.
앞으로 Play는 사용자가 휴대전화에서 20FPS를 달성하지 못하는 게임은 피하도록 할 것입니다.
프레임이 개발자의 타겟보다 화면에 더 오래 표시되거나 렌더링되는 데는 여러 가지 이유가 있습니다. 게임이 CPU 또는 GPU에 종속되어 있거나, 과열되어 제한된 열 상태가 활성화되었거나, 게임의 프레임 속도와 기기의 디스플레이 새로고침 빈도에 불일치가 있을 수 있습니다.
Swappy란 무엇인가요?
Swappy라고도 하는 Android 프레임 속도 라이브러리는 AGDK 라이브러리의 일부입니다. Swappy는 OpenGL 및 Vulkan 게임이 Android에서 원활한 렌더링 및 올바른 프레임 속도를 달성하는 데 도움이 됩니다.
기기에서 여러 새로고침 빈도를 지원한다면 이 라이브러리는 여러 새로고침 빈도를 처리하며 이를 통해 게임에 프레임을 더욱 유연하게 표시할 수 있습니다. 예를 들어 90Hz뿐만 아니라 60Hz 새로고침 빈도를 지원하는 기기의 경우 초당 60프레임을 구현할 수 없는 게임은 원활한 유지를 위해 30FPS 대신 45FPS로 떨어질 수 있습니다. 이 라이브러리는 예상 게임 프레임 속도를 감지하고 그 속도에 따라 프레임 프레젠테이션 시간을 자동으로 조정합니다.
Frame Pacing 라이브러리는 불필요한 디스플레이 업데이트를 방지하므로 배터리 수명도 개선됩니다. 예를 들어 게임이 60FPS로 렌더링되지만 디스플레이가 120Hz로 업데이트되는 경우 프레임마다 화면이 두 번 업데이트됩니다. Frame Pacing 라이브러리는 새로고침 빈도를 기기에서 지원하는 값 중 목표 프레임 속도에 가장 가까운 값으로 설정하여 이를 방지합니다.
Mir 2가 Swappy를 사용하여 렌더링 성능을 개선한 방법
Mir 2 (미르2: 왕의 귀환)에서 Google Play의 20% 기준점보다 훨씬 높은 20FPS의 프레임 속도 기준점에서 40% 의 느린 세션이 발생하는 불안정한 렌더링 성능 문제가 발생했습니다.

Mir 2 (미르2: 왕의 귀환)는 고화질 그래픽 게임으로, 일부 기기에서는 안정적인 FPS를 유지하는 데 문제가 있습니다. 프레임 속도 분포를 보면 많은 세션이 20fps 미만의 FPS로 실행되고 있습니다.

각 버킷은 프레임의 75% 가 버킷 라벨보다 빠른 세션의 비율을 나타냅니다.
디스플레이 워크로드가 애플리케이션 워크로드보다 더 오래 걸리면 추가 프레임이 큐에 추가됩니다. 이로 인해 다시 한번 끊김 현상이 발생하고, 버퍼 스터핑으로 인해 추가 프레임 지연이 발생할 수 있습니다.

Swappy 라이브러리는 동기화 펜스(EGL_KHR_fence_sync
및 VkFence
)를 사용하여 애플리케이션에 대기를 삽입하여 백 프레셔가 쌓이는 대신 디스플레이 파이프라인이 따라잡을 수 있도록 함으로써 이 문제를 해결합니다. 프레임 A는 여전히 추가 프레임을 표시하지만 이제 프레임 B는 올바르게 표시됩니다.

Mir 2는 Unity의 내장 최적화된 프레임 속도 기능을 활용하여 Swappy 라이브러리를 쉽게 통합했습니다. 이 조치로 렌더링 성능이 크게 개선되었으며 특히 느린 세션 측정항목이 40%에서 10%로 감소했습니다.

Swappy를 통합한 후 Mir2의 느린 세션 수가 크게 감소했습니다.

각 버킷은 프레임의 75% 가 버킷 라벨보다 빠른 세션의 비율을 나타냅니다.
Swappy 시작하기
네이티브 게임 엔진에서 Swappy를 사용하는 방법
Android Frame Pacing 라이브러리를 게임에 통합하려면 다음 가이드를 참고하세요.
Unity 게임 엔진에서 Swappy를 사용하는 방법
Unity는 엔진에 Android Frame Pacing을 통합했습니다. Unity에서 이 기능을 사용 설정하려면 Project Settings > Player > Settings for Android > Resolution and Presentation에서 Optimized Frame Pacing 체크박스를 선택합니다.

또는 로직 코드에서 최적화된 프레임 속도 옵션을 프로그래매틱 방식으로 사용 설정하여 Unity가 프레임을 균등하게 분산하여 프레임 속도의 변동 폭을 줄이고 더 부드러운 게임플레이를 만들 수 있습니다.
Unreal 게임 엔진에서 Swappy를 사용하는 방법
Unreal 4.25 이상에서는 Android Game Development Kit의 일부인 Android Frame Pacing 라이브러리를 통합합니다. 모바일 프레임 속도 도움말에서는 Android Frame Pacing 라이브러리를 사용하는 방법과 C++ 코드에서 프레임 속도를 제어하는 방법을 설명합니다.
자세한 내용은 느린 세션 및 Swappy를 참고하세요.