SSAO全稱“Screen-Space Ambient Occlusion” (屏幕空間環境光遮蔽)。其最先運用于 Crysis(孤島危機) 游戲中,通過GPU的 shader實現
SSAO通過采樣象素周圍的信息,并進行簡單的深度值對比來計算物體身上環境光照無法到達的范圍,從而可以近似地表現出物體身上在環境光照下產生的輪廓陰影??梢岳?#8220;逐象素場景深度計算”技術計算得出的深度值直接參與運算。
現在的效果確實錯誤還比較大,應該先進行簡單的空間劃分(或類似處理)然后計算。
不過個人認為這種方法只是近似地模擬,效果并不正確,但確實能增強場景的層次感,讓畫面更細膩,讓場景細節更加明顯。
不同于顯卡驅動中普通的AO選項,burnout的SSAO是全動態的,無需預處理,無loading時間,無需消耗內存,不使用CPU,全由GPU處理,對GPU有較大的消耗
SSAO默認是關閉的,可以在游戲視頻選項中打開
評測
在7950GT下跑,加了ssao后,下降了15%。而且,顯卡性能越低,下降的越厲害。效率消耗主要是在于要多渲染一遍場景到深度以及之后進行的ssao處理。這遍可以進行優化,如果物體的紋理不帶alpha,則可以把他們都合在一批或幾批渲染。至于深度圖的尺寸 ,我采用了與窗口一樣的尺寸,這樣精度高。也可以采用低分辨率,但效果會有鋸齒,還需要進行模糊處理才比較自然。當然,如果本來就用了延遲渲染技術,本來就有深度圖了,那就可以直接拿來用了。
與PRT對比
PRT用于靜態場景確實是個比較好的方案,畢竟可以預計算。但是對于動態的場景,還需要動態更新。另外,PRT的質量依賴于網格的細分程度,要是模型太簡,則效果也糟糕。
因此 ,PRT對于虛擬現實項目里的高樓大廈等場景(這些模型都是很精簡的)來說,就顯得不合適了
目前已發行的游戲中,運用SSAO的游戲有
Crysis(孤島危機)
Burnout(TM) Paradise The Ultimate Box(火爆狂飆5天堂)
帝國:全面戰爭
另外,星際爭霸2的開發也運用到了SSAO
什么是SSAO?
從HL2開始,眾多游戲公司開始對于如何表現“間接光照”進行研究,這些曇花一現的技術有:
運用于HL2的radiosity Normal Maps技術,效果比較垃圾
運用于Stalker的GI(?)技術,算法不好,開銷巨大。
初期Crytek準備運用在Crysis上的Photon Mapping(光子映射)技術,開銷同樣比較垃圾,被拋棄。
隨后Crytek又準備運用在Crysis上的Real-Time Ambient Map(實時環境光照貼圖,簡稱RAM),這個是與之前Stalker使用的技術比較類似的,也是最接近SSAO的一個技術。
不過Crytek不愧為“間接光照”研究上的先鋒,其技術員對于RAM進行了改進,新的算法成為了如今的SSAO
SSAO開與關的區別所在
SSAO(Screen-Space Ambient Occlusion)是一個純粹的渲染技術,或者說,是一個算法。雖然從上文知道是為了實現“間接光照”的效果,不過從技術上講,就是一個對于AO(Ambient Occlusion環境光吸收,也就是NV 185.20驅動加入的那個,一個渲染技術,我們可以在Maya等3D軟件中可以見到)的一個逼近函數,并且以此為據進行實時渲染。
SSAO比起185.20驅動中AO的優點:
與場景復雜性無關
無數據預處理,無loading時間,無系統內存分配
動態渲染
每個像素工作方式始終一致
無CPU占用,完全通過GPU執行
與流行顯卡的管線整合相當容易
缺點也是有的:
由于采樣全部在可見點上進行的,對于不可見點的遮擋影響會有錯誤的估算。
顆粒感比較重,需要與動態模糊緊密配合才能取得較好效果。
SSAO屏幕空間環境光遮蔽的運作方式
其實了解了AO環境光遮蔽的原理,SSAO(屏幕空間環境光遮蔽)已經可以融會貫通,SSAO通過采樣像素周圍的信息,并進行簡單的深度值對比來計算物體身上環境光照無法到達的范圍,從而可以近似地表現出物體身上在環境光照下產生的輪廓陰影。
具體的運作方式上,SSAO會利用GPU計算出指定像素的空間坐標,然后以此坐標為基點,在周圍選擇數個采樣點進行采樣,然后將采樣點的空間坐標投影回屏幕坐標,對深度緩沖進行采樣,最后得到采樣點的深度值,再進行后續計算,最終得到一個遮擋值。
SSAO實現了較好的全局光照效果
SSAO屏幕空間環境光遮蔽實現了較好的全局光照效果
因為是基于指定空間的全局計算模式,因此SSAO實現效果的優劣取決于算法,包括空間的指定范圍和采樣點的選取等等。需要指明的是,不同游戲(引擎)在SSAO的細節算法方面可能不盡相同,另外SSAO還會結合其它光照技術共同達成游戲畫面的渲染,所以SSAO在很多游戲中不會有專門的開關選項,其最終的表現結果可能是與其它技術共同作用的結果。