Experimentalize TAA with no code
來自專欄 Grfx.IO49 人贊了文章
自從延遲渲染成為當代遊戲引擎主流渲染架構後, TAA(Temporal AA)就從之前的離線渲染界常規應用轉身變成了實時渲染的一陣時尚. 延遲渲染自身的帶寬消耗導致MSAA變得十分奢侈, 同時FXAA這種本質是檢測輪廓的演算法在某些動態場景下無法很好的反走樣. (我不喜歡用抗鋸齒這個說法, 雖然大多數情況下類似的演算法都是為了消除渲染物體的"階梯式"輪廓邊緣, 但是AA演算法除了消除幾何走樣, 也要消除著色走樣(想想貼圖的mipmap)).
還沒有了解TAA的同學我十分推薦讀下Yang[1]的這篇"鼻祖paper", 該文很好的解釋了TAA的真諦: 正如他的文章名字 - Amortized Supersampling 所說的那樣, 分時漸進超級採樣, 一種把MSAA消耗分攤在多個序列的幀中的演算法, 比 Temproal 這麼抽象的詞好理解多了.
雖然UE4的TAA已經被Karis[2]做的非常好了, 但是我不禁想動手嘗試下TAA最核心的東西, 增強下感官的理解. 同時我的目標也很簡單, 不寫一行代碼, 只用UE4的編輯器來做嘗試, 這麼做的目的只有一個: 方便.
TAA流程中其實最重要的就是Reprojection. 這個在Lasse[3]在GDC中將INSIDE的用法時候說的很清楚了. 我採用的方法跟他類似: 使用Halton Sequence, 差別是他使用了前16組採樣點,而我循環使用了256組採樣點(初始化時生成)。
如果不差值,你看到的畫面是這樣的:
混合後:
由於不動源碼無法讀寫Velocity Map,所以我也遇到了Ghosting:
https://www.zhihu.com/video/1010911945507176448關於解決TAA下動態數據的Ghosting, 其實也是TAA工程上急需解決的難點, 目前沒有很完美的方案, 下一個AA會是什麼AA呢?
[1] Lei Yang, Diego Nehab, et al. Amortized Supersampling, 2009.
[2] Brian Karis, High Quality Temporal Supersampling, SIGGRAPH 2014.
[3] Lasse Jon Fuglsang Pedersen, Temporal Reprojection Anti-Aliasing in INSIDE, GDC 2016.
推薦閱讀:
※今年有多少獨立遊戲團隊會死掉?
※演講實錄!谷得技術總監陳鎮洪教你如何打造自主研發流水線
※游門弄斧41——LudumDare41總結
※2018 gamejam 《風俗玩偶體驗店》
※Unity2017中的Timeline工作流