你好:

     感谢你访问我的 Blog ,本博客只提供博主的技术经验分享,你可以在此做简单的留言和评论,我会抽空回复你;若是要深入交流探讨,请联系QQ:47853253或者加QQ群:12012081


 

【死性不改】因英雄联盟卡而引发的关于游戏FPS问题的研究与探讨

因英雄联盟卡而引发的关于游戏FPS问题的研究与探讨(一)
http://www.clxp.net.cn/thread-1481-1-1.html
(出处: 死性不改BBS)

  由于最近论坛里反映英雄联盟游戏卡,FPS时高时低的问题非常多,但看起来都没有什么好的解决方案,于是就引发了我想对游戏FPS一探究竟的好奇心!因为,任何事都要将就个为什么,尤其是技术问题,对“为什么”的原理性了解没深入一点,都会让你解决问题的思路更开阔一些!盲目听取经验的同时,我觉得大家更应该多去了解一些原理性的东西,因为这太重要了!
  举个最简单的例子,多知道点原理,吹牛逼都能逼别人吹的精彩,不是吗?
  当然,我要声明一下,我不会玩游戏,对游戏了解也不多,而对于FPS这个卡和不卡的问题也是刚开始查资料研究,所以有错误之初大家尽管提,大家一起来探索这个课题!
  在这篇文章里,我们大概要由浅入深的尝试解读以下几个问题(转却的说是转载几篇其他先驱的文章,并进行有逻辑的组合,在此感谢他们的分享):

 

目录:

  • 一、用游戏和电影解读,fps高低与卡和流畅的关系;
  • 二、CPU、显卡对游戏FPS的影响;
  • 三、网络延时对网游fps的影响;
     


 



一、用游戏和电影解读,fps高低与卡和流畅的关系;
 

FPS (每秒传输帧数(Frames Per Second),白话翻译:1秒内显示几张静态图片!
  FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会愈流畅。通常,要避免动作不流畅的最低是30。某些计算机视频格式,每秒只能提供15帧。
  FPS”也可以理解为我们常说的“刷新率(单位为Hz)”,例如我们常在CS游戏里说的“FPS值”。我们在装机选购显卡和显示器的时候,都会注意到“刷新率”。一般我们设置缺省刷新率都在75Hz(即75帧/秒)以上。例如:75Hz的刷新率刷也就是指屏幕一秒内只扫描75次,即75帧/秒。而当刷新率太低时我们肉眼都能感觉到屏幕的闪烁,不连贯,对图像显示效果和视觉感观产生不好的影响。
  电影以每秒24张画面的速度播放,也就是一秒钟内在屏幕上连续投射出24张静止画面。有关动画播放速度的单位是fps,其中的f就是英文单词Frame(画面、帧),p就是Per(每),s就是Second(秒)。用中文表达就是多少帧每秒,或每秒多少帧。电影是24fps,通常简称为24帧。


为什么游戏必须要60FPS才能感觉到十分流畅?而电影24FPS就可以流畅?
  为什么认为游戏帧数要到 60 帧每秒才流畅,而大部分电影帧数只有 24 帧每秒却不卡?虽然电影24FPS也不如60FPS的流畅,但是24FPS不会让人觉得卡,甚至12FPS都不会让人觉得卡,而24FPS的游戏能让人很明显的感受到卡,12FPS就是幻灯片了,这是为什么呢?有两个原因。

第一个原因就是由两者图像生成原理不同造成的。
  电影虽然只有24FPS,但是每一帧都包含了1/24秒里一段时间的信息,而游戏则只包含那个节点的信息。把1除以24就是0.04167,一个电影在一段时间你曝光,画面的每一帧,都包含有一段时间的信息,信息量较大,而游戏的第一帧包含第0秒的信息,第二帧包含了第0.04167秒的信息,只有一个瞬间的信息,这中间的信息完全丢失了,所以看起来会卡。

用图来解释一下,比如有一个圆从左上角移动到右下角,第一帧是这样的:
 

如果是电影,第二帧可能是类似下图这样的(图画得不好但是就是这个意思):
 
如果是游戏的话,第二帧就应该是这样的图:
 

  看出区别来了吗?这是因为电影和游戏的画面生成方式的本质不同造成的,电影的画面是拍摄的实际场景,在一段时间内胶片持续曝光,这一段时间里人物场景的变化都会被拍到胶片上,每隔一段时间换下一张胶片再曝光一段时间。相机也是一样的原理,如果我们把手机镜头使劲的晃动然后拍一张照片,会发现照片是模糊的,这就是因为曝光过程中把移动过程中一段时间的场景都拍进去了,就模糊了,我们就能感觉到电影里面的人物是移动过去的,可以看到移动的轨迹,画面是“连贯”的。

  而游戏的画面则是由显卡生成的,显卡通过计算生成一帧画面,生成完毕后再计算下一帧,这样每一帧都是清晰的,不会有模糊,像我上面图中的那个圆,不管他的移动速度是快是慢,显卡只计算两帧画面,中间的移动轨迹一概不会显示,我们看到物体就好像老版西游记里面孙悟空施一个法术“就”的一声飞过去了。
 

第二个原因就是电影的FPS是稳定的,而游戏则是不稳定的。
  电影虽然是24FPS,但是他固定每隔1/24秒换一次画面,画面出现速度是固定的,这点雷打不动,画面稳定。而游戏乍一看是60FPS没错,但是为什么同样是60FPS,有的显卡流程有的显卡卡顿呢,有人就曾经做评测研究过,为什么一模一样的FPS,有些显卡会感到“顿卡”呢。评测是这样的,他记录了在一秒里面,每一帧都在什么时候出现,于是一下子真相大白,流畅的显卡,他60帧画面是每隔约1/60(≈16.67毫秒)秒出现一次,也就是说显卡稳定的每隔一段固定的时间生成一副画面。卡顿的显卡,可能前半秒生成了59帧画面,后半秒就只有1帧画面了,那个评测里面提到一个概念“最大帧间隔”,也就是说两帧之间的间隔时间,如果是稳定的,那画面就流畅,如果不稳定,就会卡,有的显卡最大可达数百毫秒,相当于一秒才几帧画面,那自然会让人感觉卡了,如果稳定在33毫秒,只需要30FPS,就会让人觉得基本流畅了

总结:
平均帧速+最高每帧渲染时长综合判断才够精确
  结论很明显,想准确描述游戏的流畅度还是要记录游戏中每一帧画面渲染的时间,而这对于游戏时间较长的测试来说还是相当麻烦的。
  不过我们也可以看到,平均游戏帧速越高,实际上每帧画面渲染的时间总的来说还是趋短的,所以通过平均帧速还是可以大致说明游戏流畅度的,虽然不够精确。

名词解释:视觉暂留
  当人眼所看到的快速运动的影像变化后,人眼仍能继续保留其影像0.1~0.4秒左右,这种残留的视觉则被称为“视觉暂留”。由于视神经的反应时间约为1/24秒,因此电影视频达到24帧每秒,我们就不会感觉到卡顿。

Q&A:同样是24fps,为什么游戏感觉卡而电影不卡?
  这个问题,实际上要从电影的拍摄和播放原理来说,由于人们发现视觉暂留的时间为1/24秒,因此在拍摄和播放正常速度的镜头时(慢镜头和快速镜头不算),电影胶片就是以24格每秒的速度在走,每一幅画面出现1/24秒之后就一定会有一幅新画面出现,且每个画面本身就带有“动态模糊”,而不是静止图像,通过这个过程人们就能看到连续的电影。而游戏画面是由显卡进行实时运算渲染出来的,显卡的性能和游戏每帧画面的复杂程度的不同决定了没法保证每两帧画面能够以同样的时间间隔(1/24秒)出现,而且每帧画面都是静止图像,一旦有卡顿就能明显感觉到。

延伸阅读:GeForce GTX680的主动式垂直同步技术
  游戏帧速与游戏流畅度的关系还受到垂直同步技术的影响。
  在传统的垂直同步设定中,帧速会被划分成30fps和60fps两档,当游戏帧数在这两个值之间跳变时,巨大的帧数落差就会带来明显的卡顿,和画面撕裂。
  NVIDIA在GTX680中引入的主动式垂直同步技术(Adaptive VSync)最大的意义就是改变传统垂直同步分段式的帧数管理模式,用更加平滑的帧数曲线来最大限度地避免游戏卡顿和画面撕裂的情况发生。

二、CPU、显卡对游戏FPS的影响;

帧数不只靠显卡 实测游戏对CPU依赖性
  2012年游戏硬件与游戏大作的之间变得更加默契,我们可以在Intel新架构(IVB)处理器中发现Intel在其新品处理器中加入了对DX11的支持。对于用户来说,基于DX11接口设计的游戏是一种在画面上更好的体验,同时也是对硬件更大的挑战。在游戏对硬件要求越来越高的今天,那些顶级的3D游戏又是不是只需要一块足够强大的显卡而不需要太好的CPU支持呢?那么今天,我们通过对一些顶级游戏的测试来对比三款定位高低各不同的处理器在搭配同样一块GTX660Ti独立显卡下所获得帧数的差距——我们的目的在于分析出主流游戏对处理器的依赖度。

总结 : 酷睿i5游戏性能最强

三、网络延时对网游fps的影响;

FPS游戏原理漫谈:玩家延时与服务器同步

 以上文章,均为转载,文章都比较长,建议仔细阅读几遍来消化他们,以下是我的一些思考:玩家说游戏卡,应该份为两种大的现象,根据现象判断解决方向:

1、fps不稳定的,99%是内因;
  根据几篇文章的分析来看,fps不稳定核心原因一定是在本地,因为原理已经明确的提到,只有每一帧播放的时间间距都≤16.67毫秒或33毫秒时,我们的眼睛才真正的能看到连续,流畅的画面!
  我们也可以反过来思考,现在液晶显示器最大刷新率就是60Hz,等同于60FPS,显示器可以1秒刷新60副画面,而画面是从显卡那里来的,显卡只要可以每秒可以产生60副画面,并且每副画面以16.67毫秒~33毫秒的稳定间隔时间传递到显示器,就可以了!
  而显卡的整个绘图过程,除了显卡自身工作,实际上CPU也起到了非常大的作用,因为新的CPU也有渲染相关的功能,同时,CPU还要负责整个PC的硬件资源分配和调度,这就又涉及到内存速度、硬盘/存储的读写速度,任何一环出现问题,都可能会导致显卡输出画面不稳定,所以如果问题现象是fps不稳定,那就不用去理会外网问题,直接查自己网吧内部环境就行了!即至少包含但不限于以下因素:

  • 机器配置低;
  • 硬盘读写速度慢或者不稳定,如果是无盘就可能是无盘性能、服务器游戏盘、镜像盘、回写盘、服务器网卡本身、网卡驱动、网卡参数设置、交换机一系列的因素;
  • 内存不够用;
  • cpu不够用;
  • 显卡不够用;
  • 显卡驱动问题;
  • 硬件本身性能ok,但系统上有软件导致不定时的cpu(如数据采集)、内存(如内存溢出)、硬盘(如持续回写)、显卡资源消耗(如GPU挖矿);
  • 当然,也包含不靠谱的游戏官方客户端有问题,也就是剩下的那1%……
     


2、fps一直都是比较稳定的,99%是网络或官方服务器因素,1%是网吧内部问题又或是网络或服务器因素;
  fps稳定还卡?当然会,你不要忘记,顾客所说的卡是,只要他在游戏里发出指令,没有在0.5秒以内给出正确的回应,他就会说卡,卡并不一定只是画面不动,他还包括但不限于以下现象:
 

  • 进行移动时,鼠标点击人物往前跑了10步,结果突然倒退了5步,在过去的热血传奇中,这种现象很常见,典型的外网问题;
  • 进行攻击时,打人打不死,按照玩家的经验,明明应该可以爆头的,但经常不能爆头,例如cf就是典型的例子;
     

而以上两种现象就是99%的可能性,在技术员的口里,往往叫做延时……延时最明显的特征就是客户机和游戏官方服务器之间的ping值高(》50毫秒)
 

  • 还有1%是什么?准确的描述是:掉帧。就是从a画面直接跳跃到b画面,中间可能省略了人物移动、画面特效等。但这种情况要划分外因还是内因又要去看,掉帧的时候,游戏的数据是否比较正确,如果正确,则是网络方面的外因可能性大;反之则是内部问题可能性大!
     


  所以啊所以,大家反馈问题的时候,自己一定要在掌握一些原理的情况下,再去观察现象,求助时可千万别只说,游戏卡了……游戏卡的可能性太多啦,你这么问,难道希望看到几万字的解决方案,然后自己挨个去试验吗?就算你愿意,有谁愿意去写几万字的解决方案呢?
  说难听点,我们是技术员,难道要像顾客那样,用小白式的提问方法吗?
  好啦,接下来拍砖时间到,想吹牛逼的,想显摆的同学,接下来就是你们的时间啦!

因英雄联盟卡而引发的关于游戏FPS问题的研究与探讨(二)
 http://www.clxp.net.cn/thread-1510-1-1.html
(出处: 死性不改BBS)

 在因英雄联盟卡而引发的关于游戏FPS问题的研究与探讨(一)里,已经和大家分享了fps到底是什么东西,以及如何观察网络游戏fps不稳定到底是网络方面问题引起,还是本机问题引起的一些方法!
  注:网络方面问题引起特指(路由->光纤收发器->电信机房->互联网路由节点->英雄联盟服务器机房->影响联盟服务器)这一大串东西!
  这篇文章主要是想和大家分享,如何通过一些方法,快速且准确的锁定到英雄联盟游fps不稳定或“卡”的故障范围!
  核心逻辑依据:木桶原理,也就是说某个游戏出问题了,一定是某个游戏所需要的资源,或者性能有瓶颈出现,只是目前我们不知道瓶颈在哪里而已,所以我们需要逐步排除。考虑到操作成本问题,我们从最容易排除的环节入手。

 我以熟悉的nVidia显卡并且假设网吧是有盘环境来模拟整个推论过程!

1、先看看是不是显卡性能不足导致的。
  按照如下设置,改好你的系统设置,然后用GPU-Z记录显卡的GPU使用率,假如你全屏玩游戏,GPU使用率一局下来都没超过80%,则证明你的显卡性能是足够的,所以显卡不会是瓶颈,否则反之;
 

  • 安装nVidia显卡驱动时,不要安装节电模块“Feforce Experience”,目的是释放显卡性能;
  • nVidia控制面板->3D设置->管理3D设置->垂直同步,设置为开,目的是让显卡处于一个稳定状态或者说可被观察的状态,就让它工作在60fps的状态下,看看GPU使用率是否会跑满,如果60fps都会跑满,那显卡性能一定是不太满足这个游戏的;
  • nVidia控制面板->3D设置->配置PhysX设置,选择PhysX处理器,选择显卡型号。目的是不让CPU参与游戏的绘图、渲染工作,这些工作强制要求让GPU去做。
  • 英雄联盟游戏设置->视频->帧率封顶:选择“不封顶”,并勾选下面的“等待垂直同步”。目的是把性能控制问题交给显卡,比起腾讯,我更相信那些显卡公司的驱动!
     
  •  
     



 

  • 然后一切都设置好了,开启GPU-Z,并勾选记录日志。
  • 然后就开始玩游戏,在你玩游戏的过程中,日志会每隔1秒记录1次显卡的状态,等你玩完游戏就知道显卡是否存现过性能不足的情况,在日子中,以逗号分割,第5列记录的就是每一秒的GPU使用率,看他是否经常出现>80%的情况,如果是,则证明显卡性能偏低了,估计要买好一点的显卡。因为lol硬件要求其实并不是非常高,如果玩lol,在60fps下GPU使用率都能达到80%,那玩其他要求高一点的游戏,估计是必卡无疑了!
     



2、不是显卡,会不会是CPU高呢?
  同样,你可以基于上面显卡的设置下,再检查主板BIOS中是否开启了节能,如果开着,则需要关闭,下面这篇文章里记录了一些主板BIOS节能的名称,可以做为参照。
  新配的客户机容易随机出现自动重启、游戏卡问题?不妨优化下BIOS中节能技术!
  http://www.clxp.net.cn/thread-1504-1-1.html
  (出处: 死性不改BBS)

 

  • 接下来,你需要使用性能计数器,建立一个CPU使用时间收集器,来记录你在玩游戏期间CPU的使用率情况,假如你在玩游戏期间,CPU使用率持续100%,我觉得要么是CPU性能不足,要么是有其他东西占用CPU效能太多。
  • CPU使用时间或CPU使用率收集器设置方法如下图,照着做就行了!首先打开性能计数器。
  • 下图说明一下,当你在上图的界面点下一步了,默认展现的计数器列表有个Processor(就是处理器的意思),然后你点击Processor右侧的向下箭头,就可以找到%User time了。
  • 收集器已经建好了,他已经在记录cpu使用率了,接下来就是全屏玩游戏,游戏玩完了,回来看看cpu使用率的记录。
  • 游戏玩完了,然后点击你新建的收集器,并停止记录。
  • 然后在下图的界面,就可以看到你的cpu使用率曲线了,如果cpu一直持续在100%,说明cpu很忙,有可能会成为fps不稳定的因素之一。
  •  
     



3、如果不是CPU呢?那会不会是硬盘?
  我们假设环境是有盘,那么我们还是可以通过建立性能收集器的方式,来记录游戏过程中,磁盘的工作时间,整体的操作步骤和建立cpu使用率收集器的方式相同,就是在选择计数器时,需要按照下图来选,记录整个物理硬盘的工作时间。
 

  • 计数器选择PhysicalDisk,然后选择%disk time,就是磁盘工作时间。假如游戏过程中,磁盘工作时间经常处于100%,说明磁盘太忙,可能有程序在读写硬盘,也可能是硬盘有故障等等,导致的fps不稳定。
  •  
     



事实上,在有盘环境下 ,英雄联盟fps不稳定,大致就这么几大类了,而实际上本质都是“资源不够用”才fps不稳定的。
这里再总结一下基础原理:
 

  • 用户从硬盘上,启动了一个叫英雄联盟LOL的游戏程序,游戏程序需要显示出游戏界面,并且允许用户操作,于是其他硬件开始了一系列的协作;
  • CPU解析英雄联盟这个程序的指令,发现需要读取数据,于是他就命令硬盘控制器,去硬盘上找数据,找到数据之后交给内存;
  • 同时CPU又告诉显卡,游戏的画面数据都在内存里,显卡你拿去处理吧;
  • 于是显卡把绘图、渲染图像所需的资源放到自己的显存里,然后由GPU解析这些资源数据,并显示到显示器上;
  • 而LOL是个网络游戏啊,于是CPU又告诉网卡,有数据包需要你处理,于是网卡又将数据包从本机发送到英雄联盟服务器上,服务器收到数据又返回到网卡上;
  • 网卡又把数据交换给内存,然后CPU再根据英雄联盟的程序要求,再去协作其他硬件,进行交互,以上电脑前面的玩家玩的很爽……
  • 所以说,整个游戏的过程其实是非常复杂的,但受限于我们的认知,我们只能通过一些简单,高效的方法,去了解黑盒里的东西,通过检测输入和输出来判定哪个环节是不是出现了问题。
     


  我这里只提供一个基础思路,这个思路理解了,加上你对无盘的理解,自然就可以判定是不是无盘哪里的问题,虚拟盘哪里的问题之类的……

 



[本日志由 lq3447 于 2016-09-21 10:21 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 0 | 引用: 0 | 查看次数: 292
发表评论
你没有权限发表留言!