FSAA(全拼抗锯齿)
FullSceneAnti-aliasing(FSAA)是一种能够消除画面中图形边缘的锯齿,使画面看起来更为平滑的一种技术。而此抗锯齿(Anti-aliasing)的技术通常被运用於3D或文字的画面。其主要的方法就是将在图形边缘会造成锯齿的这些像素(pixel)与其周围的像素作一个平均的运算,来达到图形平滑的效果,但其缺点就是会造成画面有些许的模糊。
全屏抗锯齿大致可以分为以下几种模式:
一、SSAA-超级采样抗锯齿
人眼很难分辨超过300DPI以上的彩色点。也就是说,一台对角线为15英寸的显示器,如果分辨率为3600×2700的话,那就没有做全抗锯齿的必要了,因为人眼无法分辨那么细的点了。
超级采样抗锯齿(SuperSampling Anti-Aliasing)就是把当前分辨率成倍提高,然后再把画缩放到当前的显示器上。这样的做法实际上就是在显示尺寸不变的情况提高分辨率,让单个像素变得极小,这样就能够大幅减轻画面的锯齿感了。不过是由于对整个显示画面的放大,因此它消耗的显示资源也是非常大的。
二、MSAA-多重采样抗锯齿
多重采样抗锯齿(MultiSampling Anti-Aliasing)的原理与超级采样抗锯齿相同,不过MSAA是寻找出物体边缘部分的像素,然后对它们进行缩放处理。由于只是物体的外层像素进行缩放处理,忽略掉了不会千万锯齿的内部像素,所以显卡不会像处理SSAA那样需要庞大的计算量,因此MSAA比起SSAA来更有效。
三、CSAA-覆盖采样抗锯齿
覆盖采样抗锯齿(CoverageSampling Anti-Aliasing)是nVidia G80系列出现时一并出现的抗锯齿技术。它的原理是将边缘多边形里需要采样的子像素坐标覆盖掉,抒原像素坐标强制安置在硬件和驱动程序预告算好的坐标中。这就好比采样标准统一的MSAA,能够最高效率地执行边缘采样,交通提升非常明显,同时资源占用也比较低。
四、CFAA-可编程过滤抗锯齿
可编程过滤抗锯齿(Custom Filter Anti-Aliasing)技术起源于AMD-ATI的R600家庭。简单地说CFAA就是扩大取样面积的MSAA,比方说之前的MSAA是严格选取物体边缘像素进行缩放的,而CFAA则可以通过驱动和谐灵活地选择对影响锯齿效果较大的像素进行缩放,以较少的性能牺牲换取平滑效果。显卡资源占用也比较小。
目前最主流的是CSAA和CFAA应该是最实用、最有效率的全屏抗锯齿模式。它们不仅有良好的平滑效果,同时对显示资源占用率也不高。
AF(各向异性过滤)
各向异性过滤 (Anisotropic Filtering ):各向异性过滤是最新型的过滤方法,它需要对映射点周围方形8个或更多的像素进行取样,获得平均值后映射到像素点上。对于许多3D加速卡来说,采用8个以上像素取样的各向异性过滤几乎是不可能的,因为它比三线性过滤需要更多的像素填充率。但是对于3D游戏来说,各向异性过滤则是很重要的一个功能,因为它可以使画面更加逼真,自然处理起来也比三线性过滤会更慢。
HDR(高动态范围)
垂直同步又称场同步(Vertical Hold),从CRT显示器的显示原理来看,单个象素组成了水平扫描线,水平扫描线在垂直方向的堆积形成了完整的画面。显示器的刷新率受显卡DAC控制,显卡DAC完成一帧的扫描后就会产生一个垂直同步信号。我们平时所说的打开垂直同步指的是将该信号送入显卡3D图形处理部分,从而让显卡在生成3D图形时受垂直同步信号的制约。
当我们选择"等待垂直同步信号"(即打开垂直同步)时,显卡绘制3D图形前会等待垂直同步信号,当该信号到达时,显卡开始绘制3D图形,如果显卡性能较为强劲,在下个垂直同步信号到来之前已经完成了对该帧的渲染,显卡就会暂停处理,等下个垂直同步信号到来后才开始渲染下一帧。由此可见,当打开垂直同步时,游戏的FPS要受刷新率的制约,对于高端显卡而言,限制了其性能的发挥。
当我们选择"不等待垂直同步信号"(即关闭垂直同步)时,3D引擎将全速运行,不再等待垂直同步信号的到来,显卡性能得到了最大的发挥。所以我们测试显卡3D性能时,一定要关闭垂直同步。不少的朋友认为在游戏中关闭垂直同步可以得到更高的帧速,其实不然,这虚高的帧速不仅要受到显示器刷新率的制约,更会对游戏画面产生不良的影响。
你是否曾经试过,有时为了解决画面撕裂现象,而打开垂直同步(v-sync)之后,不但问题没有解决,反而帧速降低了。打开垂直同步(v-sync),可以把帧速限制在屏幕刷新率以下——对于通常的液晶显示器来说,也就是每秒60帧。玩游戏有60fps的帧速不错了,而且它能够使游戏显得更加顺畅。然而,有时会发现帧速一旦低于60fps的时候,就会被限定在30fps。这时你或许会忍不住嚎叫“拷!画面撕裂真TM难看,垂直同步也不见得好到哪里去!!!”。这并非全是垂直同步的错,通常是图像渲染同时使用双重缓冲(double buffering)和垂直同步所导致的。
为什么双重缓冲会导致如此恶果呢?显卡硬件基本上都有两个缓冲区,显示器上见到的图像在前缓冲区,接下来将要显示的一个图像在后缓冲区中。当我们打开垂直同步的时候,在显卡交换前后缓冲区的数据之前,需要等候下一个垂直空白周期(以60Hz刷新率的显示器为例,每一个1/60秒发生一次)以维持画面与显示器的刷新率同步。当显卡的渲染速度高于60fps的时候,不会有什么问题。如果理解这其中的道理,就不难想像,当显卡达不到60帧每秒时会发生什么事了。在那种情形下,由于后缓冲区里的下一帧还没有准备好,显卡要等到下一个垂直空白周期才能进行缓冲区数据交换。结果就是,本来应该每秒60次缓的冲交换,变成了每秒30次,这就是帧速被限制在30fps的原因。
这时就需要使用三重缓冲。有了三重缓冲,就有3个缓冲区,显卡无需等待前缓冲区清空进而腾出后缓冲区,随时可以把渲染结果放入第3个缓冲区。这就是说,可以在打开垂直同步的同时保持应有的帧速了。ATi和nVidia的驱动中都有打开三重缓冲(triple buffering)的选项。可惜这只能起到一半的作用,因为驱动中的3重缓冲选项只对OpenGL游戏起作用。加上OpenGL游戏远少于D3D游戏,所以事实上驱动的3倍缓冲选项在超过一半情况都不起作用。