中EN
概念页

快照压缩与增量编码

Snapshot Compression & Delta Encoding

更新于 2026-10-15 约 3 分钟增量编码量化四元数压缩带宽GafferSource

提高快照率以降低插值延迟,必须把每快照比特打下来:有界量化、四元数「最小三分量」、静止省略,以及相对对端已确认基线的增量编码。Source 的 delta snapshot 与 ack 跟踪是同一家族的工程实现。

动机

插值缓冲大致随「发送间隔」放大。要把延迟从数百毫秒打到可玩,需要 30–60 Hz 快照;未压缩时对象稍多就会上到 Mbps~十几 Mbps。目标带宽可设在约 256 kbps 量级做压力测试。(Snapshot Compression;Snapshot Interpolation)

单字段压缩

字段思路量级例子(Gaffer 立方体场景)
朝向Smallest three:单位四元数丢最大分量(2 bit 索引),其余量化到 ±1/√2;可强制 w≥0 省符号128 bit → ~29 bit
线速度有界量化;「静止」1 bit 省略;高发送率下甚至整字段不发可从 96 bit 降到 0
位置世界有界 + 毫米级量化96 bit → ~50 bit

优化顺序宜从最大字段做起;最好的优化是证明某字段不必发。(Snapshot Compression)

增量编码 (Delta Encoding)

发送「快照 N 相对基线 B」。接收端持续 ack「我有的最新快照」;发送端把基线推进到约 RTT 之前的那份。连接初期无基线:用「相对双方已知初态」标志,或先可靠下发一份非增量引导块。(Snapshot Compression)

未变化物体:1 bit「未改」。也可只发变更列表 + 物体索引;当变更很少时索引更省,变更很多时 bit 向量更省——可按帧择优。相对索引(差分物体编号)、相对位置/朝向的多档小/大范围,能继续抠比特。算术编码相对手工 bit-packing 仍可能再赢一截(约 25% 的案例)。

Source:服务器发送相对「上次已确认更新」的变更;重度丢包或开局才拉全量(cl_fullupdate)。(Source Multiplayer Networking)

flowchart LR
  S["发送端"] -->|"快照 N Δ 相对 B"| R["接收端"]
  R -->|"ack 最新快照 M"| S
  S -->|"更新基线 B ← M"| S

上图:基线跟随 ack 滑动,稳态落后约一个 RTT。

与复制图 / 相关性

压缩解决「每个对象多少比特」;复制图 与相关性解决「哪些对象根本不进快照」。两者叠用。

取舍

有损量化要在本地也走同一量化,以免预测/校验和漂移。相对朝向的收益往往小于相对位置;可用角速度预测改进。切勿在未压带宽前盲目加发送率——先测 choke/loss。

  1. Snapshot Compression
  2. gafferongames.com/post/snapshot_compression
  3. Source Multiplayer Networking
  4. Snapshot Interpolation

相关页面

游戏开发快照插值Snapshot Interpolation发送端按固定频率拍下世界(或相关子集)的快照,接收端不跑权威模拟,而是把渲染时刻拨回一小段,在缓冲里的两份快照之间插值,用额外延迟换平滑,并扛住抖动与偶发丢包。Source 的实体插值与 clinterp 是同一思想的产品化。游戏开发UDP 与游戏协议设计UDP & Game Protocol Design动作游戏的时间关键数据(输入、位姿、物理)只关心最新状态。TCP 的可靠有序流会在丢包时把头阻塞住;正确做法是游戏协议只走 UDP,自己做虚拟连接、按需可靠性与拥塞退避,并按数据类型选择「冗余重发」还是「直接丢弃旧包」。游戏开发多人网络游戏模型Multiplayer Networking Models多人游戏并不是共享同一份物理现实,而是每位玩家各自看到的近似。历史上主要两条路:对等锁步 (Peer-to-Peer Lockstep)(RTS 仍常用)与权威客户端/服务器 (Authoritative Client/Server)(动作/FPS 主流);后者再叠加客户端预测、插值与延迟补偿,把延迟藏进体验里。游戏开发 · UE5网络复制与 RPCNetwork Replication & RPCUE 采用服务器权威 (Server-Authoritative) 的客户端-服务器模型:游戏真正在服务器上进行,服务器把状态复制 (Replication) 给客户端,客户端通过远程过程调用 (Remote Procedure Call, RPC) 向服务器请求操作。开发者需要显式声明哪些 Actor、属性、函数要走网络,并借助所有权、网络角色、相关性、优先级控制“发给谁、发多少”。UE 5.8 提供通用复制系统、Replication Graph 和实验性的 Iris 三套复制系统。游戏开发 · UE5复制图Replication Graph复制图 (Replication Graph) 插件解决的是服务器 CPU 瓶颈:标准做法是让每个复制 Actor 对每个连接各自判断是否需要发送,玩家和 Actor 一多(Fortnite 大逃杀开局有 100 名玩家、约 5 万个复制 Actor)就撑不住。复制图由持久存在的节点组成,按空间网格、休眠、常驻相关等规则预先分组,并缓存可跨帧、跨连接共享的复制列表。

被这些页面引用1 篇

输入关键词开始搜索

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