Mir 2 verbessert die Renderingleistung durch die Frame-Pacing-Bibliothek

Mir 2: Return of the King

Mir 2: Return of the King ist ein hochwertiges Legend IP-Mobilspiel, das von Actoz Soft autorisiert und von HK ZHILI YAOAN LIMITED mit der Unity-Game-Engine entwickelt wurde.

Dieses Spiel fängt nicht nur das Gefühl von Mir 2 ein, einem repräsentativen koreanischen Fantasy-MMORPG, sondern bietet auch viele der beliebtesten Spielinhalte wie die Ausrüstungssammlung, den groß angelegten Sandangriff und andere Kernelemente des Gameplays.

Im Spiel wurde die Frame Pacing-Bibliothek (Swappy) von Android verwendet, um die Stabilität der Framerate zu verbessern, ein flüssiges Rendering zu erzielen und die Android Vitals-Messwerte (Messwert „Langsame Sitzungen“) deutlich zu steigern.

Daten zu langsamen Sitzungen in Android Vitals

Langsame Sitzungen ist ein Android Vitals-Messwert in der Google Play Console. Bei einer langsamen Sitzung sind mehr als 25% der Frames langsam. Ein Frame ist langsam, wenn er

  1. Bei 20 fps wird er nicht innerhalb von 50 ms nach dem vorherigen Frame angezeigt.

  2. Bei 30 fps wird er nicht innerhalb von 34 ms nach dem vorherigen Frame angezeigt.

Google Play wird früher oder später dazu übergehen, Nutzern Spiele nicht mehr zu empfehlen, die keine 20 fps auf ihren Smartphones erreichen.

Es gibt viele Gründe, warum ein Frame länger auf dem Bildschirm angezeigt oder gerendert wird als die vom Entwickler festgelegte Zielframezeit. Möglicherweise ist das Spiel CPU- oder GPU-gebunden, überhitzt sich (was zu thermischer Drosselung führt) oder es gibt eine Abweichung zwischen der Framerate des Spiels und der Displayaktualisierungsrate des Geräts.

Was ist die Frame-Pacing-Bibliothek?

Die Frame-Pacing-Bibliothek von Android, auch als Swappy bezeichnet, ist Teil der AGDK-Bibliotheken. Swappy hilft OpenGL- und Vulkan-Spielen, ein flüssiges Rendering und eine korrekte Framerate auf Android zu erreichen.

Die Bibliothek unterstützt mehrere Bildwiederholraten, sofern sie vom Gerät unterstützt werden. Dadurch kann ein Frame in einem Spiel flexibler dargestellt werden. Bei einem Gerät, das sowohl eine Bildwiederholrate von 60 Hz als auch 90 Hz unterstützt, kann beispielsweise ein Spiel, das nicht 60 Bilder pro Sekunde liefern kann, auf 45 fps statt 30 fps herabgesetzt werden, um flüssig zu bleiben. Die Bibliothek erkennt die erwartete Framerate des Spiels und passt die Framepräsentationszeiten automatisch an.

Die Frame-Pacing-Bibliothek verbessert auch die Akkulaufzeit, da unnötige Displayaktualisierungen vermieden werden. Wenn ein Spiel beispielsweise mit 60 fps gerendert, das Display aber mit 120 Hz aktualisiert wird, wird der Bildschirm für jeden Frame zweimal aktualisiert. Die Frame-Pacing-Bibliothek vermeidet dies, indem sie die Bildwiederholrate auf den vom Gerät unterstützten Wert festlegt, der der Zielframerate am nächsten kommt.

So hat Mir 2 die Renderingleistung mit der Frame-Pacing-Bibliothek verbessert

Bei Mir 2 (미르2: 왕의 귀환) gab es ein Problem mit instabiler Renderingleistung. Bei einer Framerate von 20 fps kam es bei 40% der Sitzungen zu Verzögerungen. Das ist deutlich über dem Grenzwert von 20% von Google Play.

Abbildung 1 Messwert für langsame Sitzungen vor der Integration der Frame-Pacing-Bibliothek.

Mir 2 (미르2: 왕의 귀환) ist ein Spiel mit High-Fidelity-Grafiken. Auf einigen Geräten ist es schwierig, eine stabile Bildrate aufrechtzuerhalten. Die Framerate-Verteilung zeigt, dass viele Sitzungen mit einer Framerate von weniger als 20 fps ausgeführt werden.

Abbildung 2. Die FPS-Verteilung des Spiels vor der Integration der Frame Pacing-Bibliothek.
Jeder Bucket entspricht dem Prozentsatz der Sitzungen, bei denen 75% der Frames schneller als das Bucket-Label waren.

Wenn die Displayarbeitslast länger als die Anwendungsarbeitslast dauert, werden einer Warteschlange zusätzliche Frames hinzugefügt. Das führt wieder zu Rucklern und kann aufgrund von Buffer-Stuffing zu einer zusätzlichen Frame-Latenz führen.

Abbildung 3: Der lange Frame B führt zu einem falschen Timing für zwei Frames – A und B.

Die Frame Pacing-Bibliothek löst dieses Problem mithilfe von Synchronisationssperren (EGL_KHR_fence_sync und VkFence), um Wartezeiten in die Anwendung einzuschleusen, die es der Displaypipeline ermöglichen, aufzuschließen, anstatt einen Rückstau zuzulassen. Frame A enthält weiterhin einen zusätzlichen Frame, Frame B wird jetzt jedoch korrekt dargestellt.

Abbildung 4: Frames C und D warten auf die Präsentation.

Mir 2 hat die Frame Pacing-Bibliothek ganz einfach integriert, indem die integrierte Funktion Optimized Frame Pacing (Optimiertes Frame Pacing) von Unity verwendet wurde. Die Maßnahme führte zu einer deutlichen Verbesserung der Renderingleistung, insbesondere sank der Messwert für langsame Sitzungen von 40% auf 10%.

Abbildung 5: Verbesserung bei langsamen Sitzungen nach der Integration der Frame-Pacing-Bibliothek.

Die Anzahl der langsamen Sitzungen bei Mir2 wurde nach der Integration der Bibliothek deutlich reduziert.

Abbildung 6: Die FPS-Verteilung des Spiels nach der Implementierung des Frame-Pacings.
Jeder Bucket entspricht dem Prozentsatz der Sitzungen, bei denen 75% der Frames schneller als das Bucket-Label waren.

Erste Schritte mit der Frame-Pacing-Bibliothek

Frame Pacing-Bibliothek in nativen Game-Engines verwenden

In den folgenden Anleitungen erfahren Sie, wie Sie die Android Frame Pacing-Bibliothek in Ihr Spiel einbinden:

Frame Pacing-Bibliothek in der Unity-Game-Engine verwenden

Unity hat die Android Frame Pacing-Bibliothek in seine Engine integriert. Wenn du diese Funktion in Unity aktivieren möchtest, setze ein Häkchen unter Projekteinstellungen > Player > Einstellungen für Android > Auflösung und Darstellung bei Optimiertes Frame-Pacing:

Abbildung 7: Aktivieren Sie das Frame-Pacing in der Unity-Engine.

Alternativ können Sie die Option Optimiertes Frame-Pacing programmatisch in Ihrem Logikcode aktivieren, damit Unity Frames gleichmäßig verteilt und so für weniger Schwankungen bei der Framerate sorgt, was zu einem flüssigeren Gameplay führt.

Frame Pacing-Bibliothek in der Unreal-Game-Engine verwenden

In Unreal 4.25 und höher ist die Frame-Pacing-Bibliothek von Android eingebunden, die Teil des Android Game Development Kits ist. Im Artikel Frame-Pacing für Mobilgeräte wird beschrieben, wie Sie die Android-Frame-Pacing-Bibliothek aktivieren und das Frame-Pacing über C++-Code steuern.