4. 帧率优化入门

帧率优化不是简单地把画质调低,而是先判断“谁在拖后腿”,再选择匹配的手段。一个游戏画面从逻辑更新到最终显示,要经过 CPU 逻辑、渲染提交、GPU 绘制、显示扫描多个阶段。任何一段超时,都会让帧率下降或产生卡顿。本节围绕四个基础工具展开:帧率瓶颈分析、垂直同步、动态分辨率与帧生成。

核心判断:帧率低不等于 GPU 弱。若 GPU 占用长期低于 80% 而帧率仍不达标,瓶颈通常在 CPU 逻辑、Draw Call 提交或主线程等待;若 GPU 占用接近 100%,则优先考虑渲染负载与分辨率。

一、帧率瓶颈分析:先定位,再优化

帧率瓶颈分析的目标是回答三个问题:当前帧时间是多少、哪一阶段占用最多、优化后是否真的变快。常用指标包括平均帧率(FPS)、帧时间(Frame Time,毫秒)、1% Low 与 0.1% Low。平均帧率好看但 1% Low 很低,说明存在周期性卡顿,例如资源加载、GC 或着色器编译。

分析时建议按“粗到细”推进:先用性能面板看 CPU/GPU 占用与帧时间曲线,再用 GPU 计时器拆分渲染阶段,最后用 CPU Profiler 定位逻辑热点。下面是一段典型的帧时间日志,可用于判断瓶颈归属:

Frame 1024 | CPU 14.2ms | GPU 6.8ms | FPS 70 | 1%Low 48
Frame 1025 | CPU 15.1ms | GPU 6.5ms | FPS 66 | 1%Low 45
Frame 1026 | CPU 13.8ms | GPU 6.9ms | FPS 72 | 1%Low 50
# CPU 时间明显高于 GPU,瓶颈在 CPU 侧

若日志反过来,GPU 时间远高于 CPU,则应优先检查分辨率、阴影、后处理、透明与粒子。若两者接近且都接近 16.6ms,说明处于临界状态,任何波动都会掉帧,此时应留出 20% 余量。

二、垂直同步:消除撕裂,但引入延迟

垂直同步(VSync)让 GPU 在显示器垂直消隐期交换缓冲区,从而避免画面撕裂。代价是引入输入延迟,并且在帧率低于刷新率时可能从 60 掉到 30,产生明显顿挫。常见策略有三种:

  • 关闭 VSync:延迟最低,但可能出现撕裂,适合竞技类。
  • 开启 VSync:画面完整,但延迟增加,适合单机与观影。
  • 自适应/快速 VSync:帧率高于刷新率时同步,低于时允许撕裂,兼顾延迟与完整度。

更现代的做法是配合可变刷新率(VRR/G-Sync/FreeSync),让显示器刷新率跟随帧率变化,既减少撕裂又降低延迟。此时应限制帧率略低于刷新率上限,例如 144Hz 显示器锁 141 FPS,避免超出 VRR 窗口。

三、动态分辨率:用清晰度换稳定帧率

动态分辨率(Dynamic Resolution)根据 GPU 帧时间实时调整渲染分辨率,再放大到目标分辨率输出。它的价值在于把“偶尔掉帧”转化为“轻微模糊但稳定”。实现上通常设定目标帧率与分辨率上下限,例如 50%~100%,并配合时间抗锯齿(TAA)或超分算法减少缩放带来的闪烁。

调参时要注意:分辨率下限过低会导致文字与细线模糊;缩放步进过快会产生“呼吸感”。建议步进控制在 5%~10%,并加入滞回区间,避免在阈值附近反复抖动。

四、帧生成基础:插帧不是免费午餐

帧生成(Frame Generation)在两张真实帧之间插入一张生成帧,从而提高显示帧率。它依赖运动矢量、深度与光流信息,因此需要游戏与驱动配合。关键限制是:生成帧不响应输入,基础帧率过低时延迟反而更明显。通常建议基础帧率不低于 40~50 FPS,并配合 Reflex 等低延迟技术使用。

手段主要收益代价/风险适用场景
瓶颈分析定位 CPU/GPU 热点需要工具与时间所有优化第一步
垂直同步消除撕裂增加延迟,可能掉档单机、观影
动态分辨率稳定帧率画面变软、闪烁GPU 受限且波动大
帧生成提升显示帧率延迟、伪影、需基础帧率基础帧率较高时

五、案例与复盘:一次“越优化越卡”的排查

某项目在 1080p 下平均 58 FPS,但 1% Low 只有 32。团队先开启动态分辨率,平均帧率升到 62,但 1% Low 仍为 33,说明瓶颈不在 GPU。进一步用 CPU Profiler 发现每帧有 3 次同步资源加载,导致主线程等待。改为异步预加载并加入对象池后,1% Low 提升到 52,此时再开启动态分辨率,平均帧率稳定在 70 以上。

常见误区:把“平均帧率”当作唯一目标。真正影响手感的是帧时间稳定性与输入延迟。先解决 1% Low,再谈峰值帧率。
实操顺序建议:1)测帧时间与占用;2)判断 CPU/GPU 瓶颈;3)CPU 侧优化逻辑与提交;4)GPU 侧调整分辨率与特效;5)最后才考虑 VSync 与帧生成。
帧率优化决策链:从瓶颈定位到手段选择 采集帧时间 FPS / 1%Low / ms 谁占用高? CPU vs GPU 选择优化手段 按瓶颈归属匹配 验证回归 对比 1%Low CPU 受限 逻辑热点 / GC / 提交 异步加载 · 对象池 GPU 受限 分辨率 / 阴影 / 后处理 动态分辨率 · 降特效 显示侧手段 VSync / VRR / 帧生成 关注延迟与伪影 目标:帧时间稳定 ≤ 16.6ms(60FPS)或 ≤ 6.9ms(144FPS) 优先保证 1% Low,再提升平均帧率;帧生成需基础帧率 ≥ 40~50 FPS 每次只改一个变量,记录帧时间曲线,避免“越优化越卡”

总结来看,帧率优化的顺序应是:先测量、再定位、后调参。垂直同步解决撕裂但增加延迟,动态分辨率稳定帧率但牺牲清晰度,帧生成提升显示帧率但依赖基础帧率与低延迟配合。把四者放在同一条决策链上,才能既快又稳。