![]()
一个“降延迟”的开关,为什么会让你更卡?
![]()
类似于英伟达的Reflex技术,Anti-Lag 不提升帧率,它只是让 CPU 停下来等 GPU。
当 CPU 本来就有富余时,这一等换来的是更跟手的操作;当 CPU 已经吃满时,这一等就是从渲染线程嘴里抢时间——平均帧没变,帧生成时间却开始抖,于是你感觉到开启后反而不跟手——甚至在CPU压力大的情况下直接卡到1帧,声音还在放,画面却半天不动。
如果你在 AMD 驱动里打开过 Anti-Lag,大概遇到过两种截然相反的体验:
在一些游戏里它让甩枪更跟手,在《影之刃零》或《战地 6》里它却让画面一顿一顿,甚至还不如关掉。
《影之刃零》:UE5 的CPU性能消耗,加上D加密
无论我个人还是群友、以及黑盒评论区里都可以看到对low帧波动的声讨,我的9850x3d 有时候也会卡到不能动(特别是CG播放、大场景切换的时候),low帧更是无规律触底,平均low也奇低:庞镇等区域只有30+,什么地方能60+没有规律
很多玩家反应荒行子战斗结束后开地板直接卡飞,其实A卡和N卡都有这个情况,Reflex开关对此没有影响,Anti-Lag关闭却能明显改善。
· 着色器编译 首次启动要编译着色器,有玩家反馈长达数十分钟,这段时间 CPU 是满的、,游戏中也有着色器编译
· 渲染线程 战斗场景里粒子、毛发、Lumen 光照同时压上来,CPU 渲染线程成为短板;
· 反篡改 带 D加密,进程本身的校验开销不小,且对注入类改动更敏感;
· 帧生成 同时提供帧生成开关,而帧生成恰恰是 Anti-Lag 最容易算错的场景。
四件事叠加,正好把 Anti-Lag 最不擅长的条件凑齐了:CPU 吃紧、帧生成开启、还带反篡改保护。这时候再开驱动级 Anti-Lag,等于在一个已经排满的队列前面,又加了一个等待点。
之前的《战地 6》也遭过此难
《战地 6》的问题更典型。它天生吃 CPU ,玩家里的共识是:大多数机器在它上面都是 CPU 瓶颈,网格质量(Mesh Quality)和高保真物件数量是最吃 CPU 的两项。
它的画质菜单里有一个“未来帧渲染”开关,作用是让 CPU 提前多提交几帧,用延迟换帧率稳定性。这跟 Anti-Lag 的设计目标正好相反。
如果两样都开,你实际上是在让两个控制器抢同一个方向盘。表现就是:帧数看着还行,但镜头转动和开火时的顿挫感明显,甚至在菜单里都能感到不跟手。
为什么会有排队?
![]()
因为 CPU 和 GPU 是两条彼此独立的生产线。CPU 算完一帧游戏逻辑可能只要 8 毫秒,GPU 画完一帧却要 12 毫秒。如果严格规定“算完一帧才允许画下一帧”,CPU 就会有一大半时间闲着。于是引擎和驱动默认允许 CPU 提前跑——手上同时压着两三帧还没画完的指令。
这叫预渲染队列(frames in flight)。它是纯粹的吞吐优化:让 GPU 永远有活干,帧率更稳、更不容易掉。代价就是延迟——你的按键排在队列末尾,必须等前面那几帧先画完。
![]()
Anti-Lag 到底是什么:三代技术,一条主线
按照 AMD 在 GPUOpen 上的官方描述,Anti-Lag 1 是“纯驱动侧技术,在驱动处理游戏图形命令时插入一段精心计算的延迟,使 CPU 帧与 GPU 帧对齐”;Anti-Lag+ 试图把这段延迟的插入点搬进游戏代码内部;Anti-Lag 2 则把这件事做成了 SDK,让游戏开发者自己编译进游戏。
三代的目标完全一致:压住 CPU,别让它抢跑。差别只在“在哪里压”。
![]()
Anti-Lag+:越界的失败
2023 年 10 月,Adrenalin 23.10.1 把 Anti-Lag+ 推给了《CS2》。它的实现方式是 detour 引擎的 DLL 函数——也就是修改游戏进程里那些函数的入口。从技术上看,这是一次“注入 + 改写”,与作弊器常用的手法在行为特征上高度重合。
结果是 VAC 大面积误封。Valve 在 10 月 13 日公开警告玩家不要开启,AMD 在 10 月 17 日发布 23.10.2 全局关闭该功能,Valve 在 10 月 19 日开始回滚封禁。整个过程不到十天。
这次事故说明的道理很直接:DLL注入游戏是被大多数游戏的反作弊不允许的
Anti-Lag 2 的进步
2024 年 5 月,AMD 与 Valve 合作,在《CS2》里首发了 Anti-Lag 2 预览版;同年 9 月,SDK 在 GPUOpen 以开源形式放出。区别在于:这次的代码是游戏开发者自己编译进去的,不是驱动在运行时改的。插入点选在“游戏采样输入之前”,这是整条管线里最靠前、也最有效的位置。
对玩家来说,这意味着一个很实用的判断方法:Anti-Lag 2 只会出现在游戏自己的设置菜单里。驱动里那个开关管不到它,反过来,游戏菜单里有“Anti-Lag 2”字样,说明这家厂商做了正经集成。
![]()
为什么开了反而更卡
这是全文的核心。需要先说明:Anti-Lag 在合适的场景下确实有效,但它的机制决定了,在另外一些场景下它会反过来伤害体验。以下五个机制,通常不会单独出现,而是叠加发生。
机制一:延迟是“主动等待”,等待就要占资源
延迟不会凭空产生。要压住 CPU,就必须让它在一个循环里等。这类等待在实现上通常是忙等(spin-wait)——线程不休眠,反复检查“GPU 画完没有”。这样做精度最高,因为一旦挂起再唤醒,时间精度就没了。但代价是:等待期间,这个线程仍然占着一个 CPU 核心的时间片。
在 GPU 瓶颈的机器上,CPU 本来就闲,占着无所谓。但在 CPU 已经吃满的机器上,这份被“空转”消耗掉的时间,正好是从渲染线程和游戏逻辑线程嘴里抢来的。你省下了 10 毫秒延迟,却可能让某一帧的渲染晚了 30 毫秒。
机制二:卡顿是节奏问题,不是平均帧问题
玩家感知到的“卡”,绝大多数时候不是平均帧低,而是帧时间不均匀。
一秒钟 60 帧,平均每帧 16.7 毫秒。如果这 60 帧里有 55 帧只用了 14 毫秒、剩下 5 帧却要 50 毫秒,平均帧依然接近 60,但你会非常清楚地感到“一顿一顿”。这就是为什么评测要看 1% Low,要看帧时间曲线,而不是只报一个平均帧。
![]()
Anti-Lag 直接作用在帧提交的节奏上。当它的等待时长与游戏实际的管线节奏不匹配时,本来均匀的提交间隔会被切成不均匀的段落——平均帧没变,帧时间曲线却开始长毛刺。这是“开了 Anti-Lag 反而更卡”最常见的成因,也是最难在参数上看出来的成因。
机制三:和游戏自己的节奏管理打架
现代 3A 游戏几乎都有自己的帧率管理体系:引擎层的帧率上限、渲染线程与 RHI 线程的调度、动态分辨率、帧生成,以及“未来帧渲染”这类主动加深队列的选项。
机制四:帧生成开启时的错位
帧生成(FSR FG、DLSS FG、AFMF)会在两张真实帧之间插入插值帧。对 Anti-Lag 来说,麻烦在于它必须知道“这一帧是不是插值出来的”,否则对齐会算错。
AMD 自己的 SDK 文档就专门写了这件事:启用 FSR 帧生成时,需要额外调用 MarkEndOfFrameRendering 与 SetFrameGenFrameType,还要往 DXGI 交换链里写入一段带特定 GUID 的私有数据,Anti-Lag 才能正确工作。
驱动层的 Anti-Lag 1 没有这层信息。它看到的是“每一帧”,无法区分真假。于是在开启帧生成时,它的节流点会落在错误的位置——这正是虚幻引擎 5 游戏里最容易出问题的地方。
真正有效的场景
把上面几条反过来,就是 Anti-Lag 的舒适区:GPU 是瓶颈、帧率本来就高、CPU 有富余、没开帧生成、游戏也没有内置的低延迟方案。五个条件同时满足时,它的收益是实打实的。
![]()
![]()
更多游戏资讯请关注:电玩帮游戏资讯专区
电玩帮图文攻略 www.vgover.com
