一、帧率标准来源
帧率标准,没有具体的标准,还是需要根据具体的应用来。如果一定需要定义一个标准,可以将各项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;
这个值决定,也需要引入时间才能计算帧率,没有现成的计算帧率的接口
本文介绍了帧率标准的来源及其在不同应用场景中的意义,包括常见fps界限、Vsync信号同步原理、如何衡量流畅度及fps计算方法等内容。
2808

被折叠的 条评论
为什么被折叠?



