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

遊戲 Lag 白皮書 › 只有部分人遇到的問題

慢的人在別人畫面上快轉移動 Laggy player seen by others (bursty inputs)

原因 ID pt-slow-burst · 主要負責 遊戲開發團隊(伺服器開發) · 協同 外部(外部)

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

線路差的人,輸入會忽快忽慢、成批抵達伺服器。伺服器每個 tick 收到多少就套用多少時,在其他人眼中,那個角色會頓一下後一次走好幾步。

為什麼 慢的人的移動指令,有的 tick 抵達 0 個,有的 tick 一次抵達 2~3 個 → 於是 伺服器在收到的 tick 一次全部套用,那個角色的位置呈階梯式變化 → 畫面上 在其他人畫面上,只有那個角色頓一下後一次快轉移動。其他都正常

症狀
快轉, 瞬移
因素
抖動, 遺失
誰會遇到
只有特定角色看起來怪怪的, 特定地區/電信業者
何時
一直都有, 移動中/切換地圖時
負責單位
主要負責 遊戲開發團隊(伺服器開發) · 協同 外部(外部)
遊戲開發團隊要做的事
用每位玩家各自的輸入緩衝把指令平均分配套用,依輸入序號按原本的間隔套用;只加長其他人畫面上的內插緩衝並不夠(因為伺服器記錄的位置本身就是階梯狀)。
外部要做的事
引導慢的玩家改用有線連線,並檢查 Wi-Fi 與分享器。
數值參考
抖動 80ms 時,在 20 tick(50ms)伺服器上,每個 tick 的指令數會在 0~3 個之間波動。
圖表上
只有部分偏高 · 各玩家每個 tick 套用的指令數、各玩家的抖動
查看位置
在伺服器端封包擷取中只篩選被回報玩家送出的封包,計算每個 tick 間隔(例:50ms)抵達幾個,並與其他玩家比較。有伺服器 log 的話,查看各玩家每個 tick 套用的移動指令數與輸入序號
符合的跡象
只有被回報玩家的封包在每個 tick 間 0 個與 2~3 個之間跳動、成批抵達,且該玩家的抖動、封包遺失偏高,其他玩家的封包則均勻抵達。該玩家改用有線後會減少
不符合的跡象
多個角色同時快轉時,是伺服器 tick 延遲或觀看者那端的線路。抵達與套用都均勻、卻只有那個角色看起來亂跳時,是觀看端的內插或顯示問題
確認方式
用基礎設施工具確認(不需要遊戲程式碼)
深入了解
在伺服器權威架構下,這是正常行為。一個慢的人造成的 lag,在別人眼中只會呈現為「那個人動作怪怪的」,不會影響其他人的操作或怪物的動作。只是與那個人直接往來的事(交易、隊伍機制、PvP 判定)也會跟著延遲。

出處

  1. Peeking into VALORANT's Netcode Riot Games
    伺服器把抵達的輸入依 tick 順序放入每位玩家的移動佇列,空了就用預測補上。校正只有該玩家看得到,其他人看到的是流暢的畫面
  2. State Synchronization Gaffer On Games
    即使每秒送 60 次,封包也會成批抵達,例如某個畫格 2 個、下一個畫格 0 個
  3. Source SDK 2013: player.cpp Valve
    把成批湧入的指令分散到各伺服器 tick 處理(meter out)

相關原因

同一層:只有部分人遇到的問題

同一症狀(快轉)在其他層的原因

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