img src="http://www.yesky.com/Hardware/72620543991349248/20000825/0824l.gif" width="120" height="100" align="right"> FSAA(Full
Scene/Screen Anti-aliasing,全景/屏幕抗锯齿)是1998年已经提出并付之实行的概念,但真正有实用性的解决方案到了2000年才见到,其中最特出的两位是3Dfx的Voodoo
5和nVidia的GeForce2。关于3Dfx的FSAA我早己和大家讨论过,这里不再重复,本文主要对象是nVidia的FSAA技术。
一、nVidia的FSAA技术
nVidia发布5.22测试版驱动程序之后,FSAA就成了热门话题,tnt、tnt2、Geforce、Geforce
2系列都可以调用FSAA功能,不过,FSAA有多种模式,每种对显卡要求和整体性能都不尽相同,首先,我们应该搞清楚nVidia的FSAA是如何执行的。
nVidia的FSAA基于OGSS(Ordered Grid Super-Sampling,顺序栅格超级采样),它是一种传统的抗锯齿技术,可以用在几乎所有3D加速卡上,让它们支持非显示缓冲渲染。非显示缓冲存储了帧的像素颜色、Z和模板值,与前置和后置缓冲的最大差异是它不能直接显示到屏幕。
OGSS是最基本的子采样,按一定顺序来对每个像素采样,并以水平或垂直方式排列,建立一个点矩阵。有些人会说这是软件执行,但不借助硬件功能,有些步骤将不能实现,比较正确的说法就是半软硬结合的FSAA。nVidia显卡的抗锯齿处理过程如下:
[1] 游戏引擎使用Direct3D或OpenGL创建一个3D环境,这些3D API都使用三角形作为基本块,每个三角形在3D空间中有一个坐标,通过特殊的驱动程序可计算坐标的转换和光线处理。假设屏幕为10*10像素,三角形的三个顶点分别是(5,5)、(10,10)和(10,0)。
[2] API按照不同的屏幕分辨率供给不同的坐标,当顶点经过转换和光线处理器之后,它会得到一个屏幕相对坐标,此坐标与3D应用程序中的真实世界坐标有所区别,最终屏幕分辨率决定了坐标的位置。在抗锯齿处理中,我们需要进行上行采样来获得更多标本(Geforce/Geforce2用T&L单元来完成采样工作),至少要在垂直和水平方向各采样一次,才能得到有效的抗锯齿图像。
更多的子采样需要原始像素要做更多的转换,同时也意味着过渡更平滑,游戏画面变得更漂亮。上行采样次数通常是2的倍数,屏幕分辨率也会上升2的倍数,如上例子10*10像素经过2倍OGSS就成为了20*20像素,三角形顶点坐标分别是(10,10)、(20,20)和(20,0)。要注意的是,三角形在屏幕的相对位置不变,与抗锯齿之前相同。
<
[3] 所有几何图形将会从垂直和水平方向同时作缩放,渲染工作当然也会加倍,接着发到非屏幕缓冲,在里面进行下行采样,去掉一些多余像素,并保留高质量纹理信息,最后送到屏幕显示缓冲。此例仅基于一个三角形,在实际应用中,抗锯齿工作会在每个三角形中进行,再组成一幅完整的3D图像。
[4] 当超级采样的帧渲染结束,我们会得到一个高分辨率图像,下行采样的主要工作是混合像素色彩,从四个邻近的像素颜色值得到一个加权平均数来作为混合像素值,即四个数值相加再除以4,与纹理双线性过滤的工作原理一样。由于四个高分辨率像素是最终像素的子采样,过滤之后会变得很平滑。假设一个简单的例子包括黑条(0%)和白色背景(100%),在垂直方向表示斑纹效果,一个子采样包含两个黑色和两个白色子采样,0%和100%交互混合将得到50%的效果。10*10例子中的三角形重新回复正常,只是加入了OGSS超级采样技术,让画面变得漂亮了。

[OGSS过程示意图,OGSS使用2倍子采样]
一般情况下,顶点位置的乘法是通过软件来实现的,nVidia借助T&L单元做到了同样的计算,如果没有T&L才交由CPU处理,因此,nVidia的抗锯齿也是一种硬件特性。除了2倍采样之外,3倍、4倍甚至更多的采样也是有可能的,只要显示芯片速度与显存容量足够,更多的采样会带来更完美的图像。