When the server sends “only what changed since last time,” losing the full state sent once at the start (the baseline) means later changes can’t be applied.
Why The packet with an entity’s full state (baseline) is lost or dropped before processing → Effect The client has nothing to apply later changes to, so it ignores them → On screen That entity is invisible, or suddenly appears much later
Primary owner Game team (Server development) · Also Game team (Client development)
Game team action items
Server: always resend the baseline until an acknowledgment (ACK) arrives, build changes only against a baseline the client has acknowledged. Client: send the ACK for a baseline only after actually applying it, ask the server again when changes arrive for an unknown entity.
On the graph
Random spikes · Changes received for unknown entities
Where to look
Times the client dropped changes that arrived without a baseline, with entity IDs, matched against when the server sent that entity’s baseline and when the ACK came back. Reproduce in development by adding loss (loss in tc netem, packet loss percentage in Unreal network emulation)
Confirmed if
For the invisible entity, the server sent a baseline and never got an ACK, yet kept sending only changes, which the client dropped
Ruled out if
The baseline was ACKed and applied on the client but the entity is still invisible: missed despawn message or entity ID reuse mix-up
Check with
Game server or client logs and metrics
Sources
Snapshot CompressionGaffer On Games Changes must be built only against a baseline the other side has acknowledged (acked), and the initial state is sent separately
Quake III Arena source: code/server/sv_snapshot.cid Software Delta compression uses the snapshot the client acknowledged as its baseline, and a full snapshot is sent when the baseline gets too old
tc-netem(8) — Linux manual pageiproute2 A test tool that adds delay and jitter (delay TIME JITTER) and loss (loss random PERCENT) to outgoing packets to mimic a real network
Using Network Emulation in Unreal EngineEpic Games Test with minimum and maximum latency and a packet loss percentage on server and client; set from the console, e.g., NetEmulation.PktLag