Anti-alias的前世今生(三):Hybrid AA

weixin_30639719發表於2020-04-05
轉載請註明出處為KlayGE遊戲引擎,本文地址為http://www.klayge.org/2011/05/19/anti-alias%e7%9a%84%e5%89%8d%e4%b8%96%e4%bb%8a%e7%94%9f%ef%bc%88%e4%b8%89%ef%bc%89%ef%bc%9ahybird-aa/

上篇文章講述了幾種基於post process的AA方法,有沒有可能將post process AA和hardware AA結合起來呢?本篇要講的正是這樣的hybrid AA。

首先補充一下,對於MSAA的計算浪費,可以從下面的對比圖看出來:

MSAA edge

MSAA需要計算的edge

 

Simplified edge

真正需要計算AA的edge

有了這個對比,大家應該有了直觀感受,MSAA實際上把很多計算量浪費在了實際上不必要AA的畫素上了。如果樣本數高,浪費會更嚴重。

上一篇提到的那些基於post process的方法其實都在做一件事情:試圖通過pixel資訊估計出sub-pixel級別的幾何,然後做AA。Edge AA是通過獨立點來估計,MLAA是通過L形來估計,FXAA和DLAA是通過線段來估計。Hybrid AA的方法想表達的是,為什麼要“估計”,而不是乾脆就先存出sub-pixel的幾何?

SRAA

Subpixel Reconstruction Anti-Aliasing是 NVIDIA的研究員在I3D2011上發表的新方法。它寄予的事實是,shading的變化頻率一般低於幾何的變化頻率,所以可以在較低解析度上 shading,而用較高解析度恢復幾何。SRAA的基本流程為,在Deferred Shading的框架中,渲染一個高解析度(或者帶MSAA)的G-Buffer,但在shading的時候僅在普通的解析度(或者沒有MSAA)的情況 下做。累積的結果通過G-Buffer重建sub-pixel資訊,來進行類似MLAA的AA計算。這種方法結合了MSAA和MLAA,但可以用較低的樣 本數做到較高的MSAA才能得到的效果,同時不增加shading的計算量。SRAA由於原理問題,只能用在Deferred框架中(不過對於現代的遊戲 來說這不是個大問題)。

SRAAGPAA

Geometric Post-process Anti-Aliasing是Humus獨立提出來的AA方法。基本思路是在渲染幾何之後在此用線框模式渲染一遍,這時候可以得到每個三角形在每個pixel的覆蓋率:

GPAA illustration通過這個覆蓋率,計算AA就輕而易舉了,結果比較如下:

GPAA compare

這種方法的代價是多了一遍線框渲染,但可以用於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:

Adaptive AA edge

這種方法的結果會和SSAA一樣,同時沒有MSAA重複計算的毛病。

總結

Hybrid AA綜合了hardware AA和post process AA的優點(或者說,缺點)。優點是可以用低於hardware AA的記憶體開銷和計算量達到一樣的效果。缺點是需要修改原有的圖形渲染流水線。

本系列總結了三類不同的空間AA方法,希望對大家有所幫助。

轉載於:https://www.cnblogs.com/gongminmin/archive/2011/05/19/2051114.html

相關文章