Mir 2 使用 Swappy 提升轉譯效能

Mir 2:Return of the King 是一款由 Actoz Soft 授權,並由 HK ZHILI YAOAN LIMITED 使用 Unity Engine 開發的高品質《傳奇》IP 行動遊戲。

這款遊戲不僅完美重現韓國奇幻 MMORPG 代表作「Mir 2」的感受,還提供許多最受歡迎的遊戲內容,例如裝備收集、大規模沙漠攻擊和其他核心遊戲內容。

這款遊戲使用 Android Frame Pacing API (Swappy) 改善影格速率的穩定性,以便順暢轉譯,並大幅提升 Android Vitals (緩慢工作階段指標)。

Android Vitals 推出緩慢工作階段

緩慢工作階段是 Google Play 管理中心的 Android Vitals 指標。緩慢工作階段的緩慢影格比率超過 25%。緩慢影格指的是:

1) 在 20fps 時,在前一個影格後 50 毫秒內未顯示。2) 在 30fps 時,在前一個影格後 34ms 內未顯示。

Play 會在適當情況下,開始減少顯示無法達到 20 FPS 的遊戲。

有許多原因可能導致畫面上顯示或算繪的時間比開發人員的目標長。遊戲可能會受到 CPU 或 GPU 限制,導致過熱而啟動節流熱力狀態,或是遊戲的幀率與裝置的螢幕更新率不相符

什麼是 Swappy

Android Frame Pacing 程式庫 (又稱為 Swappy) 是 AGDK 程式庫的一部分。Swappy 可協助 OpenGL 和 Vulkan 遊戲在 Android 裝置上流暢地顯示畫面,並修正影格同步情形。

如果裝置支援該程式庫,這個程式庫就能處理多個刷新率,進而讓遊戲在顯示影格時更具彈性。舉例來說,對於支援 60 Hz 和 90 Hz 刷新率的裝置,為保持運作順暢,無法產生每秒 60 個影格數的遊戲,系統會將其每秒影格數調降至 45 而非 30。程式庫會偵測預期的遊戲畫面更新率,並據此自動調整影格顯示時間。

Frame Pacing 程式庫也會避免不必要的螢幕更新,延長電池續航力。舉例來說,如果遊戲以每秒 60 個影格轉譯,但螢幕以 120 Hz 更新,則每個影格的畫面都會更新兩次。Frame Pacing 程式庫會將刷新率設為裝置支援且最接近目標影格速率的值,避免發生上述情況。

Mir 2 如何運用 Swappy 改善算繪效能

Mir 2 (미르 2: 왕의 귀환) 的算繪效能不穩定,在 20 FPS 的幀率門檻下,會發生 40% 的慢速工作階段,遠高於 Google Play 的 20% 門檻。

圖 1. 整合 Swappy 前,緩慢工作階段指標。

Mir 2 (미르 2: 왕의 귀환) 是高保真圖像遊戲,部分裝置無法維持穩定的 FPS。他們的影格速率分布顯示許多工作階段的 FPS 低於 20fps。

圖 2. 整合 Swappy 前,遊戲的 FPS 分布情形。
每個區塊代表的工作階段百分比,其 75% 影格比區塊標籤快。

當顯示工作負載所花的時間超過應用程式工作負載的時間時,系統會將額外的影格新增至佇列。如此一來,畫面會再次出現延遲,也可能因為緩衝區填充而造成額外的影格延遲。

圖 3 對於 2 個影格 (A 和 B),長的影格 B 同步處理不正確。

透過同步處理屏障 (EGL_KHR_fence_syncVkFence) 將等候插入的影格插入應用程式,該應用程式允許顯示管道擷取而不允許建構背壓,程式庫得以解決這個問題。影格 A 仍顯示額外影格,但影格 B 現在已經可以正確顯示。

圖 4. 等候顯示的影格 C 和 D。

Mir 2 善用 Unity 內建的 最佳化影格使用速度功能,輕鬆整合 Swappy 程式庫。這項動作讓轉譯效能大幅提升,特別是將「工作階段緩慢」指標從 40% 降至 10%

圖 5. 整合 Swappy 後,工作階段速度變慢的改善情形。

在整合 Swappy 後,Mir2 的緩慢工作階段數量大幅減少。

圖 6. 整合 Swappy 後的遊戲 FPS 分布情形。
每個區塊代表的工作階段百分比,其 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」核取方塊。

圖 7. 在 Unity Engine 中啟用 Frame Pacing。

或者,您也可以在邏輯程式碼中以程式輔助方式啟用最佳化影格同步選項,讓 Unity 平均分配影格,以減少影格速率的差異,進而打造更流暢的遊戲體驗。

如何在 Unreal 遊戲引擎中使用 Swappy

Unreal 4.25 以上版本整合了 Android Frame Pacing 資料庫 (屬於 Android Game Development Kit 的一部分)。「行動影格放送速度」一文說明如何啟用 Android Frame Pacing 資料庫,以及如何透過 C++ 程式碼控制影格放送速度。

如要進一步瞭解相關資訊,請參閱「緩慢工作階段」和「Swappy」。