首页 > 代码库 > MLAA

MLAA

MLAA全称是Morphological   Antialiasing

意为形态抗锯齿

是Intel推出的完全基于CPU处理的抗锯齿解决方案。

对于游戏厂商使用的MSAA抗锯齿技术不同,Intel最新推出的MLAA将跨越边缘像素的前景和背景色进行混合,用第2种颜色来填充该像素,从而更有效地改进图像边缘的变现效果,这就是MLAA技术。

常用的抗锯齿方法还有如SSAA(超级采样抗锯齿)

                                      MSAA(多重采样抗锯齿)

                                      CFAA(可编程过滤抗锯齿)

 

 图片MLAA采用光栅和光线追踪两种应用方式,没有提供硬件加速,

整个画面的渲染工作全部是交给CPU来完成,在这里CPU的作用

只是将最终渲染出来的画面传给显示器。所以这项技术最大的优势是可以让CPU不再承担抗锯齿的工作,大大降低CPU在运行3D游戏时的压力。

 

相对于以前的抗锯齿技术,MLAA采用Post-filtering(后滤波)机制,好处就在于可以按照颜色是否连续来驱动抗锯齿,而以前只能在初始边缘来抗锯齿。

 

MLAA包括3个步骤:

1.寻找在特定的图像像素之间的不连续性,在有些图像中梯度幅值较大的并不是边缘点。

2.确定预定模式,确定渲染的图像。

3.在预定模式中进行领里边缘色彩混合处理。确定模式中的相应模板。

 

 

MLAA处理的最大优势是可以再多物体渲染时不会对系统造成太大的负担。

当然MLAA也有缺点,由于采用后滤波机制,所以无法避免Nyquist Limits(奈奎斯特采样定律),即显示的频移超过Nquist的极限时,图像色彩发生混迭的现象时,造成图像失真。

==============================================================================================


AMD去年发布第二代DX11显卡Radeon HD 6800系列的时候,引入了一种新型抗锯齿技术MLAA(形态抗锯齿),并在后期提供了对Radeon HD 5000系列的支持。事实上很多玩家可能还不知道,MLAA技术并不是AMD发明的,而是Intel 2009年就提出的。现在看着AMD显卡享受自己搞出来的技术,Intel自然心有不甘,发布论文讲述了如何在CPU处理器上执行MLAA。

传统的超级采样、多重采样等抗锯齿技术都是在光线计算、纹理应用完毕之后进行的,都对GPU计算能力提出了很高的要求,MLAA则是在已经渲染好的帧画面上进行,属于后期处理技术。它会对像素边缘进行查找,识别出U型、Z型、L型等非连续的边缘模式,然后将它们与周围的颜色相混合,从而消除锯齿。 

Intel:且看CPU怎么实现MLAA抗锯齿

按照Intel给出的定义,MLAA是“一种基于图像的后期过滤技术,通过识别非连续图案、混合临近图案的颜色执行有效的抗锯齿”,“它是新一代实时抗锯齿技术的先驱,也是MSAA的对手。”

不同于传统的硬件抗锯齿,MLAA不是大规模并行的,这使得它正好能通过CPU处理器来有效地实时处理。MLAA对光栅化渲染和光线追踪渲染是同等兼容的,结合延迟光照时的功能也堪称完美。MLAA的另一个好处是只对每一帧进行一次计算,而与其画面复杂度无关,因此程序员可以轻松判断它对性能的影响。

MLAA最大的缺点是无法对亚像素(不足一个像素的画面)进行计算和抗锯齿,只能结合MSAA等其它方式进行。NVIDIA针对性提出的FXAA倒是可以。

Intel想通过CPU进行MLAA计算的想法其实与AMD现在提倡的异构计算有异曲同工之妙,AMD也完全可以把MLAA移植到CPU上,在Fusion APU融合处理器中的CPU、GPU两部分同时进行,从而实现效率的最大化,不过鉴于APU内部带宽的分配,可能还要等到AMD实现更快、更宽的互连方式才行。

也许Intel会在明年的下一代22nm Ivy Bridge处理器上实现MLAA?道其中的DX11级别图形核心是否也会支持?

Intel:且看CPU怎么实现MLAA抗锯齿

这是在Intel Sandy Bridge集成显卡上开启不同抗锯齿的性能影响比例。横轴场景复杂度代表画质高低,数轴毫秒代表渲染一帧画面所需要的时间。可以看出MLAA和不开启AA几乎是同步的,MSAA则随着场景复杂度的提高而延迟猛增。(底部的淡蓝色那条水平线请忽略)


========================================================================================

面对“开普勒”的强大攻势AMD有哪些优势让能够征服消费者?AMD在画质方面是有着传统优势的,俗话:“说A卡看画质,N卡玩游戏。”这其中的道理不是每个人都了解。下面我们看看AMD近代产品延续的两项AA抗锯齿技术——MLAA:形态抗锯齿和EQAA:增强型抗锯齿,是如何提升画质的。

通过APU加速实现MLAA:AMD走一步很大的棋

   AMD显卡在HD6800中首次使用了MLAA(形态抗锯齿技术),该技术并非AMD首创,是Intel实验室一个研究人员拿出来开放了。不过为神马AMD会用此技术??这个要从APU以及Direct Compute通用运算,和AMD的GPU通用有关。Intel尝试用CPU来进行MLAA处理,不过AMD推出的异构运算会更有优势。HD6800开始,支持显卡经过过DirectCompute来实现MLAA抗锯齿。

AMD传统优势 两大AA技术提升画质效果

形态抗锯齿效果,MLAA可以在很低的效能损失情况下得到优质的画面

AMD传统优势 两大AA技术提升画质效果

   为什么说是MLAA,即形体抗锯齿,它首先是通过“边缘检测”,识别Z\U\L等拓扑结构,然后重点地在指定边缘实现滤波。MLAA实际上是一种后期处理。

AMD传统优势 两大AA技术提升画质效果

MLAA对比SSAA效果,可以看到MLAA效果接近4x4采样的SSAA效果

AMD传统优势 两大AA技术提升画质效果

在使命召唤5里面,0AA和MLAA对比

AMD传统优势 两大AA技术提升画质效果

孤岛危机2 MLAA效果对比

AMD传统优势 两大AA技术提升画质效果

AMD传统优势 两大AA技术提升画质效果

   EQAA(增强型抗锯齿)是HD6900时一起低调发布的一个抗锯齿技术。该技术的理论画质提升比。采样能力比覆盖抗锯齿更甚。EQAA是MSAA采样样本的基础上,再增加覆盖采样。从而增加整个画面的精美度。图中可以看到增强型抗锯齿不但具备像素采样点,还会随机抽样更多的覆盖样品。


==============================================================================================

MLAA技术实质是什么?

传统的抗锯齿技术,是贯穿在整个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抗锯齿,是否导致画面质量变差?下面笔者将通过实际测试来证明这个问题。


MLAA