遊戲 Lag 白皮書 › 同步設計
雙重 tick 等待 Double tick quantization
原因 ID sy-double-tick · 主要負責 遊戲開發團隊(伺服器開發)
在含圖解與實驗的完整版中開啟卡片 →
請求先累積到下一個 tick 才處理,結果又等到再下一個 tick 才送出時,tick 間隔會被加上兩次。
為什麼 收到的請求在下一個 tick 處理 → 於是 處理結果也累積到下一個傳送 tick 才送出 → 畫面上 線路 ping 很低,反應卻固定慢了約 tick 間隔的 1.5 倍。10 tick 伺服器平均 0.15 秒,最差 0.2 秒
- 症狀
- 輸入延遲
- 因素
- 延遲
- 誰會遇到
- 整個伺服器
- 何時
- 一直都有
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發)
- 遊戲開發團隊要做的事
- 在處理的那個 tick 立即送出回應、提高 tick rate、重要的回應立即傳送。
- 數值參考
- 10 tick 伺服器一個 tick 是 100ms,光是 tick 等待平均就多出 150ms,最差多出 200ms。只等一次的話平均是 50ms。
- 圖表上
- 一開始就一直偏高 · 從請求抵達到送出回應的時間
- 查看位置
- 在伺服器端的封包擷取中,讓測試帳號重複做同一個動作(例:使用道具),測量請求封包抵達時間與對應回應封包送出時間的間隔。有伺服器 log 的話,查看請求抵達時間、處理的 tick 編號、送出回應的時間
- 符合的跡象
- 伺服器內部花費的時間平均約為 tick 間隔的 1.5 倍、最多約 2 倍,且與 RTT 無關、固定不變
- 不符合的跡象
- 伺服器內部時間平均在 tick 間隔的一半左右時,tick 等待只有一次。比 tick 間隔長且忽長忽短時,要查超出 tick 預算
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
出處
- Peeking into VALORANT's Netcode Riot Games
抵達的輸入最多要等一個 tick 才到 tick 邊界,套用與傳送又要再花一個畫格。tick rate 越高越短 - VALORANT's 128-Tick Servers Riot Games
延遲有一部分來自網路,一部分來自伺服器 tick rate - NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
NetworkVariable 的變更會累積到每個網路 tick 再一起傳送
相關原因
同一層:同步設計
同一症狀(輸入延遲)在其他層的原因
查看含圖解與實驗的完整版卡片