한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 Lag 白皮書 › L1 用戶端遊戲程式

畫格時間尖峰 Frame hitch

原因 ID cg-hitch · 主要負責 遊戲開發團隊(用戶端開發)

在含圖解與實驗的完整版中開啟卡片 →

某一個畫格的計算時間比平常多出好幾倍,畫面短暫停住。

為什麼 技能特效暴增、大量生成(spawn)、整個 UI 重新整理,全擠在同一個畫格 → 於是 無法在 16.7ms 內完成,花了 50~300ms → 畫面上 畫面頓一下,下一個畫格所有東西一次移動到位

症狀
卡頓, 定格
因素
停滯
誰會遇到
只有我
何時
人潮湧入時, 做特定動作時, 偶爾隨機發生
負責單位
主要負責 遊戲開發團隊(用戶端開發)
遊戲開發團隊要做的事
把繁重的工作分散到多個畫格、用 profiler 找出飆高的畫格、設定特效數量上限。
數值參考
60FPS 時一個畫格是 16.7ms。只要出現一個超過 50ms 的畫格,就很容易讓人覺得「卡了一下」。
圖表上
偶爾隨機飆高 · 畫格時間
查看位置
用 PresentMon 錄下遊戲中的畫格時間(FrameTime),以及 CPU、GPU 在該畫格花費的時間(CPUBusy、GPUBusy)。行動裝置看 Android vitals 的慢速工作階段(slow session)與渲染緩慢指標
符合的跡象
平常在 16.7ms 左右的畫格時間往上衝到超過 50ms 的瞬間,與技能演出、大量生成、整個 UI 重新整理重疊,而當下 ping 沒有變化
不符合的跡象
畫格時間平穩、只有其他角色頓一下時,屬於「沒有內插緩衝或緩衝太短」這類網路端問題。飆高的間隔規律時,先查「用戶端垃圾回收」
確認方式
在玩家端環境確認

出處

  1. Slow rendering Android (Google)
    要達到 60FPS,一個畫格必須在 16ms 內畫完;來不及就會跳過畫格,看起來像卡頓(jank)
  2. Slow Sessions (games only) Android (Google)
    Android vitals 把超過 50ms(20FPS)或 34ms(30FPS)的遊戲畫格視為慢速畫格
  3. PresentMon Capture Application (README-CaptureApplication.md) Intel
    FrameTime(畫格之間的 CPU 時間)、CPUBusy 與 GPUBusy(產生該畫格時 CPU、GPU 所花的時間)

相關原因

同一層:L1 用戶端遊戲程式

同一症狀(卡頓)在其他層的原因

查看含圖解與實驗的完整版卡片