
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 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 Android Frame Pacing API (Swappy) 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 Sitzung 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 Millisekunden 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 das Ziel des Entwicklers. Möglicherweise ist das Spiel CPU- oder GPU-gebunden, was zu einer Überhitzung führt, die einen gedrosselten thermischen Zustand aktiviert. Es kann auch sein, dass die Framerate des Spiels nicht mit der Displayaktualisierungsrate des Geräts übereinstimmt.
Was ist Swappy?
Die Android Frame Pacing Library, auch Swappy genannt, 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 Swappy verbessert
Bei Mir 2 (미르2: 왕의 귀환) gab es ein Problem mit instabiler Renderingleistung. 40% der Sitzungen waren langsam, bei einer Framerate von 20 fps, was deutlich über dem Grenzwert von 20% von Google Play liegt.

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.

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.

Die Swappy-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.

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

Die Anzahl der langsamen Sitzungen bei Mir2 konnte durch die Integration von Swappy deutlich reduziert werden.

Jeder Bucket entspricht dem Prozentsatz der Sitzungen, bei denen 75% der Frames schneller als das Bucket-Label waren.
Erste Schritte mit Swappy
Swappy in nativen Game-Engines verwenden
In den folgenden Anleitungen erfahren Sie, wie Sie die Android Frame Pacing-Bibliothek in Ihr Spiel einbinden:
- Android-Frame-Pacing in Ihren Vulkan-Renderer einbinden
- Android-Frame-Pacing in Ihren OpenGL-Renderer einbinden
Swappy in der Unity-Game Engine verwenden
Unity hat Android Frame Pacing 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:

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.
Swappy in der Unreal-Game-Engine verwenden
In Unreal 4.25 und höher ist die Android Frame Pacing Library integriert, die Teil des Android Game Development Kits ist. Im Artikel Frame-Pacing für Mobilgeräte wird beschrieben, wie Sie die Android Frame Pacing Library aktivieren und das Frame-Pacing über C++-Code steuern.
Weitere Informationen finden Sie unter Langsame Sitzungen und Swappy.