AA前世今生之:Hybrid AA
前面我们介绍了硬件式AA和后处理式AA抗锯齿方法,那么有没有将两者结合起来的解决方案了?这正是下面要讲的Hybrid AA(混合式AA)。我们先对MSAA的计算浪费这一事实进行下对比说明:
MSAA需要计算的edge
通过上面的对比图,我们很直观的感受到:真正需要进行AA处理的Edge边缘其实并不是特别多,而MSAA实际上是将很多的计算量浪费在了实际并不需要AA的像素上,所以采样点越多,浪费越严重。透过前面对后处理式AA的介绍,我们知道:后处理式AA的方法就是试图通过Pixel像素信息估计出Sub-pixel级别的几何,然而再做AA。不同的是:Edge AA是通过独立点来估计,MLAA是通过L形来估计,FXAA和DLAA是通过线段来估计。而Hybrid AA的思想即是:干脆就先直接存出sub-pixel的几何,没必要进行“估计”。
SRAA(Subpixel Reconstruction Anti-Aliasing)
SRAA是NVIDIA的研究员在I3D2011上发表的新方法。它寄予的事实是,shading的变化频率一般低于几何的变化频率,所以可以在较低分辨率上shading,而用较高分辨率恢复几何。SRAA的基本流程为,在Deferred Shading的框架中,渲染一个高分辨率(或者带MSAA)的G-Buffer,但在shading的时候仅在普通的分辨率(或者没有MSAA)的情况下做。累积的结果通过G-Buffer重建sub-pixel信息,来进行类似MLAA的AA计算。这种方法结合了MSAA和MLAA,优点是可以用较低的样本数做到较高的MSAA才能得到的效果,同时不增加shading的计算量。SRAA由于原理问题,只能用在Deferred框架中。
Subpixel Reconstruction Anti-Aliasing
GPAA(Geometric Post-process Anti-Aliasing)
GPAA是Humus独立提出来的AA方法。基本思路是在渲染几何之后再次用线框模式渲染一遍,这时候可以得到每个三角形在每个pixel的覆盖率:
Geometric Post-process Anti-Aliasing
通过这个覆盖率,计算AA就显得相当容易了,结果比较如下:
这种方法的代价是多了一遍线框渲染,但可以用于Forward和Deferred两种框架。遗憾的是,Humus的twitter上说这种方法实际上在1996年就被别人申请专利了。
Adaptive AA
Intel在SIGGRAPH 2010的course Deferred Rendering for Current and Future Rendering Pipelines上提到了一种很简单很暴力的AA方法,在edge的地方per-sample计算,在non-edge的地方per-pixel计算。和基于post process的方法一样,这需要执行一个边缘检测,并在stencil(模板)中标记出来,然后就可以分别计算了。下图中红线标记的地方就是检测出来的edge:
这种方法的结果会和SSAA一样,同时没有MSAA重复计算的毛病。
总之:Hybrid AA可以说是hardware AA 和post process AA 这两种AA方案的折中选择。优点是可以用低于hardware AA的硬件开销和计算量达到一样的效果,缺点是需要修改原有的图形渲染流水线。