Mir 2 poprawia wydajność renderowania dzięki użyciu biblioteki Frame Pacing

Mir 2: Return of the King

Mir 2: Return of the King to wysokiej jakości gra mobilna o postaciach z Legendy, która została autoryzowana przez Actoz Soft i oparta na silniku Unity.

Ta gra nie tylko doskonale odtwarza wrażenia z Mir 2, koreańskiej gry fantasy typu MMORPG, ale też oferuje wiele najpopularniejszych treści, takich jak kolekcjonowanie sprzętu, duży atak piaskiem i inne podstawowe elementy rozgrywki.

Gra korzystała z biblioteki Frame Pacing (Swappy) na Androida, aby zwiększyć stabilność liczby klatek na sekundę, uzyskać płynne renderowanie i znacznie poprawić wyniki w Android Vitals (dane o powolnych sesjach).

Powolne sesje w Android Vitals

Powolne sesje to dane Android Vitals w Konsoli Google Play. Podczas powolnej sesji ponad 25% klatek jest spowolnionych. Klatka jest spowolniona, jeśli:

  1. Przy 20 fps nie jest ona wyświetlana w ciągu 50 ms od poprzedniej klatki.

  2. Przy 30 fps nie jest ona wyświetlana w ciągu 34 ms od poprzedniej klatki.

W przyszłości Google Play zacznie zachęcać użytkowników do odchodzenia od gier, które nie zapewniają szybkości 20 FPS na telefonach.

Istnieje wiele powodów, dla których wyświetlanie lub renderowanie klatki może trwać dłużej niż docelowy czas wyświetlania klatki określony przez dewelopera. Gra może być ograniczona przez procesor lub kartę graficzną, może się przegrzewać (co powoduje ograniczenie temperatury), albo występuje niezgodność częstotliwości wyświetlania klatek gry z częstotliwością odświeżania ekranu urządzenia.

Co to jest biblioteka Frame Pacing

Biblioteka do regulacji szybkości wyświetlania klatek na Androida, znana też jako Swappy, jest częścią bibliotek AGDK. Swappy pomaga uzyskać płynne renderowanie i prawidłowy interwał klatek w grach OpenGL i Vulkan na Androidzie.

Biblioteka obsługuje różne częstotliwości odświeżania, jeśli są one obsługiwane przez urządzenie, co daje większą elastyczność w prezentowaniu klatek. Na przykład w przypadku urządzenia obsługującego częstotliwość odświeżania 60 Hz i 90 Hz, aby zachować płynność, gra, która nie może wyświetlać 60 FPS, może zamiast 30 FPS wyświetlać 45 FPS. Biblioteka wykrywa oczekiwaną liczbę klatek na sekundę w grze i odpowiednio dostosowuje czas wyświetlania klatek.

Biblioteka Frame Pacing wydłuża też czas pracy na baterii, ponieważ zapobiega niepotrzebnym aktualizacjom wyświetlania. Jeśli na przykład gra renderuje się z prędkością 60 FPS, a ekran odświeża się z częstotliwością 120 Hz, ekran jest aktualizowany dwukrotnie na każdą klatkę. Biblioteka Frame Pacing zapobiega temu, ustawiając częstotliwość odświeżania na wartość obsługiwaną przez urządzenie, która jest najbliższa docelowej liczby klatek.

Jak Mir 2 poprawił wydajność renderowania dzięki bibliotece Frame Pacing

W grze Mir 2 (미르2: 왕의 귀환) wystąpił problem z niestabilną wydajnością renderowania, w którym 40% sesji było spowolnionych przy progu szybkości 20 FPS, znacznie wyższym niż próg 20% w Google Play.

Rysunek 1. Dane o powolnym renderowaniu klatki przed zintegrowaniem biblioteki Frame Pacing.

Mir 2 (미르2: 왕의 귀환) to gra o wysokiej jakości graficznej, dlatego niektóre urządzenia mają problemy z utrzymaniem stabilnej liczby klatek na sekundę. Ich rozkład częstotliwości klatek pokazuje, że wiele sesji działa z częstotliwością poniżej 20 FPS.

Rysunek 2. Rozkład liczby klatek na sekundę w grze przed zintegrowaniem biblioteki Frame Pacing.
Każda grupa przedstawia odsetek sesji, podczas których 75% klatek było szybszych niż wskazuje etykieta grupy.

Gdy wyświetlanie zajmuje więcej czasu niż aplikacja, do kolejki dodawane są dodatkowe klatki. To znowu powoduje zacinanie, a także może spowodować dodatkowe opóźnienie obrazu z powodu wypełniania bufora.

Rysunek 3. Długi frame B powoduje nieprawidłowe tempo 2 ramek – A i B.

Biblioteka Frame Pacing rozwiązuje ten problem, używając bariery synchronizacji (EGL_KHR_fence_syncVkFence), aby wstrzyknąć do aplikacji opóźnienia, które pozwalają ścieżce wyświetlania nadrobić zaległości, zamiast pozwalać na gromadzenie się ciśnienia wstecznego. Ramka A nadal zawiera dodatkową ramkę, ale ramka B jest już prawidłowa.

Rysunek 4. Ramki C i D czekają na prezentację.

W grze Mir 2 zastosowano bibliotekę Frame Pacing, korzystając z wbudowanej w Unity funkcji Optimized Frame Pacing. W rezultacie tego działania znacznie poprawiła się wydajność renderowania, a w szczególności odsetek wolnych sesji zmniejszył się z 40% do 10%.

Rysunek 5. Poprawa dotycząca powolnych sesji po zintegrowaniu biblioteki Frame Pacing.

Po zintegrowaniu biblioteki liczba wolnych sesji w Mir2 znacznie się zmniejszyła.

Rysunek 6. Rozkład liczby klatek na sekundę w grze po zintegrowaniu tempa animacji.
Każda grupa przedstawia odsetek sesji, podczas których 75% klatek było szybszych niż wskazuje etykieta grupy.

Pierwsze kroki z biblioteką Frame Pacing

Jak używać biblioteki Frame Pacing w natywnym silniku gry

Aby zintegrować z grą bibliotekę Android Frame Pacing, zapoznaj się z tymi przewodnikami:

Jak korzystać z biblioteki Frame Pacing w silniku gier Unity

Unity zintegrowało bibliotekę Android Frame Pacing z silnikiem. Aby włączyć tę funkcję w Unity, zaznacz pole wyboru Zoptymalizowane tempo klatek w sekcji Projekt: Ustawienia > Odtwarzacz > Ustawienia dla Androida > Rozdzielczość i prezentacja:

Rysunek 7. Włącz ustawienie Frame Pacing w Unity Engine.

Możesz też włączyć w kodzie logicznym opcję Optimized Frame Pacing, aby umożliwić Unity równomierne rozprowadzanie klatek i zmniejszenie zmienności liczby klatek na sekundę, co zapewni płynniejszą rozgrywkę.

Jak korzystać z biblioteki Frame Pacing w silniku gier Unreal

Wersja Unreal 4.25 i nowsze integruje bibliotekę do regulacji szybkości wyświetlania klatek na Androida, która jest częścią pakietu Android Game Development Kit. Z artykułu Mobile Frame Pacing dowiesz się, jak włączyć bibliotekę Android Frame Pacing i jak kontrolować tempo wyświetlania klatek za pomocą kodu C++.