PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

仙仙科普大讲堂之FPS和流畅度之间的关系以及其判断方法

  [复制链接]
仙賢戀軒 发表于 2012-8-6 23:18 | 显示全部楼层 |阅读模式
点击数:38131|回复数:113
本帖最后由 仙賢戀軒 于 2012-8-7 09:39 编辑

各位好

       我一直有这么个想法,做一个关于基本知识科普的系列主题,把许多自己以前犯过的错误和搞不清楚的知识重新整理并和各位共享一下。为什么是基本知识科普捏?PCEVA的水很深,藏龙卧虎,各种高人,避之尤恐不及,无论之企。

       这个帖子是一个试水贴,我会根据具体效果来考虑这个系列主题有没有必要搞下去,当然各位有什么想法和看法还请提出,如果有什么想了解或者科普的也可以直接PM我,我会尽我所能进行梳理的。

       在我上次的帖子R7870 Hawk使用感受以及实测数据中,最后仅以一张四个游戏的FPS汇总图说明问题,并没有太多的谈及游戏的实际流畅程度以及相关的情况。我会尽力在这篇文章中进行分析。当然了,如果文中有错误的话,还请不吝赐教。



在本帖子里,你可以了解到:
2L.FPS的定义以及其和画面流畅度的关系;
3L.简单的SPSS数据汇总统计方法。

点评

最喜欢科普贴了....  发表于 2012-8-8 14:54

评分

参与人数 2活跃度 +110 收起 理由
jasu30 + 50 很给力!
overthink + 60 很给力!

查看全部评分

仙賢戀軒  楼主| 发表于 2012-8-6 23:22 | 显示全部楼层
本帖最后由 仙賢戀軒 于 2012-8-7 01:54 编辑

1.FPS的定义以及其与画面流畅度的关系


首先我们来看一下FPS的定义:
FPS(Frames Per Second),每秒钟填充图像的帧数。由于动态画面是由一幅一幅静态画面组成,在眼睛的视觉惯性下产生画面会动的效果,其中没一幅静态画面成为一帧。简单来说,一秒钟内所能连续投射出的静态画面数成为FPS,其单位为帧/秒(也记作Hz)。

一般来说,人眼对15FPS以上的画面才会有连续的感觉,当到达24FPS或更高的时候,人眼感觉不到闪烁感;当FPS大于30帧的时候,大脑和眼睛所接受到的信号也实际上只有30帧。

那么肯定就有人要问了,明明我的游戏跑起来有40+的帧数,为什么实际体验还是觉得卡呢?

先别急,让我们来看看一些经常接触的FPS数:
电影:24FPS,也有少数30FPS,以及极少数更高FPS数的电影;
电视:PAL制式25FPS,NTSL制式30FPS;
CRT显示器:75FPS;
LED显示器:60FPS及以上。

大多数的电影都是24FPS的制式,可是为什么我们看电影的时候丝毫没有卡顿的感觉呢?

首先我们要先明白一件事,当物体在快速运动时, 当人眼所看到的影像消失后,人眼仍能继续保留其影像1/24秒左右的图像,这种现象被称为视觉暂留现象,是人眼具有的一种性质。也就是说,当物体失去了或是变化了,视神经对物体的印象不会立即消失,而要延续1/24秒左右的时间,人眼的这种性质被称为“眼睛的视觉暂留”。所以无论FPS有多高,眼睛和大脑所能接受的一切也只有30帧左右而已。

因此我们回到上面的那个问题,为什么我们看着24FPS的电影丝毫没有卡顿的感觉呢?
由于电影胶片每秒呈现出24张画面,配合上我们那1/24秒的视觉暂留,正好在一秒内组成了连贯的画面,因而给我们留下了连续的感觉。

那么,为什么有时候打游戏明明有40+的FPS却还是卡顿呢?这不是和刚才说到的电影结果矛盾了么?
其实不然,游戏帧数和电影帧数有一个本质的区别:电影胶片上的图像是事先由连续动作中进行等时间间隔截取到的,对于每一幅画面而言,他停留在你脑中的1/24秒之后 必定有一个画面跟了上来,这是一个接连不断的过程;而游戏则不然:游戏画面是由GPU(部分也由CPU)进行现场运算而呈现出来的,他未必可以保证等时间间隔内得到同样的效果。举个极端一点的例子解释,比如说某一秒间,前半秒GPU渲染出5帧,后半秒渲染出50帧,那么他在这一秒内的帧数总和为5+50=55帧/秒,也就是55FPS。看上去很高,不是么?可是对于前半秒而言,他的实际FPS为5(Frames)/0.5(Second)=10FPS,明显会给视觉产生非常严重的卡顿感,也就是说,我们在前半秒会感受到明显的卡顿,后半秒流畅,而这一切就发生在75FPS之下。

这里我另外配合几张图说明对于一个60Hz的显示器,30FPS、60FPS和120FPS可能产生的情况。


上图是60Hz显示器跑30FPS可能出现的情况。
在游戏帧率这里 ,比如说第3帧和第4帧都掉帧了,那么对于显示器来说,其应该显示的第5到8帧全都丢失了,那么反馈到我们的眼睛里视觉帧率处第3帧和第4帧也跟着丢失了。


我们再来看60Hz显示器上跑60FPS时的情况。
假设此时第3帧和第4帧都掉帧了,那么显示器相对应的第3帧和第4帧也就会相应丢失,而由于其刷新率是眼睛所能感受到的两倍,也就相当于眼睛感受到的只掉了1帧。


最后再来看看60Hz显示器上跑120FPS时的情况。
假设此时第3帧和第4帧都丢失了,那么对于显示器来说,其只丢失了一帧;而同样的道理,眼睛也不会感受到丢失。

那么看到这里细心的朋友就会发现一个问题了,上面的三张图所演示的情况都是在时间间隔等长的假设下得到的结果,而往往实际情况并非如此,我前面所提到的那个极端例子也不是不可能不发生。那么,我们到底应该如何去进行判断呢?
这里我推荐一个简单一点的方法。既然我们的眼睛和大脑有着1/24秒的视觉暂留,即一张画面会在我们的脑海中停留1/24秒,也就是说我们只要保证在一张画面显示后的1/24秒内有新的画面出现,即两帧间的间隔小于1/24秒,那么我们就几乎不会感觉到卡顿。
我们知道1s=1000ms,1/24s=1000ms/24≈41.67ms。因此我们只要看看实际游戏操作中间隔大于41.67ms的帧有多少,多了多少即可。

接下来我会用一个实例来对这个问题进行详细阐释。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1活跃度 +5 收起 理由
pphiuyt + 5 前半秒5帧,期待点评原因

查看全部评分

仙賢戀軒  楼主| 发表于 2012-8-7 01:55 | 显示全部楼层
本帖最后由 仙賢戀軒 于 2012-8-7 02:20 编辑

2.简单的SPSS数据汇总统计方法



这是我上次帖子最后游戏运行FPS实测统计图,点击可以放大。我们采用其中一个较低水平的游戏,Call of Duty 8 Modern Warfare 3的数据进行分析展示。

从图表上可以看到,整体曲线在40FPS上下浮动。所以我们不妨假设他的平均FPS是40FPS,并且运行10分钟,那么所收集到的帧数信息总数是10min×60s/min×40frames/s=24000frams,也就是说我们要手机24000个帧数时间数据。其实我在写R7870Hawk时已经有用Fraps收集每一帧生成的时间,然后将其相邻生成时间相减,就得到了每帧的实际耗费时间,这个很简单,不再多做赘述。

我们从中截取24000条连续数据,切记连续数据,不然没有意义。


数据共有两列,A列是帧序数,B列是该帧所用时间(单位是ms)。

曾经我也想过用Excel自带开发工具中的统计插件进行分析,可惜其源代码似乎还不够精简,我多次操作均遇上了卡死。因此,我们将换一个更 专业的软件进行 工作:SPSS。这里插一句,即使是像SPSS这种行业统计软件,即使是i7的cpu,在面临这样数据量的运算下反应也明显迟缓了不少。我印象中似乎SPSS还没有为CPU和GPU的协调优化过,这或许会是一个不错的方向。


打开SPSS,我们可以看到一个简洁的界面


使用左上角的打开按钮,选中刚才所保存的Excel文件。这里请注意,由于我做的Excel文件中没有表头,因此“从第一行数据读取变量名”选项不要钩上,反之则不然。


之后我们就看到我们的数据被顺利导入



选择菜单上的 图形→图标构建程序


将弹出如下的对话框


我们在库中选择直方图的第一个模型,并将V1,V2分别拖入图标预览中的X轴和Y轴



点击确定之后软件将会进行运算



双击图表,进入图表编辑模式


对图表进行一定的设置和优化,这里提供截图作为参考,所涉及的工具都在顶部工具栏中,由于不是重点,所以不多赘述。







在最后导出的图像中我们可以看到,红线表示的就是41.67ms那根刻度线,没有超过该线的帧数都是足够满足我们视觉条件的帧数,绝大多数都没有超过,且有着一定的距离,即使是超出部分也没有过多的连续,只是偶尔的卡顿一下而已,所以整体的体验来说会是比较顺畅的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
csnumb 发表于 2012-8-7 06:17 | 显示全部楼层
果断抢个沙发。。
ach9999 发表于 2012-8-7 07:16 | 显示全部楼层
  沙发 先坐   通俗易懂   学习了
ach9999 发表于 2012-8-7 07:17 | 显示全部楼层
不让我坐沙发?  回复居然说没帖子。。

通俗易懂的文章  不错
overthink 发表于 2012-8-7 07:24 | 显示全部楼层
专业
hokimfong 发表于 2012-8-7 08:39 | 显示全部楼层
要说每帧的生成时间吗?!
wsy2220 发表于 2012-8-7 08:49 发自PCEVA移动客户端 | 显示全部楼层
问个跟本帖无关的问题,我想知道spss怎么做聚类分析?
wsy2220 发表于 2012-8-7 08:51 发自PCEVA移动客户端 | 显示全部楼层
问个跟本帖无关的问题,spss怎么做聚类分析?网上的资料都看不懂。。。
wsy2220 发表于 2012-8-7 08:52 发自PCEVA移动客户端 | 显示全部楼层
为什么我的回帖都被吞了。。。。
wsy2220 发表于 2012-8-7 08:52 | 显示全部楼层
问个跟本帖无关的问题,spss怎么做聚类分析?网上的资料都看不懂。。。
gangkang 发表于 2012-8-7 09:02 | 显示全部楼层
仙仙同学很有钻研精神。。。支持一下。
hyenax1950xtx 发表于 2012-8-7 09:33 | 显示全部楼层
前排强势插入围观
hyenax1950xtx 发表于 2012-8-7 09:35 | 显示全部楼层
前排插入强势围观
plane501 发表于 2012-8-7 09:50 | 显示全部楼层
lz你忽视了很重要的一点,你只关注了视觉上的流畅,但不要忘记电影和游戏最大的区别是电影只要看,而游戏需要操作,游戏既存在视觉上的卡顿,也存在操作上的卡顿。某些游戏的物理计算直接和fps挂钩,这就是为什么好多游戏60fps还觉得操作不是很流畅,而80-100的fps就觉得十分流畅的原因。
q979745882 发表于 2012-8-7 09:50 | 显示全部楼层
学习了。。。。。
     期待仙仙下期科普。。。。
              楼下的继续顶啊。。。。
778856 发表于 2012-8-7 10:43 | 显示全部楼层
电影实际上并不只是每秒24张画面 他会把重复画面闪动多次 就是说刷新频率并不是1/24
f13l 发表于 2012-8-7 11:28 | 显示全部楼层
支持!
einstein86 发表于 2012-8-7 12:05 | 显示全部楼层
顶仙仙了……本科年代SPSS只有玩过13.x,而且还不叫IBM SPSS,好像。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部