MSAA的基本原理如下:

上图中,黑色方块代表了一个pixel,中间的圆点代表了这个pixel的中心,其余的四个叉是采样的位置,称之为sample吧(这些位置一般是由硬件自己实现的)。三角形在光栅化的时候,只要三角形cover了任意一个sample,并且通过了depth/stencil test,Pixel Shader就会执行一次。即使三角形同时cover了多个sample,PS也是只执行一次的,只不过把结果输入到多个sample中。上述pixel执行了两次PS,而不是三次。
在默认情况下,Pixel Shader的输入属性都是根据pixel中心去差值的,而不是sample position,这样可以减少一定的差值代价。可以用centroid关键字把差值的位置可以sample position联系起来,不过这样的话,代价会相对大一些。
当resolve MSAA RT的时候,硬件会根据多个sample的color值进行blend,从而得到更平滑的边缘。
上面简单的描述了下MSAA的过程,该AA方法由于是DX内置的,比较好实现。不过MSAA也有着很大的问题。
首先,比较简单的,MSAA只能平滑三角形边缘,而对于Alpha Test造成的边缘,MSAA完全没有任何帮助,因为差值不是在不同的sample position上面做的,而只有一个差值位置,所以即使有MSAA,当三角形cover了整个pixel的时候,所有的sample的值也只有一个,完全达不到AA的效果。
第二点,也是MSAA

本文介绍了MSAA(多重采样抗锯齿)的基本原理,解释了它如何通过像素着色器执行并结合样本值来实现平滑边缘。同时,文章探讨了MSAA的局限性,如对Alpha Test边缘无效以及与Deferred Shading的兼容性问题。在DX10及更高版本中,通过特定技术可以缓解这些问题。此外,提出了边缘检测方法以优化在不同采样级别上的着色过程。
最低0.47元/天 解锁文章
765

被折叠的 条评论
为什么被折叠?



