为什么电影24帧就行,但游戏要60帧?
生理学基础
记录在胶片上的逐帧信息
所有的故事都是从人类眼睛的“暂时视觉”和“大脑修复”现象开始的。前者是指光信号消失后,人类视网膜的残留图像会保留一段时间的现象。后者是大脑的“大脑补充”功能,以补充图片的中间框架。它们的混合效果让我们认为每秒回放24帧的照片是“连续的”。
至于为什么这个数字被设定为24,还有更多的约定和形而上学。电影规格本身已经经历了16到24帧,这个数字预计在未来还会继续增长。PAL/NTSC/SECAM将帧数设置为每秒25帧和每秒30帧的原因实际上只是因为不同区域的电源频率不同(50Hz和60Hz)...为了计算方便,采用NTSC系统的美国和日本,在游戏中自然采用了每秒30帧的习惯(NTSC系统中为29.97帧)。
但是为什么看24帧的电影时没有不和谐的感觉,但是卡顿会出现在30帧甚至60帧的游戏中呢?假设有四个因素决定游戏的流畅度:动态模糊效果、操作响应、帧速率和帧速率均匀性,其中动态模糊是最重要的。
动态模糊
动态模糊指的是由于相机快门移动速度比物体慢而导致的运动轨迹拖动。3D游戏和电影的一个重要区别是:电影是真实光影的记录,而3D游戏是3D模型形状/位置的实时渲染。前者会有动态模糊,而后者不会。
电影是以恒定频率拍摄的电影/数码照片,可以在一段时间内完整记录光线信息。一般来说,每秒24帧的视频会有一个两倍于1/50秒的快门,它可以完全记录半秒的光信息。然而,这些“额外的”丰富图像信息将像双图像一样重叠,并导致动态模糊/拖动。原理与“光画”相同,只是快门不是几秒,而是1/50秒。
高快门速度示例
低快门速度示例
在人脑中,动态模糊是视觉信息的重要表达。即使实际看到的帧数不够,添加动态模糊的间隔图片也足以修复大脑,从而实现“流畅”。此外,如果对于相同的每秒24帧,快门速度增加到1/96秒,记录在胶片中的光信息将仅为1/4秒(24*1/96),并且丢失的光信息将削弱模糊效果。这样的电影看起来也像卡通。
左边是不同快门速度下记录的光信息量(快门越慢,记录的光越多),右边是实际的图片
这个游戏是把“快门速度”提高到极致的产物。游戏中的30帧是由游戏引擎生成的30个无限短的即时图像。无论这些瞬间有多快,物体本身都是清晰无比的,悬崖不会有模糊的效果。如果此时它仍以每秒24帧的速度播放,大脑会*。货物移动得这么快,为什么我还看得这么清楚?这完全不科学。因此,“大脑填充流畅性图片”的过程无法进行。我们真的在看幻灯片。
要解决这个问题,要么增加采样率,要么人为地增加模糊效果。前者是高帧率方案,这将在后面描述,而后者是为了增加模糊效果,以欺骗大脑认为它看到了具有高信息内容的图片(然而,模糊效果也消耗资源)。
帧速率大小
如果游戏中的物体每秒移动1个像素点,我们可能仍然感觉平滑,但是如果物体每秒移动10个像素点,那么就会有明显的段落感。此时,有必要提高采样率,并在中间填充缺失的图片。如果帧数增加到每秒10帧,刚才我们可以看到平滑度接近每秒1像素。
通过将每秒24帧提高到每秒48帧甚至60帧,双眼接收到的信息量足以“补充大脑”平滑效果。尽管最完美的游戏应该具有尽可能多的帧,以便真实地模拟真实情况,但是对于游戏来说,渲染的帧越多,要求的性能越高,并且该方案的成本太高。现在人们普遍认为30帧可以完成大脑修复过程。
帧率一致性
然而,在实际的游戏中,30帧仍然会不时被阻挡,即使它被提升到60帧。平时,当我们推出手机评测时,两部使用不同GPU的手机通常显示相同的FPS(每秒帧数),但流畅性不同。这是为什么?
两种显卡的帧数比较
两种显卡的帧渲染时间比较
这里的问题在于“框架”的准确性。即使以前的时间可以超过30帧渲染,但只要有几分钟低于30帧,它仍然是一张牌。理想的每秒30帧是30帧均匀分布,但实际上可以在前半秒渲染29帧,在后半秒只渲染1帧。
由于计算能力和图片复杂性的限制(例如,图片突然从平面上爆炸),前半秒的渲染压力很小,可以运行全帧。然而,爆炸发生后,计算量急剧增加,场景渲染过晚,帧数下降。虽然肉眼对帧数的绝对值不敏感,但是可以容易地检测到帧数的明显变化。
显然,我们平时看到的每秒帧数的精确度是完全不够的。我们需要将精度从每秒多少帧提高到每毫秒多少帧,以精确测量帧速率的稳定性。
响应时间和鞋跟数量
游戏和电影的最大区别在于,游戏要求用户做出动作并实时反馈动作。除了平稳的视觉,我们还需要平稳的操作。每个人都追求60帧的高帧率的主要原因是为了减少响应时间。当我们感觉到一个动作是否完成时,我们希望机器接受操作信息,并最终在下一帧中反映出来。然而,在实际操作中,大多数游戏引擎在接收到操作指令后需要在屏幕上显示3帧间隔。
帧的刷新率越高,我们可以感知的操作速度就越快。对于一个30帧的游戏,即使忽略操作指令的传输速度,每一个画面持续33毫秒(1s/30 = 0.033秒),一个操作需要100毫秒(33毫秒*3帧)才能反映在画面上,而一个60帧的游戏只需要50毫秒来响应。这50毫秒,在游戏中很可能决定你是别人的头,还是别人的头。
此外,如果屏幕上有太多的压力,机器将不能渲染屏幕,帧将下降,甚至卡顿将出现在屏幕上,我们的操作指令也将推迟和输入。效果是我们几秒钟前做的事情在几秒钟后一个接一个地显示在屏幕上。这就是传说中的咔嚓响…