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

遊戲 Lag 白皮書 › 同步設計

Rollback netcode 預測失敗 Rollback misprediction

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

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

先預測對手的輸入並呈現出來,猜錯時就回溯重新計算。ping 越大,回溯的幅度越大。

為什麼 對手改變輸入(與預測不同) → 於是 實際輸入晚了 ping 的一半才抵達,於是回溯這段時間重新計算 → 畫面上 對手的動作跳過幾個畫格或突然改變

症狀
瞬移
因素
延遲, 抖動
誰會遇到
只有我
何時
做特定動作時, 偶爾隨機發生
負責單位
主要負責 遊戲開發團隊(用戶端開發)
遊戲開發團隊要做的事
搭配 1~3 個畫格的輸入延遲以縮小回溯幅度,並設定回溯上限。
數值參考
ping 100ms(單向 50ms)時,在 60fps 下約回溯 3 個畫格。加上 2 個畫格的輸入延遲,就減少到 1 個畫格。
圖表上
偶爾隨機飆高 · 回溯的畫格數、RTT(ping)
查看位置
由用戶端在每次回溯時記錄回溯的畫格數、當時的 RTT、輸入延遲設定、回溯與重新計算花費的時間
符合的跡象
回報對手動作亂跳的瞬間,回溯畫格數很大;平均回溯幅度約為(單向延遲 − 輸入延遲)÷ 畫格時間,ping 越大幅度越大
不符合的跡象
回溯幅度小卻仍出現卡頓時,是重新計算超過一個畫格時間的效能問題。回溯後兩邊畫面的結果仍持續不同時,是計算結果不一致(desync)
確認方式
需要遊戲伺服器/用戶端的 log 與指標

出處

  1. GGPO Rollback Networking SDK GGPO
    預測對手的輸入先往下執行,實際輸入不同時,從出現差異的時間點重新計算到現在
  2. 8 Frames in 16ms: Rollback Networking in 'Mortal Kombat' and 'Injustice 2' GDC
    以 rollback 消除 lockstep 的本地輸入延遲,在 16ms 內最多回溯 8 個畫格並重新計算

相關原因

同一層:同步設計

同一症狀(瞬移)在其他層的原因

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