不是。FPS 越高,画面越顺滑、操作延迟越低,但收益会越来越小,代价却越来越大。
🎯对玩家来说,"稳"比"高"更重要。对开发者来说,"合适"比"最高"更重要。
先打个比方:翻页动画
小时候在课本角落画小人,快速一翻,小人就动起来了。
- 每秒翻10 页:小人一顿一顿地动;
- 每秒翻30 页:动作连贯了;
- 每秒翻60 页:非常流畅;
- 每秒翻240 页:……和 120 页相比,你几乎看不出区别,但手已经快抽筋了。
FPS 就是每秒翻多少页。翻得越快越费力,而眼睛的感受会逐渐饱和。
一、收益递减:多出来的帧越来越不值钱
人对流畅度的感受,本质上取决于每一帧间隔多长时间(帧时间),而不是 FPS 这个数字本身:
| FPS | 每帧耗时 | 比上一档快了多少 |
|---|---|---|
| 30 | 33.3 ms | — |
| 60 | 16.7 ms | 16.7 ms⬆️ 提升巨大 |
| 120 | 8.3 ms | 8.3 ms ⬆️ 明显 |
| 240 | 4.2 ms | 4.2 ms ↗️ 高手能感觉到 |
| 480 | 2.1 ms | 2.1 ms → 几乎没人分得出 |
帧时间 33ms ● │╲ 17ms │ ● 8ms │ ●── 4ms │ ●──── 2ms │ ●────────── ← 再往后,翻倍 FPS 只换来 1~2ms └──────────────────────────── FPS 30 60 120 240 480从 30 到 60 是"从卡到顺",从 240 到 480 是"从顺到……也是顺"。
二、屏幕跟不上,多出来的帧根本看不到
显示器有自己的刷新率:60Hz 的屏幕每秒最多显示 60 张画面。
游戏渲染: ■■■■■■■■■■■■ (每秒 200 帧) 屏幕显示: □ □ □ □ (每秒只换 60 次) 大部分帧画完就被扔掉了不仅如此,如果关闭垂直同步,还可能出现画面撕裂:屏幕刷新到一半,新帧插进来了,上半截是旧画面,下半截是新画面。
🎮例外:竞技射击游戏(CS、Valorant)的职业选手会在 144Hz 屏幕上跑 300+ FPS。不是为了"看到"更多帧,而是因为屏幕刷新时拿到的画面更新鲜,输入延迟更低。这对普通玩家和大多数游戏类型意义不大。
三、稳定比数值更重要:45 帧可能比 30 帧还难受
这是最反直觉的一点。
在 60Hz 屏幕上,屏幕每 16.7ms 刷新一次。如果游戏跑45 帧,每帧约 22ms,赶不上一次刷新,只能等下一次:
稳定 30 帧: ■───■───■───■───■ 每帧都显示 33ms,节奏均匀 ✅ 不稳 45 帧: ■─■───■─■───■─■─── 16.7ms、33.3ms 交替出现 ❌ → 画面"一顿一顿地抽动"(judder)玩家的眼睛对节奏不均匀极其敏感。一个稳定的 30 帧,常常比在 40~60 之间来回跳的帧率感觉更流畅。
所以:
- 目标帧率最好是屏幕刷新率的约数:60Hz 屏选 60 / 30,120Hz 屏选 120 / 60 / 40;
- 宁可锁低一档,也不要在高帧率边缘反复掉帧;
- 关注的指标应该是帧时间曲线是否平直、1% Low(最差 1% 帧的帧率),而不只是平均 FPS。
💡 Android 上帧时间不均匀还有一个原因:渲染完成时机和屏幕刷新没对齐。Unity 的Optimized Frame Pacing(基于 Google 的 Swappy 库)就是解决这个问题的,建议开启。
四、手机上:高帧率的代价是热量
在手机上,FPS 和功耗的关系是这样的:
60 帧 120 帧 CPU/GPU 跑 50% CPU/GPU 跑 100%,而且要拉到高频 功耗 ≈ 1 份 功耗 ≈ 2.5~3 份(高频区功耗非线性增长)结果往往是这样一个故事:
0 分钟 🟢 120 帧,丝滑! 10 分钟 🟡 手机变烫,温控降频,掉到 90 20 分钟 🔴 大核被关(上一章说的情况 3),跌到 40~60 之间乱跳 → 比一开始就锁 60 帧的体验差得多还会带来:掉电快、手烫到握不住、玩家吐槽"这游戏太耗电"。对 MMORPG 这种一玩就是几个小时、还经常挂机的游戏来说,这是实实在在的差评来源。
但也别锁得太低
还记得上一章吗?锁 30 帧时主线程大部分时间在"等",调度器会觉得它很闲,把它放到小核上。一到大型战斗就来不及提频,造成卡顿。
所以锁帧也要配合 ADPF 等方式告诉系统"我需要多快",并且尽量平滑负载。
五、不同类型的游戏,需求完全不同
| 游戏类型 | 建议 | 原因 |
|---|---|---|
| 竞技射击、格斗、音游 | 越高越好(120+),延迟敏感 | 几毫秒的差距会影响胜负和判定 |
| 动作游戏、ARPG | 60 帧为主,高端机可开 90/120 | 打击感、闪避需要流畅 |
| MMORPG | 60 帧足够,30 帧作为省电档 | 操作节奏相对慢,长时间游玩更看重发热和续航 |
| 卡牌、回合制、模拟经营 | 30 帧,静止时更低 | 画面变化少,高帧率纯属浪费电 |
六、开发者视角的几个要点
1. 游戏逻辑不能依赖帧率
如果移动、技能、物理都按"每帧走多少"来写,帧率越高跑得越快,帧率不稳时还会穿墙、判定出错。
// ❌ 帧率翻倍,速度也翻倍transform.position+=dir*0.1f;// ✅ 与帧率无关transform.position+=dir*speed*Time.deltaTime;物理和关键逻辑用固定步长(FixedUpdate)。
2. MMO 的客户端帧率 ≠ 服务端频率
服务端逻辑一般是10~30 Hz的固定 tick(例如上几章的寻路,就是在服务端 tick 里调度的)。客户端 120 帧并不会让服务端的怪物更聪明、技能判定更准,它只影响本地表现:插值、动画和镜头。
服务端: ●─────────●─────────● 每 100ms 下发一次位置 客户端: ●─•─•─•─•─●─•─•─•─•─● 中间靠插值补出平滑动作3. 动态帧率:在该省的地方省
| 场景 | 帧率策略 |
|---|---|
| 战斗、大世界跑图 | 正常帧率(60) |
| 主城挂机、自动寻路、自动战斗 | 降到 30 |
| 全屏 UI(背包、商城、对话) | 降到 30,甚至更低 |
| 失去焦点、小窗模式 | 降到 20~30 |
| 温度过高(Thermal API 预警) | 主动降一档,在系统强制降频之前 |
Unity 中通过Application.targetFrameRate动态调整,注意 Android 上它默认是 30,不改的话很多项目其实一直跑在 30 帧。
4. 把选择权交给玩家
提供"省电 / 均衡 / 高帧率"档位,并根据机型给出合理的默认值:低端机默认 30,旗舰机默认 60,支持高刷的机型允许开启 90/120。
一句话总结
📖 FPS 就像翻页动画的翻页速度:从 30 到 60 是质变,从 60 往上是锦上添花,再往上基本只剩发热和耗电。
比起追求最高数字,更值得追求的是:帧率稳定、节奏均匀、与屏幕刷新率匹配,并且在玩家不需要时懂得节省。