Tick Rate

在 FPS 游戏里常说的「x tick」,全称是 tick rate(服务器逻辑更新频率),指的是游戏服务器每秒完整更新一轮游戏世界逻辑状态的次数,单位是 tick / 秒。比如 64 tick = 服务器每秒执行64次全局逻辑更新,128 tick = 每秒执行128次全局逻辑更新。tick rate 直接决定游戏的命中判定精度、操作跟手度、网络同步反馈,是竞技 FPS 里影响对枪公平性的核心参数之一。
玩家平时吐槽枪战游戏“吞子弹”“明明瞄到却不掉血”,根源大多都和 tick rate 数值偏低有关。
想要搞懂 tick rate 的作用,我们先要清楚竞技 FPS 通用的客户端 - 服务器(C/S)架构:
- 我们本地电脑(客户端)仅负责两件基础工作:采集鼠标、键盘的操作输入,渲染输出游戏画面;
- 所有关键结算权限全部在远端服务器手中,能否命中敌人、是否被掩体遮挡、是否扣除血量,全部由服务器统一运算判定,从底层杜绝篡改本地数据作弊的可能。
服务器不会不间断连续运算游戏逻辑,而是以 tick 为单位,固定周期循环执行一套完整流程,单次完整流程即为 1 个 tick:
- 收集输入:汇总本轮间隔内所有玩家上传的操作指令,包含移动、开枪、换弹、跳跃等;
- 逻辑更新:运行物理碰撞、弹道演算、伤害判定,刷新全场所有实体状态,包括玩家坐标、血量、可交互物体等;
- 同步状态:把本轮计算完成的游戏世界快照,统一广播同步给房间内每一位玩家客户端。
诶,那这个时候很多人会产生一个疑问:假如服务器是128 tick,代表一秒仅更新128次真实游戏状态,可我本地电脑能跑到 240 帧/s,两次 tick 之间服务器不会下发新的真实坐标快照,不会重复渲染同一套画面,那多出来的画面帧到底从何而来?
那游戏开发者们当然是考虑到这个情况了,他们针对这个视觉断层问题做了优化:当本地 FPS 数值高于服务器 tick rate 时,两次 tick 间隙多出的画面,并不是服务器真实运算出的游戏状态,而是客户端读取前后两次 tick 的快照数据,依靠插值算法推算生成的过渡画面。插值画面仅用来让视觉过渡更丝滑,游戏所有真实命中判定,只会在每一次 tick 节点执行。
这就是经典“空枪”现象的核心成因:你眼中平滑移动、准星贴住敌人的画面是客户端插值模拟出的虚拟位置,等到服务器执行 tick 判定时,敌人真实坐标已经发生偏移。
由此,我们就能明白,客户端 FPS 与服务器 tick rate 会互相影响枪战游玩体验:玩家键鼠操作以本地画面帧为单位采集上传,FPS 越高,每秒发给服务器的操作采样数据越密集。 在高 tick 服务器中,服务器处理逻辑的间隔很短,密集的操作采样能被快速结算,瞄准、移动手感会更跟手;但在 64 tick 这类低 tick 服务器中,哪怕本地跑出 240FPS,服务器每秒也只会处理 64 轮逻辑,大量精细操作只能堆积等待下一轮 tick,高帧率带来的操作优势会大幅缩水。 反过来,如果电脑硬件只能稳定 30FPS,却在 128tick 服务器游玩,本地画面刷新速度跟不上服务器高频同步节奏,会丢失大量服务器状态快照,不仅操作反馈明显延迟,画面还容易频繁拉扯卡顿。
诶,那这个时候又有人会产生新的疑问,既然高tick能大幅优化竞技手感,为什么几乎没有游戏厂商全服强制开放超高 tick rate?
这个问题的答案,可以分为开发商运营、玩家网络环境两层原因:
从开发商运营层面来看,这个问题可以类比为对玩家提出的问题:玩 CS 为什么不直接跑 600 帧、而只用到 120 帧呢?是玩家群体们不想用吗?9800x3d 搭配 5090 显卡、600Hz 超高刷显示器固然能拉满本地帧率,但并不是所有玩家都承担得起这套配置;同理,tick rate 翻倍后,服务器每秒运算量、同步数据包数量几乎同步翻倍,运营成本会显著上涨,厂商只能在服务器成本与全体玩家竞技体验之间取平衡。
从玩家实际游玩层面来看,高 tick 并非适配所有网络环境。如果玩家网络延迟偏高(100ms+)、存在持续丢包或网络波动,128tick 每秒收发的同步数据包数量更多,会直接放大网络不稳定带来的问题,出现频繁瞬移、橡皮筋拉扯、画面卡顿,对比之下 64tick 同步压力更小,游玩稳定性反而更好 :D