MCPLive > 杂志文章 > 让视界变得更加平滑 认识抗锯齿(上)

让视界变得更加平滑 认识抗锯齿(上)

2009-01-08maladana《微型计算机》2009-01

小D是一个游戏玩家,看到很多游戏大作新鲜上市,比如《Call of Duty 5:World at War》、《极品飞车12》等。不过让小D苦恼的是,这些游戏的画面总有一些“很影响视觉效果”的地方,比如空中好好的电线,看上去偏偏就支离破碎;游戏画面中的墙体边缘也是犬牙交错,而且无论怎么调节显卡特效设置,都没办法让它们更真实。这是怎么回事呢?看来,这抗锯齿的知识,真的该好好普及一下了。

恐怕很多玩家都会有和小D一样的苦恼,为什么游戏画面看起来不精致呢?反而有种破碎或者粗糙感?好好的两点间连接成的一条直线,电脑为什么就显示出来有小格子甚至干脆丢失呢?难道电脑连一段漂亮而流畅的圆弧都画不出来吗?要解答这些问题,我们需要从电脑的显示原理来探寻一下!

锯齿的产生

假设我们需要画一条曲线,应该怎么做呢?可以使用圆规,甚至直接用手在纸上随便画,我们画出的线都是平滑的,和想象中的线条完全相同。但对计算机,特别是3D游戏来说,想得到平滑的线条是非常困难的。为了解释清楚这个问题,我们先了解一个简单的概念:采样点。

对计算机来说,采样是有条件的使用数据。比如我们需要将一个曲线描绘在计算机上,计算机必须确定曲线上每一个点的位置,才能记录这个曲线。我们给计算机这样的条件:建立一个26×18的方格阵列,将曲线通过的格子全部染色。

当我们在方格阵列上描绘出这些曲线通过的格子后,就完成了采样工作。对计算机来说,下一步工作就是确定坐标,进行计算。我们可以清楚地看到,这些染色的方格连起来后形成的图形非常粗糙、不平滑,并且这些方格的坐标难以代表原始的曲线,因此计算机显示出来的线条并不是我们开始绘制的平滑曲线,而是那些灰色的格子代表的非常粗糙的曲线。为什么会这样?采样点过少吗?我们在一个确定的面积内多只有26×18个采样点,如果增加采样点会怎么样呢?

我们将同样面积内的方格数量增加到55×48个,然后采用上述同样的方法对曲线进行采样。这次我们可以明显看出,格子的数量增加后,采样得出的曲线更为接近原始图形,重要的是它更为平滑。

分辨率上升,每一个像素点更小,图像更为细腻,锯齿情况也大为减轻。但从本质上来说,这是数据更为精确的结果。在格子较多的系统中,相当于坐标的单位值更小,计算机的采样点更精细,数据更为接近真实值,近似后误差降低,因此,锯齿现象就大大减少了。由此看来,分辨率越高,计算机采样点越多,锯齿现象就越少。

主流抗锯齿技术介绍

抗锯齿技术不仅仅是上文介绍的提高分辨率那么简单。每一种技术,都有其核心的部分存在。抗锯齿技术核心的部分就是算法。

目前在游戏和显卡中使用多的是全屏抗锯齿技术,Full Scene Anti-aliasing(简称为FSAA)。FSAA对全屏幕所有的图像都进行抗锯齿处理。比较常见有以下几种方法:

1.SSAA:超级采样抗锯齿

超级采样抗锯齿使用的方法正是我们在第二部分中介绍的方法。它通过将整个画面的分辨率提高来得到更为平滑的画面效果。比如19英寸显示器(16:10)的分辨率为1440×900,SSAA在计算的时候,将分辨率大幅度提升,比如2880×1800,获得更为精确的画面数据后再将图像显示在1440×900的画面上,效果自然更为平滑。

SSAA作为早出现的一种抗锯齿技术,从Radeon7000系列显卡到GeForce 256等老显卡都支持,甚至在后期的Voodoo显卡中都提供了对SSAA的支持。但是,这种技术对显卡的资源耗费巨大,提升分辨率来抗锯齿的方式看似非常简单,实际上还是有大量的不需要抗锯齿的部分也被纳入了计算范围,浪费了显卡的资源。

2.MSAA:多重采样抗锯齿

由于SSAA浪费资源比较严重,因此各家厂商都开发了更先进的MSAA抗锯齿技术,ATI和NVDIA的显卡都对这种抗锯齿技术提供了大力支持。

MSAA的原理很简单,它只对画面中多边形的边缘部分做抗锯齿处理。比如一个红色的圆,只对圆周作抗锯齿多重采样计算,但是圆周以内的部分则不会处理。这样就大幅度降低了显卡的计算压力,也一跃成为了有效的抗锯齿计算方法。MSAA的资源耗费只和图像中采用的多边形数量有关,因此在实际使用中有比较出色的表现。

不过,MSAA还是有问题,比如遇到了半透明的物体,如何采样?其它诸如铁丝网、密集草叶等,边缘不明确或者无比复杂,如何抗锯齿?因此,NVIDIA提出了透明抗锯齿、ATI提出了自适应抗锯齿技术,来专门针对如铁丝网、树叶等部位,采用额外的采样计算甚至局部使用SSAA技术,强行进行抗锯齿处理。

3.G80中出现的CSAA和R600采用的CFAA

CSAA是NVIDIA在G80中全新推出的一种抗锯齿技术。CSAA是对MSAA抗锯齿技术的更深一步发展。举例来说,如果使用16XMSAA,需要在周围取得16个采样点的色彩值和Z轴值,然后保存这些数值进行计算。而16XCSAA,则全部在被采样的像素点中心取得色彩之和Z轴值,然后对比并去掉同样的数据。一般来说,16XCSAA后只需要保存4份色彩值和Z轴值即可。换句话来说,4XMSAA耗费的资源和16XCSAA是相同的,但是,16XCSAA的画面效果相比4XMSAA胜出太多。


NVIDIA CSAA示意图

相比之下,ATI在R600上新采用的CFAA技术,也是MSAA技术的深化。它通过驱动判断对视觉效果影响大的多边形,然后针对这些多边形进行有目的的处理,以较小的性能损失达到较高的MSAA效果。根据ATI给出的展示图样,8×CFSS的效果比8×CSAA效果要更好,边缘更为平滑,锯齿现象更为轻微。


ATI CFAA

抗锯齿的故事我们就讲到这里了。除了本文叙述的各种抗锯齿技术外,AMD和NVIDIA还配合CrossFire和SLI技术开发出了更为精细,效果更出色的抗锯齿技术。

相信看了本文后,玩家们在实际使用中也会更为注意抗锯齿技术了。实际上,在保证性能的基础上,打开抗锯齿,获得更为精美的画面,何乐而不为呢?但是,面对形形色色的反锯齿算法,游戏中该怎么进行设置?是直接选择FSAA,还是NVIDIA或ATI自家的CSAA或CFAA呢?

下期我们将结合具体游戏教你使用好抗锯齿,在打开抗锯齿的情况下,减少显卡的性能损失,敬请大家关注。

分享到:

用户评论

共有评论(1)

用户名:

密码: