分析及提升遊戲效能

本指南說明如何分析及最佳化 Android 裝置上的遊戲效能,提供流暢的使用者體驗。內容涵蓋找出效能瓶頸、區分 CPU 和 GPU 問題,以及驗證最佳化結果。

無論遊戲多麼有趣或引人入勝,如果無法在行動裝置上順暢運作,玩家就不會喜歡,遊戲也不會成功。即使是好玩的遊戲,也可能出現每秒影格數 (FPS) 偏低或裝置過熱等問題。這些問題會讓玩家不滿意。因此,提升遊戲效能至關重要,您必須瞭解如何進行最佳化。

成效最佳化程序包含下列步驟:

  1. 評估整體遊戲效能。以每個場景為單位量化效能下降情形,找出異常狀況。

  2. CPU 和 GPU 繫結檢查。判斷根本原因,是 CPU 還是 GPU 限制。

    工具:Unreal Insight、Unity Profiler、Perfetto 和效能評估工具。

  3. CPU 最佳化。修正發現的效能瓶頸。

    工具:Unreal Insight、Unity Profiler、Perfetto 和 Simpleperf。

  4. GPU 最佳化。修正發現的效能瓶頸。

    工具:RenderDoc、Arm Mobile Studio、AGI、廠商專屬工具。

  5. A/B 測試。進行 A/B 測試,嚴格驗證所導入最佳化措施的成效。

    工具:Unreal Insight、Unity Profiler、Perfetto 和效能評估工具、CPU 或 GPU 頻率鎖定,以及 RenderDoc。

  6. 這個疊代程序 (1-5) 會持續進行,直到成功達到目標 FPS 和熱參數為止。

必要條件

全面分析遊戲成效

您必須檢查遊戲的整體效能,並找出任何場景效能下降或異常情況。最佳化遊戲前,請先檢查目前的效能。由於遊戲包含許多 UI 和場景,因此請分析 CPU 或 GPU 使用率偏高的場景,或效能異常的版面配置,監控效能下降情形,以及每個場景的 CPU 或 GPU 使用率。

  1. 量化效能下降程度:使用效能評估工具評估遊戲的整體效能。以場景為單位評估效能,找出效能降低或異常的特定區域。
  2. 找出有問題的場景:分析資料,找出 CPU 或 GPU 使用率偏高的場景,或是螢幕版面配置無法產生預期效能的場景。
  3. 收集追蹤資料:使用追蹤工具收集已找出問題場景的詳細效能資料。

找出 CPU 或 GPU 瓶頸

如果遊戲未達到目標 FPS,請判斷是否受 CPU 或 GPU 限制。分析 CPU 和 GPU 行為是尋找最佳化機會的關鍵,即使裝置在遊戲期間過熱或耗電量過高,也應進行分析。您可以使用各種方法,判斷系統是否受 CPU 或 GPU 限制。

  1. 分析追蹤記錄資料:使用偏好的工具分析追蹤記錄資料:

    • Unreal Insight (Unreal Engine):分析追蹤記錄,查看 GameThreadRenderThreadRHIThread 的時間。
      • 如果 GameThreadRenderThread 超過影格時間限制 (例如 30 FPS 為 33.3 毫秒),遊戲就會受 CPU 限制
      • 如果 RHIThread 執行時間過長或佔據大部分的影格時間,表示遊戲受到 GPU 限制
    Unreal Insight 追蹤時間軸,顯示 GameThread、RenderThread 和 RHIThread 的執行時間
    圖 2. Unreal 洞察追蹤,包含 GameThread、 RenderThread 和 RHIThread (按一下可放大圖片)。
    • Unity 分析器 (Unity):如果主執行緒在 Gfx.WaitForPresentOnGfxThread 等標記上耗費大量時間,而轉譯執行緒顯示 Gfx.PresentFrame<GraphicsAPIName>.WaitForLastPresent,則遊戲會受 GPU 限制
    Unity Profiler 時間軸,顯示主執行緒等待 Gfx.WaitForPresentOnGfxThread
    圖 3. Unity Profiler 的 GPU 繫結範例 (按一下可放大)。
    • Perfetto:分析 CPU 核心指派作業和執行緒執行詳細資料。 透過詳細檢視執行緒執行資訊,這項分析有助於找出效能瓶頸。
    • CPU 負荷:追蹤記錄指出,GameThreadRenderThread 的工作負載與 VSync 結合後,會導致 RHI 執行緒的 QueuePresent 延遲,因此表示這是 CPU 繫結情境。

      Perfetto 追蹤記錄,顯示 GameThread、RenderThread 和 RHIThread 的執行時間
      圖 4. Perfetto 追蹤記錄,其中包含 CPU 執行詳細資料 (按一下即可放大)。
    • GPU 負荷:如果 GPU 完成時間超過影格時間限制 (例如 25 毫秒),遊戲就會受 GPU 限制。追蹤記錄指出 GPU 完成時間超過 25 毫秒,這表示是受 GPU 限制的情況。

      Perfetto 追蹤記錄,顯示 GPU 完成區塊等待 GPU 完成作業
      圖 5. 含有 GPU 負荷詳細資料的 Perfetto 追蹤記錄 (按一下即可放大)。
  2. 使用 Unreal Engine 的 stat 指令:

    • stat unit比較分配給遊戲、繪圖和 RHI 執行緒的時間。如果「遊戲」和「繪製」時間較短,但 RHI 時間持續超過影格時間限制,則遊戲會受 GPU 效能限制。舉例來說,如果所需 FPS 為 30 (相當於每個影格 33.33 毫秒),且「遊戲」和「繪圖」執行緒持續保持在 10 到 15 毫秒範圍內,但 RHI 持續超過 30 毫秒,則強烈建議使用 GPU 繫結情境。
    顯示影格、遊戲、繪圖、GPU 和 RHIT 執行時間的統計資料單位疊加層
    圖 6. Stat 單位有助於估算 GPU 繫結條件。
    • stat VulkanRHI檢查「佇列提交」和「佇列呈現」的持續時間。
    顯示 Queue Submit 和 Queue Present 的週期計數器,並以 Stat VulkanRHI 疊加顯示
    圖 7. Stat VulkanRHI 可協助估算 GPU 繫結條件 (按一下可放大)。
    • stat slow仔細檢查分配給遊戲、算繪和 RHI 執行緒的時間,找出阻礙。
  3. 查看成效指標:使用全面的遊戲成效分析結果。Android 裝置:

    • CPU 限制:CPU (標準化) 使用率超過 15%,但 GPU 使用率和 FPS 偏低。
    • 受 GPU 限制:GPU 使用率超過 90%。

    一般來說,如果 FPS 和 GPU 使用率偏低,但 CPU 使用率超過 15%,則可視為 CPU 負載過重。

    效能指標表,醒目顯示 CPU 繫結和 GPU 繫結情境
    圖 8. CPU 和 GPU 用量的效能指標。

盡量提高 CPU 效能

如果分析結果顯示遊戲受到 CPU 限制,請進一步調查,找出造成瓶頸的特定執行緒或 API。

如需詳細指引,請參閱「Android 的 CPU 和 GPU 最佳化訣竅」。

最佳化 GPU 效能

如果分析結果顯示遊戲受 GPU 限制,請使用影格偵錯工具進一步分析轉譯管道和繪圖呼叫。

如需詳細指引,請參閱「Android 的 CPU 和 GPU 最佳化訣竅」。

驗證最佳化成效

  1. 進行 A/B 測試:建立已導入最佳化功能的建構版本。
  2. 評估效能:使用與初始分析相同的工具和方法,評估最佳化建構版本的效能。
  3. 比較結果:比較新效能資料與初始資料,確認已解決瓶頸,且達到 FPS 和溫度目標。
  4. 反覆執行:重複分析和最佳化步驟,直到達到預期成效為止。

另請參閱