中EN
概念页

确定性锁步同步

Deterministic Lockstep

更新于 2026-10-15 约 2 分钟锁步确定性输入同步播放延迟缓冲Gaffer

锁步不同步物体状态,只同步驱动模拟的输入;各方从相同初态用相同固定步长推进。带宽与对象数量无关,但要求比特级确定性,且每人延迟受最慢输入到达时间约束,通常适合约 2–4 人。

原理

发送端每模拟帧采样 Input 结构(只含影响模拟的键),附带帧号发给对端;对端没有第 n 帧输入就不能模拟第 n 帧。状态(位置、速度等)本地各自算出来,理论上校验和应逐帧一致。(Deterministic Lockstep)

确定性门槛

「差不多」不够,必须位级相同。物理引擎内部 RNG、约束处理顺序、跨编译器/OS/指令集的浮点差异、Debug/Release 优化都可能破坏确定性。固定 dt(见 游戏循环与更新方法 与 Fix Your Timestep)是必要前置条件之一。(Deterministic Lockstep;Fix Your Timestep!)

播放延迟缓冲 (Playout Delay Buffer)

网络抖动会让 60 Hz 输入挤成一团。接收端先缓冲一小段时间再匀速放出(类似视频起播缓冲)。缓冲越大越稳、延迟越高。追上积压时可限制每渲染帧最多模拟若干步,避免死亡螺旋。相关术语在专利上敏感,实现时注意。(Deterministic Lockstep)

为何不用 TCP 传输入

TCP 丢包会停等重传,锁步在等待 input n 时整段卡顿。改用 UDP:每个包冗余携带所有尚未 ack 的输入;输入很小时,即便按最坏 RTT 囤几十上百帧也只有几十到上百字节。对连续相同输入做 1-bit 游程可再压。对端回报已收到的最大输入序号,发送端丢弃更旧的副本。(Deterministic Lockstep)

这与「在 UDP 上重写 95% 的 TCP」不同:因为主动冗余小负载,从不因单包重传堵塞流水线。

取舍

优点缺点
带宽与物体数无关全场确定性工程成本极高
实现正确时无状态不同步延迟 ≈ 最慢玩家 + 缓冲
人数一多,等齐输入代价陡增
中途加入困难

对象很多、人数较多或无法保证确定性时,改用 快照插值。

  1. Deterministic Lockstep
  2. gafferongames.com/post/deterministic_lockstep
  3. What Every Programmer Needs To Know About Game Networking
  4. Fix Your Timestep!

相关页面

游戏开发多人网络游戏模型Multiplayer Networking Models多人游戏并不是共享同一份物理现实,而是每位玩家各自看到的近似。历史上主要两条路:对等锁步 (Peer-to-Peer Lockstep)(RTS 仍常用)与权威客户端/服务器 (Authoritative Client/Server)(动作/FPS 主流);后者再叠加客户端预测、插值与延迟补偿,把延迟藏进体验里。游戏开发UDP 与游戏协议设计UDP & Game Protocol Design动作游戏的时间关键数据(输入、位姿、物理)只关心最新状态。TCP 的可靠有序流会在丢包时把头阻塞住;正确做法是游戏协议只走 UDP,自己做虚拟连接、按需可靠性与拥塞退避,并按数据类型选择「冗余重发」还是「直接丢弃旧包」。游戏开发快照插值Snapshot Interpolation发送端按固定频率拍下世界(或相关子集)的快照,接收端不跑权威模拟,而是把渲染时刻拨回一小段,在缓冲里的两份快照之间插值,用额外延迟换平滑,并扛住抖动与偶发丢包。Source 的实体插值与 clinterp 是同一思想的产品化。游戏开发游戏循环与更新方法Game Loop & Update Method游戏循环 (Game Loop) 让游戏时间的推进与玩家输入和处理器速度脱钩:每一轮非阻塞地处理输入、更新状态、渲染,并跟踪真实时间来控制节奏;最常推荐的做法是“固定更新步长、可变渲染”。更新方法 (Update Method) 是它的搭档:世界维护一组对象,每个对象实现一个模拟“一帧”行为的 update(),每帧依次调用。两者和组件模式一起常被视为游戏引擎的核心。游戏开发游戏时间线与时钟Game Timelines & Clocks游戏引擎要同时处理多种「时间」:真实时间、游戏时间、动画片段的局部时间、CPU 周期等。GEA 用抽象时间线 (abstract timeline) 统一看待它们,并讨论帧时间 \Delta t 的测量方法、高精度计时器、时间单位与时钟变量类型的取舍,以及断点恢复后的异常 \Delta t 处理。(卷 I 第 8 章 引言、8.4–8.5 节)游戏数学数值积分Numerical Integration游戏中的力是交互的、无法事先预测的,运动方程(常微分方程)几乎没有解析解,所以物理引擎采用数值积分:以大致恒定的时间步长 \Delta t 逐步推进,由当前时刻 t1 的 \mathbf r(t1)、\mathbf v(t1) 和力函数 \mathbf F(t,\mathbf r,\mathbf v) 求出 t2=t1+\Delta t 时的位置与速度。衡量方法好坏看收敛性、阶、稳定性三项。显式欧拉最简单但误差大、不稳定;GEA 认为交互游戏中最常用的大概是 Verlet,尤其是速度 Verlet(GEA4 卷 II 14.4.4)。

被这些页面引用1 篇

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原