我们做移动端开发的都知道这么一件事,要想保证应用使用流畅,必须尽可能的使帧率达到60fps.
这是目前绝大多数移动设备的帧率上限(2017年新出的iPad Pro已经具备了自适应帧率功能,最高可达120fps).如果达不到这个帧率.就可能产生卡顿感(Stutter).
那么什么是帧率?
以下是关于帧率的概念以及一些重要数据(来自维基百科) :
帧率 : 每秒显示帧数(Frame per Second,FPS)
- 12 fps:当画面帧率高于每秒约10-12帧的时候,就会认为是连贯的,此现象称之为视觉暂留,动画的原理就基于此.
- 24 fps:有声电影的拍摄及播放帧率均为每秒24帧,对一般人而言已可接受
- 30 fps:早期的高动态电子游戏,帧率少于每秒30帧的话就会显得不连贯
- 60 fps:在实际体验中,60帧相对于30帧有着更好的体验
- 85 fps:大脑处理视频的极限,人眼无法分辨85fps与更高帧率的差异
通过以上数据可以发现,当帧率低于12fps时,性能已经很差了.动画无法连贯,基本上类似幻灯片的效果.
30fps时,虽然能看出连贯的动画效果,但是整体感觉还是略微卡顿的.
60fps时,动画就能有流畅顺滑的体验了.
这里有个问题,同样是连贯的视觉体验,电影只需要24fps,为什么游戏需要至少30fps,流畅的体验更需要达到60fps?
这是电影和游戏的画面生成方式的本质不同造成的
电影的画面是拍摄的实际场景,在快门时间内胶片/传感器持续曝光,这一段时间里人物场景的变化都会被拍到胶片/传感器上,所以每一帧包含信息量较大. 每隔一段时间换下一张胶片再曝光一段时间.这个时间长度由快门时间决定.
而游戏的画面则是由显卡生成的,显卡通过计算生成一帧画面,生成完毕后再计算下一帧.这样每一帧都是清晰的瞬时信息,但帧与帧之间的过程是缺失的.
打个比方,在拥有相同的第一帧的情况下,画面中的物体在第二帧发生位移:
电影的第2帧类似下面的效果:
显卡渲染的2帧信息类似下面的效果:
可以看出电影的画面会有一条运动轨迹,这个现象叫做动态模糊.
而通过显卡计算生成的画面,中间的轨迹不会显示,看上去就像瞬移一样.所以帧数需要足够高,让帧与帧之间的变化尽量小,让动画看起来更自然. (所以60dps拥有比30dps更好的体验)
那么问题又来了,为什么是60?而不是50,70或者其他数字?
说法很多,下面是其中一种:
大多数显示器根据其设定按 30Hz、 60Hz、 120Hz 或者 144Hz 的频率进行刷新。 而其中最常见的刷新频率是 60 Hz。 这样做是为了继承以前电视机刷新频率为 60Hz 的设定。 而 60 Hz 是美国交流电的频率, 电视机如果匹配交流电的刷新频率就可以有效的预防屏幕中出现滚动条,即互调失真。(是不是和"马屁股决定航天飞机火箭助推器的宽度"有些类似?)
人眼分析处理数据的效率:
人眼及其数据接收和传输系统可以形成,传输和分析每秒10-12张图像。 大脑中的视觉中心保留每个单独的图像十五分之一秒。 如果大脑中的视觉中心在第十五分之一秒内接收到另一个图像,则视觉机制将产生视觉连续性的感觉.
From: Read, Paul; Meyer, Mark-Paul; Gamma Group. Restoration of motion picture film
参考资料:
脑洞大开:为啥帧率达到 60 fps 就流畅?
为什么游戏帧数一般要到 60 帧每秒才流畅,而过去的大部分电影帧数只有 24 帧每秒却没有不流畅感?