切換
舊版
前往
大廳
主題

Screen space ambient occlusion

Lumi | 2014-09-09 00:33:34 | 巴幣 0 | 人氣 293


▲你在看我嗎?你還可以再靠近一點。喔不,再靠近是會出現瑕疵的…

環境光遮蔽也是我早就躍躍欲試的技術之一,原理是附近遮蔽物越多,被照到的光越少
因此看起來會比遮蔽物少的地方還要暗

從2007年SSAO首次應用至今,已經有許多不同計算遮蔽程度的演算法出現
不知是不是我搜尋技巧太差,一直找不到HBAO+的演算法,最多只找到HBAO的投影片
因此轉而去調查CryEngine3用什麼方法,畢竟是這系列引擎最早使用SSAO技術
從GPU Pro 3書中得知CryEngine3所使用的技術名為"Volumetric Obscurance"
從此處順藤摸瓜後,找到了Nvidia於2012年發表的 "Scalable Ambient Obscurance (SAO)"
想看SAO與不同技術之間的畫面有何差異可以點下面的連結
Implementing 3 Screen Space Ambient Occlusion Methods in WebGL

我實作SAO時暫時省略了Hierarchical z pass這個步驟, 這個pass的目的是為了減少cache miss
一方面是覺得除了raw depth buffer外,還要再配置一塊記憶體放linear depth很麻煩
另一方面在我測量效能後發現,SAO即使沒這步驟,performance也讓我很滿意
之後有空應該還是會實作Hierarchical z pass,看看究竟會快多少
另外, paper中的演算法是在view space中計算,我又為了省麻煩而全部改成world space

此技術在近距離觀看時,或是增強陰影效果時還是有難看的瑕疵,只能靠調整參數來避免
不過只要把陰影調淡就幾乎看不出瑕疵
SAO效能會隨著計算面積增加而遞減, 在下圖情形下, 我的GTX460約需時2.4ms左右
如果將攝影機拉到極近,使計算面積涵蓋整個螢幕, SAO計算時間會增加至5.9ms


▲SAO開啟


▲SAO關閉

補充:
Nvidia後來公開HBAO+了,難怪之前都找不到

創作回應

更多創作