用CPU解决抗锯齿——MLAA抗锯齿技术探析
技术空间
近年来随着图形芯片技术的不断发展,PC图形子系统的图形处理能力有了大幅度的提高,这使得我们有可能在计算机上看到更精美的实时生成的图像。但我们不得不面对这样的问题:不管游戏人物和环境有多真实,游戏画面的主要构成方式仍然没变:一帧画面由成千上万像素构成。这意味着物体多边形的轮廓始终有锯齿,所以在很长一段时间里,抗锯齿的问题依然是衡量显卡性能的一个关键要素。而在最近家用游戏机PS3推出的一些大作中,如《战神3》、《暴雨》,我们发现一个有趣的现象,游戏厂商并没有采用传统的MSAA抗锯齿技术,而是采用了Intel公司最新推出的一项抗锯齿技术——MLAA……MLAA是何方神圣?为什么游戏厂商会选择这项技术?下面让我们一起来了解MLAA。
当前抗锯齿技术及不足
目前消除锯齿的途径主要有两种。一种是提高分辨率。分辨率上升,每一个像素点更小,图像更为细腻,锯齿情况也大为改善。但从本质上来说,这是数据更为精确的结果。在格子较多的系统中,相当于坐标的单位值更小,计算机的采样点更精细,数据更为接近真实值,近似后误差降低,因此,锯齿现象就大大减少了。不过高分辨率图形的渲染会极大地消耗GPU运算资源和显存容量及带宽,因此这也一直让游戏玩家们难以取舍。
另一种是改进点采样方式,从而实现对单个像素更细致的采样和计算,这也是当前主流的消除锯齿的方法。目前常见的抗锯齿算法有SSAA(超级采样抗锯齿)、MSAA(多重采样抗锯齿)、CSAA(覆盖采样抗锯齿)、CFAA技术(可编程过滤抗锯齿)等等。SSAA的原理是渲染时将画面按照显示器分辨率,以数倍的分辨率渲染整个画面,与提高分辨率的方式异曲同工。其中CSAA、CFAA分别是NVIDIA、ATI的最新抗锯齿技术。目前CSAA已经成为新一代游戏的抗锯齿标准,而CFAA是ATI为对抗CSAA推出的技术。虽然CFAA可以提供高达 24×的采样,但由于没有按照标准的多边形像素数量进行取样,每个基本取样单元之间存在重复的问题,因此处理物体边缘纹理的质量较差,远不及CSAA。
不过,目前,无论哪种抗锯齿技术,仍无法摆脱开启后性能下降的问题,特别是在大屏幕液晶流行的今天问题更是明显。开发人员企图从根本上改变这种抗锯齿算法,将跨越边缘像素的前景色和背景色进行计算混合,用第3种颜色来填充该像素,从而更有效地改进图像边缘的表现效果。这就是英特尔准备推出的MLAA技术。
MLAA技术,将锯齿模糊化
MLAA是什么?MLAA全称是Morphological Antialiasing,意为形态抗锯齿,是Intel推出的完全基于CPU处理的抗锯齿解决方案。形态反锯齿有一个区别于其他算法的特征,那就是它完全独立于传统的渲染管线。MLAA采用光栅和光线追踪两种应用方式,没有提供硬件加速,整个画面的渲染工作全部交由CPU来完成,在这里GPU的作用只是将最终渲染出来的画面传给显示器,仅此而已!所以这项技术最大的好处就是可以让GPU不再承担抗锯齿的工作,大大降低GPU在运行3D游戏时的压力。
相对于当前抗锯齿技术所采用的Pre-filtering(预滤波)方式,MLAA采用Post-filtering(后滤波)机制,好处就在于可以按照颜色是否连续来驱动抗锯齿,而前者只能在初始边缘来抗锯齿。MLAA这个机制说简单也简单,说复杂也复杂,如果使用简单的机制,可以用专用的电路配上可配置的SRAM来实现,如果使用复杂的机制,则可以用后处理来实现。这种机制可比ATI的CFAA达到更高的采样方式,不同的是CFAA只能做全屏模糊,而MLAA目标是图案的轮廓线模糊(注意:不是几何模型的轮廓线模糊)。这种技术有点类似于数字图象处理的边缘检测技术,就是分析像素颜色,然后从离散的像素图像中还原出大致的边缘或是添加一些辅助边缘,从而利用可编程的滤波器做一个Post-filtering(自检滤波)。
图像的边缘是指图像局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作一个阶跃,即从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。图像的边缘部分集中了图像的大部分信息,图像边缘的确定与提取对于整个图像场景的识别与理解是非常重要的,同时也是图像分割所依赖的重要特征,边缘检测主要是图像灰度变化的度量、检测和定位。MLAA包括三个主要步骤:
1.寻找在特定的图像像素之间的不连续性,在有些图像中梯度幅值较大的并不是边缘点。最简单的边缘检测是梯度幅值阈值判定。在这里,图像像素之间的边缘是非常重要的特征之一。图像边缘保留了原始图像中相当重要的部分信息,而又使得总的数据量减少了很多,这正符合特征提取的要求。边缘提取往往需要输出的边缘是二值图像,即只有黑白两个灰度的图像,其中一个灰度代表边缘,另一个代表背景,此外还需要把边缘细化成只有一个像素的宽度。
2.确定预定的模式。在这一步骤中,MLAA技术主要是确定要渲染的图像,并且依靠处理器来计算渲染的图像大概的质量以及实现的抗锯齿效果。
3.在预定模式中进行邻里边缘色彩混合处理(也称为邻域处理)。在这里将会确定模式中的相应模板。这些都是模板运算,首先定义一个模板,模板的大小为3×3或2×2甚至更小的尺寸。运算时,把预定模板中心对应到图像的每一个像素位置,然后按照模板对应的公式对中心像素和它周围的像素进行数学运算,算出的结果作为输出图像对应像素点的值。
MLAA处理方式最大的优势是可以在多物体渲染时不会对系统造成太大的负担。事实上,这个过程虽然也可以在GPU上执行,但主要算法仍是由CPU运行。这样可以使用并行多核机器来实现再处理。虽然在对物件同时进行渲染处理时,MLAA光线追踪效果的工作量是不可想象的,但半导体技术的进步已经使得单台PC的运算能力有飞跃性的提高,这也使光线追踪纳入游戏应用成为可能,特别是在多核技术的支持中,完全可以利用空闲线程实现最终的图像输出,完成渲染或者架构建模处理,从而实现更好的负载平衡。
MLAA所采用的光线追踪算法具有极高的平行度,这是因为在光线追踪渲染中,屏幕上每一个像素都对应一束光线,每一束光线都可以被独立运算,这就意味着可以将需要处理的图像分割成多个部分,分别交由每个核心处理,每个核心都可以全力计算自己的图像颜色值而不必受到其他核心的影响,比如4核心的就可以将画面一分为四,这样效率就可以达到单核的四倍!这也让MLAA拥有极高的渲染效率,比如3GHz的核心可以每秒渲染约2000万像素的数据量。
当然MLAA也有一个缺点。由于采用后滤波机制,所以无法避免Nyquist Limits(奈奎斯特采样定律),即显示的频移超过Nyquist极限时,图像色彩发生混迭的现象,造成图像失真。这样在实际的游戏图像上,我们往往会看到采用MLAA的抗锯齿技术后,物件以及人物的纹理和贴图会出现模糊乃至失真的现象。



写在最后
通过上面我们展示MLAA抗锯齿技术的种种优势,相信很多玩家都热切期盼着采用MLAA技术的游戏更多地出现。然而就目前来看,这样的愿望还有点为时过早,目前MLAA技术还需要面对不少问题。比如由于MLAA技术最大特色是支持光线追踪技术,一般都交由CPU处理,因此对CPU性能要求极高。根据Intel的说法,MLAA要达到目前16×CSAA那样的画面质量,同时运行可流畅运行的帧数,至少需要6个内核来支撑。不过,对此Intel倒是蛮乐观,它宣称能够渲染出“现代游戏效果”的硬件将在近年内诞生,而且目前PS3的《战神3》以及其他很多游戏已经提供了MLAA的支持,这一方面说明PS3的CELL处理器性能足够强大(当然也说明了它的图形核心能力有限),另一方面这也是一个积极的信号。
值得一提的是,MLAA是Intel研发的技术,我们不难推测这肯定是Intel用于Larrabee图形核心的一个法宝,不过Larrabee已然夭折,想要尽力在游戏厂商中(特别是PC游戏上)推广这项技术难度无疑大了不少。而且从实际的表现来看,在GPU能力越来越强的时候,传统的抗锯齿技术在消除锯齿的同时,对纹理贴图等画质不会造成影响,而MLAA尽管为GPU减轻了负担,但对游戏画质则有一定负面的影响,所以要想在现有的业界环境中普及MLAA,自然会有一定阻力。不过MLAA的好处不言而喻,在GPU无法承担游戏高画质的前提下,MLAA只要拥有一颗多核处理器,就能实现至少8×MSAA的抗锯齿效果,这对不少游戏玩家的诱惑是非常大的。实际上,MLAA最有效的应用环境就是那些使用中低端显卡,处理器性能不错的PC(或者是游戏主机),相信MLAA技术进一步成熟后,会有更多的游戏公司在游戏中采用这项抗锯齿技术。

