给你说说CRT/LCD刷新率/垂直同步,这个一直没有被说清楚的问题
其实我不是很想说这个问题,因为其中关系稍微复杂,难以说明,但是现在多数的文章对LCD和CRT刷新率的区别说的不清楚,而只有一知半解的人尚在多数,网上的文章一大摞,随便引用来引用去就把一些本来没有被误解的问题弄得更加混乱。
有个说法是 1Hz 和 60Hz 的刷新率对于LCD是一样的。我想这个说法应该是在一开始就被理解得不是很正确,或者是说的不够明确而造成误解。我的意思不是说这个说法是错误的,而是说,这个说法不完整,没有让人明白 1Hz 和 60Hz 在 LCD 上产生的不同效果。那么这里,我不只打算告诉你关于CRT,LCD的刷新率,还有要告诉你和刷新率有关的画面撕裂和垂直同步这些问题的实际情况是怎么一回事。如果有笔误请指出,如果有不同见解请勿讨伐,我写这个是叙述情况,这些东西的标准不是我来制定,它们就是这么运作着的。这些内容很多,我是在线写的,中途还吃晚饭洗澡,最后也没有检查,所以难免出现中断忘了续上的地方或者语句不通顺之处,如发现请指出我再进行修正。
刷新率是显示器的一个参数,但它是显示器工作在能接收某个刷新率信号的状态下的一个参数,这个信号的发送端是显卡,这点必须明确。
为了说明 LCD 的刷新率,我必须从 CRT 说起,才可以让你知道 CRT 和 LCD 之间一个可以看得到的明显不同:闪烁。
关于 CRT 刷新率低产生的闪烁,很多人都有了解,总的来说,就是刷新率不足够高的情况下,CRT 的电子枪更新屏幕的间隔时间太长,以至于被人的肉眼分辨出,在两次更新屏幕内容之间,出现了一次黑屏。
那么,刷新率和 CRT 的黑屏有什么关系?
CRT在没有被命令控制的情况下,电子枪不发射光束,就是说,如果你给CRT一个命令,说“现在我给你一个画面,你显示出来”,这时CRT的电子枪一次性,从上到下(我们忽略隔行扫描,因为现在我们几乎不用到这种扫描方式了),将整个屏幕扫描一次,让这个画面从屏幕上显现出来。
OK,扫描完了,这时候,CRT没事干了,怎么办呢?
黑屏。
这是CRT的显象方式决定的,没有持续的扫描,那么你看不到持续的画面。假如有 1Hz 的信号,那么CRT在每一秒钟内,大部分时间是保持黑屏。
因此,刷新率是这样的:显卡为了让CRT显示器持续的保持画面的显示状态(即是说,让CRT的电子枪反复扫描),必须每隔一个时间,就发送一次画面的数据,让CRT知道这时候我又有工作可以做了。刷新率是显卡来决定的,而不是显示器,当然,如果刷新率超过显示器的承受范围,那么显示器自然会拒绝执行。60Hz表示显卡会在一秒钟内,发送60次画面给显示器,75Hz表示一秒钟发送75次,CRT的扫描枪在一秒钟内扫描整个屏幕的次数越多,就会让这一秒钟内每次扫描之间的黑屏的间隔时间越少,因此你能明显看出CRT的高刷新率和低刷新率的区别——不闪烁还是闪烁。
这是刷新率在CRT上面的情况,那么,LCD是怎么处理的呢?
刷新率对于 LCD 是一个没有意义的东西,这确实是对的,刷新率在 LCD 时代还存在是因为兼容考虑,也是对的,但是我们怎么理解 1Hz 和 60Hz 对 LCD 的影响?
LCD在显示画面的时候,光线是由显示器的背光管来提供的,液晶本身不发光,只要没有给液晶一个新的信号,那么液晶就保持原样。就是说,假如显卡发出一个新画面,然后就没有再发出新画面了,这时,LCD不会像CRT一样发生黑屏,因为背光管是持续保持发光状态。那么如果有一个 1Hz 的显示信号在持续发生,那么,LCD 会一秒钟更新一次整个屏幕。
但是,LCD并不是一种更改画面需要整个屏幕一次性更改的材料,可以单独一个液晶改变,也可以某些液晶改变,这样的话,画面就不需要整个重新刷新来显示了,只需要更改不同内容的那些液晶,就能显示另外一个画面。然而,事情并不是这么顺利的,因为显卡不知道怎么去发送一部分画面,目前还没有这种技术标准的出现,所以,每次有画面内容被发送时,都是整个画面发送的。
那么回头再重新看看信号是 1Hz 的下,LCD 的处理情况。显卡发送持续10秒钟同一个画面,我们就看到一个画面保持不变10秒钟,而这时,LCD 共收到了10次更新画面的命令,只不过这10次画面的结果是一样的,加上两次更新画面的时候,没有出现黑屏现象,因此,我们是分辨不出来的。
显卡的信号发送器按照一个固定频率发送画面,不管你的游戏能在一秒钟处理多少,哪怕是一千个画面。那么这时怎么办?1Hz,会让显卡一秒钟只发送一个,发送哪一个?这个问题相当复杂,关系到显卡各个处理单元的协作问题,无法简单说明白,因此只需想象在要发送的那一刻,有哪一个画面是最后生成的,就发送哪一个。
现在你知道 1Hz 对于LCD是什么概念呢?对的,一个和CRT不同,不会看到黑屏的画面,但是,画面在同一秒钟内,是保持静止的。
换成60Hz的信号的话,对于LCD来说,它同样会在一秒钟内刷新整个屏幕60次,75Hz就会一秒钟刷新75次。因此,我们不能简单的认为1Hz和60Hz对LCD没有区别,对于液晶的这种技术来说,他是不需要一个持续的信号来保持画面,因此他们没有区别,但是如果我们在一秒钟内想看到看到的不只一个画面的话,那么就让显卡的信号发生器继续工作吧,发送更高频率的信号,让LCD知道我有好多画面要等着显示。
说到这里,应该能明白为什么 LCD 也需要刷新率了,不是LCD自己决定的,而是显卡决定的,显卡没有信号过来的话,LCD就不知道画面需要变化。
那么,我等到画面有变化的时候,就发送一个信号过来不就行了?干嘛画面没变的时候,还重复发送同样的画面给LCD叫它更新画面?
假如技术允许的话,可以这么做,LCD的工作原理可以接受这样信号而让我们看到一样的显示效果,但是目前不行,为了兼容CRT,同时也因为显卡内部各个单元协作的处理方式,目前显卡必须有一个固定频率在发送最新的画面,前面已经说过了。而显卡的发送方式,决定了即使是LCD,也必须按照这个方式来处理输入信号。
LCD还有一个重要指标,响应时间,和刷新率有什么关系?
没有什么重要关系。当LCD的信号接收器收到一个画面信号时,它通知显示处理单元让它去改变液晶的角度,以显示最新的画面,然后工作就完成了,至于改变液晶角度需要多长时间,信号接收器就不管了。液晶改变角度的时间决定了我们最终看到的从第一个画面变化到第二个画面的时间,而画面什么时候开始改变,就是看那个时候是否有一个还没有显示过的画面。如果液晶改变一次角度需要1秒(只是假设),那么一秒钟内给LCD发送60个画面也好,1个画面也好,他只能在这一秒钟变换一次液晶角度的,而我们在这一秒钟内就清清楚楚的看到液晶转换角度的过程,拖尾现象就产生了。实际上,液晶改变角度的速度已经足够快了(响应时间的问题),所以,一秒钟给它发送60个画面,它也能自如的将每一个画面都成功显示,而不会让我们看到液晶角度的转换过程。但是在更高频率比如120Hz的情况下,如果液晶不能在 1/120 秒内完成一次角度的转换的话,我们就漏掉一些画面了。由于目前LCD的瓶颈在于响应时间,虽然标称2ms的都有,但实际上,这些并不是真正的转换角度的全部时间,而是灰度响应时间,就是说从黑到白的转换过程,但是很遗憾我们的显示器是彩色的,LCD并没有输入频率追求更高指标,有的也就是提供75Hz的工作频率。应该说,更高频率可以在一秒钟内有更多的显示画面从显卡发送过来,并被LCD接收,但是我们看不看得到全部被发送的画面,就由响应时间来决定了。
关于刷新率,应该说这么多已经够明白了,那么垂直同步在CRT和LCD上面的产生又有什么不同?
垂直同步是怎么回事?画面为什么会撕裂?撕裂只有3D画面才会吗?
垂直同步对于LCD和CRT是一样的,为什么呢?前面已经说过,刷新频率是由显卡来产生,无论LCD或是CRT,都是根据接收的信号进行显示而已。撕裂经常在没有使用垂直同步的情况下发生,垂直同步是避免画面撕裂的一种方法。那么为什么会撕裂?
当一个显示信号被发送的时候,比如一个频率60Hz的显示信号(无论用的是CRT还是LCD,前面已经说过,虽然成像原理不同,但是对于频率的处理却是一样的),当第一个发送信号开始时,显卡会将发送缓冲区的数据发送给显示器,发送缓冲区的内容就是当前要显示的画面。然而,数据正发送一半,由于显卡处理速度足够快,第二个画面已经处理完成,并同时要求发送了,这时会发生什么事情呢?频率发生器还没有到第二个显示信号的发送周期,因此立即发送是不可能的,但是显示内容是不断更新到显卡的发送缓冲区的,所以正在被显示器读取的的第一个画面的内容,突然就被替换成最新处理完的第二个画面的内容了。而显示器由于还没有收到第二个显示信号,这样就会在不知情的情况下,继续将剩下的画面内容显示出来,变成一部分显示内容是接收自上个画面,而另一部分则是刚刚被更新过的最新画面。如果显卡的处理速度足够快,甚至可能出现显示器显示出来的画面,是由显卡处理的3个以上的画面组成的。这就是撕裂形成的原因。
垂直同步怎么消除撕裂呢?显示信号发生的时候,你不能强制要求中断上一个信号并重新发送一个信息号,因为它需要按照一个相对稳定的频率来产生信号,所以,一切问题在于,怎么让信号完整发送完之后,再去更新缓冲区。而垂直同步是等待一个信号发生周期完成,再更新缓冲区,这样就能确保每一个画面都是完整的被发送,不会发生中途被修改的情况。
所以,不只有3D画面会撕裂,任何情况下,只要没有利用垂直同步的方法,就可能产生撕裂。而垂直同步只能在全屏程序中被利用,因此,窗口化的、非全屏的程序,无论是任何程序,都会出现撕裂现象,只是根据画面变化的速度,明显或者不明显而已。
但是即使是全屏程序中,我们的垂直同步也不愿意开,因为会让程序运行缓慢,这又是为什么?
如果一个程序,这里假设是3d游戏,处理速度很快,本来一个信号发生周期能渲染出3个画面(这也是让很多人迷惑的,游戏的FPS和LCD的显示关系),利用垂直同步等待上一个信号周期结束才发送第二个画面到缓冲区,那么,这个过程自然没有事情,因为它在等待,而且它也不能做太多事情,不然这些数据没有被处理,堆积下来的话会是一个问题。所以,它的效率就低了。通常,改善垂直同步时效率低下的一个方法是利用显存开辟更多的缓冲区,显卡有个存储发送内容的缓冲区,如果这个缓冲区暂时不能用,当前的显卡驱动程序多数允许在另外的地方开辟更多的缓冲区,让游戏在等待的同时可以继续做更多的工作,并不用担心没有地方存放处理完的画面,但是,由此带来的问题是操作感滞后,假设游戏另外开设了2个缓冲区,因为当你看到显卡的一个显示画面时,游戏程序实际上已经运行到后面的第3个画面了,处理的操作数据也是针对那个时间的画面的情况进行处理的,所以你会觉得操作感迟钝,明明刚刚看到画面,你已经做出判断并按下按键,但是实际上,对于游戏程序,这个按键是在你看到的画面之后再过两个画面才按下的。所以这种方式并不被很多人所接受,特别是在需要反应灵敏的游戏里。
最后,我们关心的是由显卡渲染出来的画面我们能看到多少,所以我下面称显卡渲染出来的画面为渲染画面。
那么,FPS和刷新率和LCD的响应时间,他们最终怎么样影响到我们一秒钟能看到的渲染画面的数量呢?
可以这么说,游戏用足够多(大于等于显卡的刷新率)的帧数率(就是足够快的画面渲染速度),提供渲染画面,并叫显卡发送渲染画面的内容,显卡的信号发送器按照自己的固定频率,将最新的渲染画面内容传送给显示器,显示器用一个匹配的接收频率接收渲染画面的数据,并在每一个频率周期交一次画面数据给显示处理电路,显示处理电路让显示单元完成显示工作,CRT是让电子枪发出光束投影到荧光屏让我们看到渲染画面,而LCD是让液晶改变角度结合背光管让我们看到渲染画面。
这个过程中,处理得最慢的一个环节会限制到你看到的渲染画面的数量。
而无论CRT或LCD,工作在一个固定刷新率,就会按照每秒固定的速度更新一次显示屏,而无论游戏的帧速多高,无论一秒钟游戏送出多少渲染画面,我们在一秒钟里,进入我们眼睛的最高数量的渲染画面,不高于屏幕更新的速度,受限制于显卡提供的渲染画面数量,如果是LCD,也受限制与液晶一秒钟内能转换角度的次数。
我们实际看到的屏幕上的画面,有可能连续几个都是同一个渲染画面,也有可能显卡想让我们看到的一些渲染画面最终没有被我们看到,它们取决于一个渲染画面能不能成功到达我们的眼睛。
写了好多,就这些,不说太多,越来越长了。