网络物理同步
移动可以预测回滚、命中可以延迟补偿,但物理是联机同步里最硬的骨头——一堆刚体碰来碰去,微小的浮点误差会被放大成完全不同的结果。本篇讲清物理同步为什么难、UE5 的 Chaos 方案边界在哪、以及工程上什么时候该果断放弃物理同步改用降级方案。
一句话结论
物理难同步是因为浮点非确定性 + 接触求解顺序敏感会放大误差;UE5 用 Async Physics 固定步长 + resimulation 缩小分歧,但代价高,多数场景该用「权威+插值」降级。
场景问题
打个比方:同步一个角色的移动,像两人各按同一张菜谱做同一道菜——步骤明确、只有一口锅,做出来差不多,差了也好对账。同步一堆刚体物理,像两人各推倒同一叠多米诺骨牌:手指位置差 0.1 毫米,倒下来的形状就完全不同,而且第一块的偏差会被后面每一块继续放大。
更麻烦的是「先解哪个接触」这件事:同一堆箱子,先算左边那个还是先算右边那个,塌的方向就不一样——像收拾一堆叠着的书,先抽哪本决定整堆怎么倒。两端遍历顺序稍有差别,结果就分岔。
所以物理同步不走「两端各推一次骨牌」,只能走「一端推,另一端照着录像摆」(服务器权威 + 状态同步)。想让客户端也先推、错了再重来(resimulation),等于每次分歧都把整叠骨牌重摆一遍再推——能做,但贵得多,所以只给少数关键物体开。
「载具、成堆的箱子、布娃娃,多人怎么同步?」——直觉是「复制物理状态就行」,但物理不是复制几个数字那么简单。两台机器跑同样的物理,因为浮点差异和求解顺序不同,几秒后可能一辆车在坡上、另一台上翻了。物理同步的核心矛盾是确定性:要么保证两端算出完全一样的结果(极难),要么以一端为权威把结果同步过去(有延迟和穿插)。
实现方案
1. 为什么物理比移动难
- 浮点非确定性:不同 CPU/编译器/指令顺序下浮点运算结果有微小差异(尤其
sin/sqrt、SIMD、编译优化)。单步差异极小,但物理是迭代系统——每帧的输出是下帧的输入,误差指数放大。 - 接触求解迭代顺序敏感:多刚体接触用迭代求解器(约束一个个解),解的顺序不同结果不同。两端 Actor 遍历顺序稍有差异,堆叠的箱子就会塌向不同方向。
- 多刚体耦合:一个物体的误差通过碰撞传给相邻物体,误差在系统里传播放大。
- 对比移动:单个角色的移动是低耦合、可复算的(就一个胶囊体、输入明确),所以 CMC 的预测回滚可行;一堆互相碰撞的刚体不具备这种可复算性。
2. Chaos 的确定性边界
UE5 的物理引擎是 Chaos(取代 PhysX)。要点:
- Chaos 在受控条件下可做到确定性(固定步长、固定求解迭代、相同输入、相同浮点环境),但跨平台完全确定性不做保证——这正是物理同步不能简单依赖「两端各自模拟」的原因。
- 因此网络物理不走「两端各算」,而走「一端权威 + 状态同步/重演」。
3. UE5 的网络物理模型
NetworkPhysicsComponent:UE5(5.3/5.4+ 演进中)提供的网络物理支持组件,把物理对象纳入预测/复算框架。- Async Physics Tick:物理在独立的固定步长(如固定 60Hz)异步 tick,脱离渲染帧率波动。固定步长是可复算的前提——变步长物理无法重演。
- 输入与状态按
PhysicsStep对齐:输入、状态快照都打上物理步编号,才能在需要时对齐重演。 - Resimulation(物理回滚重演):类似 CMC 的思路——客户端预测物理,收到服务器权威状态发现分歧时,回滚到该物理步、用权威状态重新模拟到当前。代价极高:重演多个物理步 × 多个刚体,CPU 开销远大于移动回滚。
4. 工程降级方案与选型
多数项目不做完整物理同步,按对象重要性降级:
| 对象 | 方案 | 说明 |
|---|---|---|
| 载具(玩家开的车) | 服务器权威 + 客户端插值/预测 | 位置/朝向/速度当属性复制,客户端插值平滑;重要且玩家直接操控,值得投入 |
| 可交互道具(桶、箱) | Dormancy + 事件同步 | 平时休眠(Dormancy),被击中/移动时发事件同步一次结果,不做连续物理 |
| 纯装饰碎片(爆炸残骸、布料) | 不同步,各端本地模拟 | 视觉表现,不影响 gameplay,各端自己算,允许不一致 |
选型判据:
物理结果是否影响 gameplay 公平/胜负? 影响 → 服务器权威(哪怕只同步结果);不影响 → 本地模拟不同步。连续实时物理同步只留给「玩家直接操控且影响胜负」的少数对象(载具)。
何时果断放弃物理同步:绝大多数散落刚体、装饰、非关键碰撞——不同步,各端本地跑,接受视觉差异。强行全同步只会烧 CPU 和带宽换来玩家根本不在意的一致性。
5. 一句话记住三种「局内同步」的差别
三篇局内同步经常被混成一锅,实际各管一件事:
| 管什么 | 一句话 | 类比 | |
|---|---|---|---|
| 移动预测(CMC) | 我自己的动作要立刻响应 | 先按记忆走,服务器账单来了再对账重走 | 先自己吃,账单来了对账 |
| 延迟补偿(回溯) | 我打别人打不打得中 | 服务器倒带回你开枪那一刻再判定 | 回看录像判越位 |
| 网络物理(本篇) | 一堆刚体的结果两端要不要一致 | 一端权威推,另一端照结果摆;重演太贵所以只给少数物体 | 一人推骨牌,另一人照录像摆 |
关键区分:预测处理「自己的输入」,补偿处理「对别人的判定」,物理处理「多体耦合的一致性」。前两个都靠「复算单个明确对象」成立,物理不成立——所以物理是唯一一个默认放弃一致性的:能不同步就不同步。
为什么这么做
固定步长 Async Physics:物理可复算的前提是确定的时间步进。渲染帧率会波动(30~120fps),物理若跟着变步长就永远无法重演对齐。独立固定步长把物理从帧率解耦。
权威 + 同步结果,而非两端各算:因为跨平台浮点不确定 + 求解顺序敏感,两端各自模拟必然发散。以服务器为权威、同步结果(或按物理步重演对齐),是唯一可靠的一致性来源。
按重要性降级:物理同步成本极高(resimulation 是 O(物理步 × 刚体))。把预算只花在影响胜负的对象上,装饰性物理各端本地跑——这是性能与一致性的理性权衡。
为什么别的选择不行
- 两端各自跑物理靠确定性对齐:跨平台浮点差异 + 求解顺序敏感,几秒就发散,堆叠物体塌向不同方向。除非严格锁定平台/编译/步长,否则不可靠。
- 所有刚体都做 resimulation 同步:CPU 爆炸(每帧重演大量刚体多步),带宽也扛不住,且大部分是玩家不在意的装饰。
- 物理对象用高频属性复制硬同步位置:连续碰撞的物体位置每帧剧变,高频复制带宽爆炸且插值也补不平接触瞬间的突变。
- 把装饰碎片也做权威同步:花大代价同步玩家根本不看的东西,纯浪费。
沉淀结论
物理难同步:浮点非确定 + 接触求解顺序敏感 + 多刚体耦合让误差指数放大。Chaos 受控可确定但跨平台不保证,所以走权威 + 同步/重演而非两端各算。UE5:NetworkPhysicsComponent + Async Physics 固定步长 + 按 PhysicsStep 对齐 + resimulation(代价极高)。工程上按重要性降级:载具权威+插值 / 道具 Dormancy+事件 / 装饰本地不同步。判据:影响胜负才同步。
记忆口诀
为何难:浮点非确定 / 接触求解顺序敏感 / 多刚体耦合 / 迭代系统误差指数放大
Chaos:受控可确定 / 跨平台不保证 / 所以不能两端各算
UE5 模型:NetworkPhysicsComponent / Async Physics 固定步长 / PhysicsStep 对齐 / resimulation 代价高
降级:载具=权威+插值 / 道具=Dormancy+事件 / 装饰=本地不同步
判据:影响 gameplay 胜负才同步 / 否则本地跑
内容来源
综合整理。主要参考:Epic 官方文档 Chaos Physics、Networked Physics(UE5.3/5.4 演进中)、Epic 官方物理网络技术分享。因 UE 网络物理仍在快速演进,具体 API 与能力以目标引擎版本官方文档为准;本篇聚焦原理与选型。
相关专题:可复算/回滚的思路源头见 移动预测与回滚;Dormancy 休眠机制见 Relevancy 与带宽预算;确定性网络模型的另一极(帧同步)见 帧同步 Lockstep。
自测:合上资料能说清楚吗?
物理为什么比角色移动更难同步?
参考答案
① 浮点非确定性:不同 CPU/编译器/指令顺序浮点结果有微小差异,物理是迭代系统(每帧输出是下帧输入),误差指数放大;② 接触求解顺序敏感:多刚体用迭代求解器,约束求解顺序不同结果不同,两端遍历顺序稍异堆叠物体就塌向不同方向;③ 多刚体耦合:误差通过碰撞传播放大。而单角色移动低耦合、可复算(一个胶囊体+明确输入),所以 CMC 预测回滚可行。
UE5 网络物理的核心机制是什么?
参考答案
NetworkPhysicsComponent 把物理纳入预测/复算框架;Async Physics Tick 用独立固定步长(脱离渲染帧率)保证可复算;输入和状态按 PhysicsStep 编号对齐;resimulation 在客户端预测物理与服务器权威状态分歧时回滚到该物理步用权威状态重演到当前。代价远高于移动回滚(O(物理步×刚体))。
什么时候该放弃物理同步?怎么降级?
参考答案
判据是「物理结果是否影响 gameplay 公平/胜负」。影响的(载具)用服务器权威+客户端插值/预测;半重要的(可交互道具)用 Dormancy+被击中时事件同步结果,不做连续物理;纯装饰(爆炸碎片、布料)不同步各端本地模拟。连续实时物理同步只留给「玩家直接操控且影响胜负」的少数对象。强行全同步只烧 CPU/带宽换玩家不在意的一致性。