传统的抗锯齿技术,是贯穿在整个3D处理中的一种算法。比如SSAA,可以理解为大幅度提高原始图形分辨率,在处理计算后,再缩小分辨率并按照要求的分辨率计算输出的“暴力”抗锯齿方法;常见的MSAA是检测多边形的边缘,对边缘采样进行多次计算,后输出相对平滑的边缘效果。相比之下,MSAA速度更快,但不够精细,对多边形内的纹理等抗锯齿效果的处理可能不如SSAA到位。
MLAA和上述抗锯齿技术都完全不同。从技术原理来说,MLAA更类似于一个2D滤镜,它并没有贯穿在整个3D处理中,反而是在整个3D计算完成,即将输出画面到屏幕上之前,利用DirectCompute对即将显示的画面进行再处理。此时MLAA会自动寻找画面中的高对比度边缘(一般这些地方都是分界线、物体边缘等人眼比较敏感的部位),专门对这些边缘进行特殊算法操作。换句话来说,MLAA是一个彻底的后期处理技术。
图1
图2
笔者首先运行的是含有基础对比的MLAA软件,我们先看简单的基础对比。图1是没有经过MLAA处理的图片。图2是打开MLAA后的图片,内含斜线、色块以及文字,它的重点在于展示文字和斜线等特别适合抗锯齿处理的部位在MLAA处理后的效果。
我们用一个不太恰当的例子来更好地理解MLAA技术:如果你有照相机,在拍摄过程中使用各种灯光、道具、不同的镜头等来改善拍摄效果,就类似传统的抗锯齿操作。这些操作是针对拍摄本身的,会改变终得到的数据。但你在拍摄了照片以后,利用Photoshop中的滤镜对照片处理,就属于拍摄后期处理,MLAA技术就是3D后期处理。假如Photoshop中有类似MLAA功能的滤镜,我们甚至可以直接对2D图片进行MLAA抗锯齿操作。
图3
图4
笔者用细节图展示经过MLAA处理前(图3)后(图4)的画面。我们可以清晰地看到MLAA对斜线以及边缘处的处理效果。对于这种黑白对比强烈的理论性测试,既能大限度展示MLAA的优势,又能很明显地体现MLAA的劣势。MLAA的优势在于抗锯齿效果处理很出色,在测试中获得了接近MSAA 8X的抗锯齿效果。但劣势也比较明显,由于MLAA采用后处理,因此对文字锐利的边缘也有“抗锯齿”效果。比如图中“t”的字母交叉处,就出现了明显的“肥胖”现象,字的边缘也有圆滑现象出现。这说明MLAA对文字支持可能存在一定问题。
由于MLAA是纯粹的后期处理,因此它的兼容性极为出色。理论上MLAA可以在任何游戏上运行,包括DirectX 9、DirectX 10、DirectX 11游戏都可以使用MLAA进行抗锯齿处理,并获得同样的抗锯齿效果。不仅如此,MLAA还可以和任何其他抗锯齿模式叠加,比如MLAA+MSAA的处理等。只不过目前受限于显卡性能,我们还是好单独开启MLAA或者MSAA,否则性能下跌幅度会较大,会影响游戏本身的流畅性。
AMD首次公布MLAA抗锯齿技术是在催化剂10.10a Hotfix中,期间已经更新过b、c、d等版本。截至本文发稿前,新的催化剂驱动10.10e已经发布,新版本不但进一步加强了MLAA技术,还使得Radeon HD 5000系列也能支持MLAA技术了(MLAA技术发布初期只支持Radeon HD 6000系列)。
从AMD官方给出的对比图来看,MLAA在对比强烈的边缘处理时作用明显,效果类似于特定的模糊处理。但作为一种后期处理技术,MLAA对画面全局使用滤镜处理,是不是也会影响到纹理的锐利度?比如不应该处理的地方却进行了MLAA抗锯齿,是否导致画面质量变差?下面笔者将通过实际测试来证明这个问题。