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