遊戲 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 沒有變化
- 不符合的跡象
- 畫格時間平穩、只有其他角色頓一下時,屬於「沒有內插緩衝或緩衝太短」這類網路端問題。飆高的間隔規律時,先查「用戶端垃圾回收」
- 確認方式
- 在玩家端環境確認
出處
- Slow rendering Android (Google)
要達到 60FPS,一個畫格必須在 16ms 內畫完;來不及就會跳過畫格,看起來像卡頓(jank) - Slow Sessions (games only) Android (Google)
Android vitals 把超過 50ms(20FPS)或 34ms(30FPS)的遊戲畫格視為慢速畫格 - PresentMon Capture Application (README-CaptureApplication.md) Intel
FrameTime(畫格之間的 CPU 時間)、CPUBusy 與 GPUBusy(產生該畫格時 CPU、GPU 所花的時間)
相關原因
同一層:L1 用戶端遊戲程式
同一症狀(卡頓)在其他層的原因
查看含圖解與實驗的完整版卡片