试了mlaa,后处理的aa。

    最初的文档是intel发布http://visual-computing.intel-research.net/publications/papers/2009/mlaa/mlaa.pdf,只有cpu实现。

    后来有人做了gpu版本http://igm.univ-mlv.fr/~biri/mlaa-gpu/,有篇paper,不过跟没有差不多,似乎还有个siggraph的talk,但是网上找不到,总之这个版本

有一定的简化,Z shape简化为L shape。不过对于一般游戏来讲效果已经足够。

    mlaa应该是后处理方式的aa,能达到的最好的效果了,越来越多的游戏用了这个东西,包括战神3,不过它用的是ps3的spu。

    我刚开始看上面那个gpu版本被他那些flag弄迷糊了。于是自己根据intel那个山寨了一个,回头再来看终于容易多了。。。

    gpu实现,不过在我的垃圾显卡(9400)上要花将近10ms,相信在最新的机器上应该可以勉强跑的起来,因为效果确实不错。

    先看看效果,上面没开,下面开:

 

对比可以看到,下面的边缘平滑的非常好,而且对于整体的颜色粗糙部分也有一定的改善,但这种改善会造成原有的信息有一些偏差,不过对于游戏通常这个偏差可以忽略。

 

过程如下:

首先第一步生成边缘图,红线是横线,绿线是竖线,那个gpu版本是将颜色转换到lab空间判断,我这里直接用rgb分别判断:

 

第二步分别生成横线和竖线的长度信息,我没有按照上面那篇gpu版本的方法分level做,而是直接做几次循环来取:

 

然后根据上面几张图判断shape类型,生成上下左右四个像素的比例图:

最后一步就blend到最终target上,也就是上面的效果了。

   

    虽然mlaa目前来讲耗的时间还是比较多,但是在延迟渲染上,比起硬件msaa和ssaa(supersample),还是要快很多,估计以后应该会有些变形,提高些速度。

    mlaa对于边缘的过滤非常漂亮了,但是缺点是由于是后处理,因此在光栅化的时候丢弃的信息就无能为力了,比如屏幕上的断断续续的细线之类。