物理与网络同步

自动关联目录:物理与网络同步

1. 定位

物理模拟是网络同步里最难的部分——因为它是确定性的反义词:微小差异会被积分放大,两端很快跑出完全不同的结果。

一句话定位:能不用网络物理就不用。用"服务端算关键结果 + 客户端做表现"的方式,比同步刚体容易一个数量级。

2. 四种方案

方案说明适用难度
不模拟,只查询物理只做判定,不动绝大多数场景低
服务端模拟 + 复制变换权威,但带宽高少量重要物体中
预测 + 校正客户端先跑,服务端纠正载具、玩家控制的物理体高
只同步关键状态位置 + 朝向 + 速度,客户端插值常见折中中

大多数"看起来需要网络物理"的需求,其实可以降级:

需求降级做法
打碎一堆箱子服务端算哪些碎 + 客户端本地演出
击飞尸体服务端给一个冲量 + 客户端本地模拟(不要求一致)
可推动的箱子服务端权威位置 + 客户端插值
载具才真的需要预测 + 校正

3. 复制什么

方案复制内容带宽
每帧复制变换位置 + 旋转高
只复制速度 + 关键事件低需要客户端能自行积分
复制"目标状态"客户端插值过去中

实用做法:服务端权威 + 以较低频率复制"位置/朝向/速度"三元组,客户端用插值平滑(见 网络预测与回滚)。

4. 为什么两端会不一致

原因说明
浮点非确定性微小的初始差异被积分放大
帧率不同积分步长不同 → 结果不同
碰撞顺序不同解算顺序影响结果
客户端本地扰动本地的碰撞事件只在一端发生

因此"让两端物理完全一致"在工程上基本不可行,可行的是"服务端权威 + 客户端尽量平滑地跟上"。

5. 代价与权衡

设计收益代价什么时候不该用
完全不联网物理最简单可靠表现可能两端不同要求严格一致时不行
每帧复制变换一致带宽高、抖动可见大量物体不可用
预测 + 校正手感好实现最复杂,回滚难做只有玩家直接控制的物体值得
低频复制 + 插值折中有延迟对延迟不敏感的物体
服务端权威防作弊(见 Security)延迟关键判定必须有

6. 踩坑与排查

坑现象怎么验证
物理体参与复制抖动、拉扯降低复制频率 + 客户端插值
客户端改物理状态被服务端覆盖,抖动要走 Server RPC
期望两端完全一致永远做不到物理不是确定性的(帧率/顺序都会影响)
每帧复制所有物理体带宽爆炸只复制关键物体,降频
高速物理体穿透客户端看不到用 Sweep(见 碰撞与查询)
修复抖动只加复制频率治标应该加插值/平滑
判定用客户端物理结果可作弊服务端权威

7. 排查顺序

1. 先问:真的需要联网物理吗?→ 能降级就降级
2. 抖动?→ 复制频率 + 客户端插值(不是只提频率)
3. 拉扯?→ 是否有客户端本地修改
4. 不一致?→ 接受它,改为服务端权威 + 表现层容错
5. 手感差?→ 才考虑预测 + 校正(成本最高)
6. 带宽?→ 只同步关键物体 + 降频

参考