一、帧率标准来源
帧率标准,没有具体的标准,还是需要根据具体的应用来。如果一定需要定义一个标准,可以将各项freq提升到最高,获取该平台下的一个fps的最优值作为标准
二、常见的fps界限
12 fps: | 由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10-12帧的时候,就会认为是连贯的(手动快速翻阅电子书) |
24fps | 有声电影的拍摄及播放帧率均为每秒24帧 |
30fps | 可以接受但是无法顺畅表现绚丽的画面 |
60fps | 可以明显提升交互感和逼真感(app的性能目标是保持60fps) |
75fps超过 | 不容易感受到明显的流畅度提升,但VR设备需要高于75fps才能消除眩晕 |
三、Vsync信号同步
android每隔一定的时间会发出vsync信号,触发UI去绘图,根据下面的值,时间限定不同,一般是16ms
vsync的设计里面有三个值
0 | 关闭vsync同步,容易产生撕裂现象, |
1 | 打开vsync限制最高帧率在60fps |
2 | 打开vsync限制最高帧率在30fps |
一般游戏会限定一个值
Application.targetFrameRate
-1 | 不做限制,同时需要vsync设置为0才能生效 |
既定帧率 | 同时需要vsync设置为0才能生效 |
这个值没办法具体看到,但是vsync设置为0,会产生撕裂现象,所以一般也不设置为0,常见设置是设置为1限定以60fps为标准(仅参考unity 3D)
补充:撕裂是指帧率>刷新率,当屏幕还没有刷新n-1帧的数据时,就开始生成第n帧的数据了,从上到下,覆盖第n-1帧。如果此时刷新屏幕,就会出现图像的上半部分是第n帧的,下半部分是第n帧的现象
四、如何衡量流畅度
掉帧或者掉帧率
掉帧产生的原因是,图像的绘制时间超过了单个的时间周期,导致用户看到的画面没有及时被更新。
丢帧情况(单位时间内均匀分布) | 卡顿情况 |
0-10帧 | 流畅 |
10-20帧 | 较卡 |
20-40帧 | 很卡 |
40-60帧 | 卡死了 |
至于具体计算单位时间掉帧的方法,"只能通过systrace结合应用推测",目前还没有很好的方法。
五、fps计算帧率
Dump surfaceflinger的信息 fps代表的是自开机后屏幕刷新次数。
该值由surfaceflinger的成员
mutable uint32_t mPageFlipCount;
这个值决定,也需要引入时间才能计算帧率,没有现成的计算帧率的接口