上篇文章講述了幾種基於post process的AA方法,有沒有可能將post process AA和hardware AA結合起來呢?本篇要講的正是這樣的hybrid AA。
首先補充一下,對於MSAA的計算浪費,可以從下面的對比圖看出來:
有了這個對比,大家應該有了直觀感受,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框架中(不過對於現代的遊戲 來說這不是個大問題)。
GPAA
Geometric Post-process Anti-Aliasing是Humus獨立提出來的AA方法。基本思路是在渲染幾何之後在此用線框模式渲染一遍,這時候可以得到每個三角形在每個pixel的覆蓋率:
這種方法的代價是多了一遍線框渲染,但可以用於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的優點(或者說,缺點)。優點是可以用低於hardware AA的記憶體開銷和計算量達到一樣的效果。缺點是需要修改原有的圖形渲染流水線。
本系列總結了三類不同的空間AA方法,希望對大家有所幫助。