游戏卡顿白皮书 › L1 客户端游戏进程
过度外推(航位推测) Over-extrapolation / dead reckoning
原因 ID cg-extrap · 主责 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
数据包没到的这段时间,按最后的速度继续显示移动,发现猜错后再纠正回去。
起因 数据包接收中断,按最后的方向和速度继续移动 → 结果 实际上对方已经停下或转向 → 画面表现 对方角色往前走了好一段,又突然被挪到真实位置,或者穿墙而过。数据包到达间隔忽长忽短时,会反复冲到前面又被拽回,移动时像在颤动
- 症状
- 瞬移, 一卡一卡
- 因素
- 丢包, 抖动
- 谁会遇到
- 只有我
- 何时出现
- 偶尔随机
- 负责方
- 主责 研发团队·客户端开发
- 研发团队要做的事
- 设定外推时长上限(例如 200~250 ms),猜错时平滑收敛。
- 数值参考
- 速度为 6 m/s 时,只要错 300 ms,位置就会偏差 1.8 m。
- 监控图上
- 偶发随机尖峰 · 外推时长、位置校正距离
- 查看位置
- 记录用外推绘制其他角色的时长,以及新数据包到达后修正位置的距离
- 确认依据
- 每次数据包中断,外推时长都没有上限地拉长,之后的校正距离达到几 m
- 排除依据
- 外推时长很短仍出现瞬移,说明丢包、延迟本身过大,查线路和路由一侧
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- Interpolation and extrapolation (Netcode for Entities 6.5) Unity
下一张快照没按时到达时,按相同方向和速度继续移动的外推经常出错,所以要设上限(Unity 默认 20 tick,60 Hz 下约 1/3 秒) - Peeking into VALORANT's Netcode Riot Games
用推测填补晚到或缺失的数据,一旦猜错就会与服务器不一致,角色会跳一下,或像滑行一样被校正
相关原因
同一层:L1 客户端游戏进程
其他层中同样导致“瞬移”的原因
查看含图示和实验的原卡片