中EN

Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization

Markdown3 KB 原始文件

Source: https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization Mirror: https://web.archive.org/web/20191214121548/https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization Author: Yahn W. Bernier (Valve), 2001

Overview

FPS Internet play must handle latency/loss even with broadband. Covers client/server architecture, predictive modeling, and lag compensation tradeoffs.

Basic loops

Client: sample input → send movement command with sim time → read server packets → render. Server: read usercmds → execute → simulate server objects → send visible state per client.

Usercmd (Half-Life)

Fields include lerp_msec, msec (frametime), viewangles, forwardmove/sidemove/upmove, buttons. Pure dumb client with 500ms RTT feels unusable on Internet.

Client-side prediction

Store commands; from last server-acked state, replay unacked commands with shared movement code (pm_shared/). Server remains authoritative. Caveats: do not replay footstep/VFX every re-run (mark first-time predicted); client-only fields need sliding window of intermediate states.

Weapon firing prediction

Share weapon logic too; replicate ammo/timers/anims as authoritative state. Avoid client-authoritative "I am at x and I headshot player 2" — cheating.

Leading targets without lag comp

Even with movement prediction, hitscan results wait for server. High latency → must lead moving targets; Quake3 used hit confirmation tones to help players learn lead.

Display of others: extrapolation vs interpolation

Extrapolation: ballistic forward from last state — bad under high jerk / instant turns; limit time (QW ~100ms). Interpolation: render in the past between updates; 100ms buffer at 10 Hz; 200ms survives one loss. Position history (search straddling timestamps) better than "always move toward latest" when update spacing varies with bandwidth choke. Detect teleports (flag or large delta) — do not interpolate across them. HL default: 20 updates/s, 100ms interp; clients may request higher rates.

Lag compensation algorithm

Before executing usercmd: estimate latency; find world update the player had; move other players back accounting for latency and client's interpolation amount (lerp_msec); run command (traces); restore players. Also rewind ancillary state (alive/dead, ducking).

Design implications

Enables aim-at-what-you-see for hitscan. Paradoxes: high-lag shooter can hit low-lag player who already took cover ("shot around a corner"). Valve favored local responsiveness. Head-on fights and unsighted strafers reduce perceived unfairness. Projectiles: HL does not lag-compensate projectile entities (open questions about whose time space they live in); firing sound still predicted.

Conclusion

Lag compensation is a game-design choice; for HL/TFC/CS benefits outweighed inconsistencies.

引用这一章的笔记

输入关键词开始搜索

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