Unity后期处理-抗锯齿

一。产生原因
   顶点插值可以产生任意位置的顶点。但是像素不是,像素着色器如何着色是通过他的中心点是否被三角形覆盖决定的。所以会产生突变,在外围看来就是锯齿。
        

二 解决方案
1.  MSAA首先执行中心点的着色,然后把颜色复制给被三角形覆盖的采样点。最后加起来取平均来达到过渡,实现抗锯齿。
     unity里通过 QualitySetting里设置采样点个数即可。4个采样点是最常用的设置。

2. 当你采用DR渲染管线时,由于渲染是在第二个pass进行,这时几何信息已被丢失,所以无法进行判断着色点有没有被三角形覆盖。这时进行抗锯齿采用 FXAA方法。基于渲染好的画面,然后进行边缘检测,可以根据颜色,法线等方法,然后在重新渲染边缘颜色。坏处就是边缘检测容易有误差,当相机移动时,很容易出现闪烁情况。 
    通过给camera加入Antialiasing脚本。类型一般渲染 FXAA3,效率比MSAA快。算法思想就是取像素 上下左右四个点的像素值,然后经过一系列运算,最后加权得出结果的像素。
3. 当采用DL渲染管线,第三遍pass是可以有几何信息进行MSAA的。但是unity现在不支持。

抗锯齿一般伴随着边缘模糊,然后基本效果就Ok了

DR实现MSAA  http://docs.nvidia.com/gameworks/index.html#gameworkslibrary/graphicssamples/d3d_samples/antialiaseddeferredrendering.htm

参考文献
1. http://bullteacher.com/32-anti-aliasing.html
2. http://www.cbgitek.com/2015/06/06/anti-aliasing/
3. http://www.klayge.org/wiki/index.php/%E5%BB%B6%E8%BF%9F%E6%B8%B2%E6%9F%93#Anti-alias_2

你可能感兴趣的:(Unity效果分析)