環境光遮蔽
2002年提出的技術
環境光遮蔽(Ambient Occlusion)“AO”為Amblent Occlusion的縮寫,中文譯為環境光遮蔽。
AO是來描繪物體和物體相交或靠近的時候遮擋周圍漫反射光線的效果,可以解決或改善漏光、飄和陰影不實等問題,解決或改善場景中縫隙、褶皺與牆角、角線以及細小物體等的表現不清晰問題,綜合改善細節尤其是暗部陰影,增強空間的層次感、真實感,同時加強和改善畫面明暗對比,增強畫面的藝術性。
AO這項技術最早是在Siggraph 2002年會上由ILM(工業光魔)的技術主管Hayden Landis所展示,當時就被叫做Ambient Occlusion。象RenderMan系列渲染器中的PRMan、BMat以及Maya、Blender等軟體引入AO技術較早,Softimage|XSI與Cinema 4D是在Siggraph 2005上發布的版本中增加AO的。
在Max的渲染器中,除Mr較早外,最近的fR Stage-1 R2.0和VR 1.5RC3才見AO現身。對此,打個玩笑的比方:如果對Max中四大渲染器的AO來划“階級成分”的話,mr算是“地主”了,它的AO Shader資歷最深、家產最多,除本能外還可以放入相機、燈光Shader來計算和控制,高級用戶更可自行編程,另外新增的“建築與設計材質”也內置了“AO特效”;fR可算“富農”,因為AO Shader同樣擁有用作燈光、遮罩、融合以及反射的“資本”,但終因無QMC之故AO雖快卻質差,所以是“暴發戶”一類的;VR差不多算“中農”吧,雖然就一個“Dirt”倒也能自給自足,不花哨從而保持了“本色”;而Br就是貧農了,因為它目前尚不擁有AO(但它基於QMC的GI似乎可以抗衡其他渲染器GI+AO效果,而且據說最新的2.0版本在整體速度上已經超過了VR 1.5RC3)。
隨著計算機圖形技術的發展,玩家對遊戲畫面圖形的逼真度要求越來越高,而近些年推動遊戲圖形畫面逼真的最關鍵環節就是光照/光影效果,如果能非常近似的模擬與現實生活一樣的光照效果,那麼遊戲的畫面將非比尋常,但是光照/光影效果的計算非常複雜而且消耗巨大的資源,成為阻礙相關技術推進的最大障礙。
實現光照/光影的最逼真效果就是達成全局光照。在早期的遊戲中僅能實現直接光照的效果,也就是說光線從光源發出、照射到物體上后、反射到玩家眼中,光照的計算就完成了。但是隨著技術的發展,要得到更加具有真實感的圖形畫面,不僅要計算直接光照,還需要計算間接光照,也就是說,光線從光源發出、照射到物體上后,除了計算物體本身反射到玩家眼中的光線,還要計算物體多次反射、折射、吸收光線,以及物體之間因為反射、折射而導致的光線、陰影變化,經過綜合計算將光線和陰影的最終效果展示(反射)到玩家眼中,從而實現全局光照的效果。
全局光照在靜態圖形的處理上比較完美,因為靜態圖形可以等待渲染的時間,但是對於遊戲來說,持續的動態畫面必須保證每秒幾十fps的渲染速度,因此全局光照的處理就需要非常謹慎,其演演算法在推進畫面真實度的同時,必須保證相應的效率,否則就會打破畫面效果和幀速度之間的平衡。
Intel、AMD和NVIDIA都在光線追蹤技術方面有所發展,Intel根據相應技術對《Quake4》遊戲進行了重製,但是相應的GPGPU處理器Larrabee的銷聲匿跡讓這個技術也暫時消失在人們的視野中;ATI在HD4000系列時代曾經展示過基於光線追蹤技術的Cinema 2.0,但目前仍然沒有技術的更新資料;NVIDIA在光線追蹤方面相對領先,其發布了基於CUDA架構的光線追蹤引擎OptiX。
光線追蹤在未來將會是實現全局光照的最佳方案,但是光線追蹤的計算方法非常複雜、負載極大,並且與目前顯卡架構以光柵化為主的處理方式難以融合(Intel和NVIDIA目前都趨向於在Larrabee、Quadro等上實現),短期內仍然無法應用於遊戲顯卡上。
目前遊戲開發者實現全局光照更多的使用AO技術。AO技術以獨特的計算方式吸收“環境光”(同時吸收未被阻擋的“光線”和被阻擋光線所產生的“陰影”),從而模擬全局光照。
現在將話題轉回來並做一個簡短的總結:
1.全局光照是未來實現遊戲圖形畫面真實化的一個重要元素(其可以達成光影效果的逼真化,對應的相反關鍵詞為直接光照)。
2.光線追蹤是實現全局光照完美效果的最佳技術/方式之一,也是未來的一個發展方向,其技術實現方式最接近現實的物理模型,但是因為效率較低,所以目前的遊戲和顯卡架構無法承擔。
3.目前遊戲已經開始實現全局光照的效果,但是並未採用光線追蹤的方式,而是採用其它多種實現方式來達成全局光照的效果,其中包括“AO”環境光遮蔽。
4.“AO”環境光遮蔽是實現全局光照中部分物體局部光照和陰影真實化的一種技術方式,其函數實現方式並未嚴格遵循現實的物理模型,但是效率較高,因此被當前遊戲廣泛應用。
5.再次強調,AO環境光遮蔽(包括其變種SSAO、HBAO等)僅是實現全局光照的技術方式之一,當前的遊戲應用了多種技術方式共同達成全局光照總體效果的完善和完美。
經過前面的介紹,了解了環境光遮蔽存在的目的,下面簡單介紹一下AO環境光遮蔽的實現機理。AO環境光遮蔽通過相對廉價的計算效能來實現全局光照中陰影的高級效果,簡單說AO環境光遮蔽就是在每個取樣點上計算它被其它幾何體覆蓋的程度,是計算在一個統一的光強度下場景的軟陰影效果的圖形技術。 AO環境光遮蔽在多種靜態3D處理軟體(如3D Max或Maya)中都有涉及,其是一種比全局光照效率更高的光照處理方式(效果接近),它通過改善陰影來現實更好的視覺效果,提高場景的深度和層次感,大大豐富了圖像細節。
渲染模式環境光遮蔽是實現全局場景類似軟陰影從而達成更佳全局光照效果的技術
在3D軟體中應用的靜態AO環境光遮蔽因為需要預渲染、而且速度仍然較慢,所以不能直接照搬到動態畫面(遊戲)的處理方式中。在近些年的遊戲中,很多遊戲公司都致力於表現更逼真的光照效果,提出了很多相關的技術,比如《半條命2》中的Radiosity Normal Maps技術、《潛行者》中的GI全局光照等等。
這些技術都未能很好的實現光照的效果或效率的保證,此時Crytek正在開發《孤島危機》,其應用了一項名為Real-Time Ambient Map(實時環境光照貼圖)的技術,這項技術非常接近SSAO技術,而隨著研發的深入,這項技術最終被升級為新的演演算法,並在CryEngine2引擎的技術白皮書中最終將這項升級后的技術命名為SSAO。從這個角度講,其實在電腦遊戲的應用中,率先提出的環境光遮蔽在演演算法上已經直接達成了SSAO(屏幕空間環境光遮蔽),而AO環境光遮蔽這種模式並未直接在遊戲中應用,至於NVIDIA在控制面板中的提出的“AO環境光遮蔽”的概念,對其演演算法不得而知,但是可以明確的是,其演演算法必然與靜態的環境光遮蔽的演演算法不同,可能就是SSAO(屏幕空間環境光遮蔽)或者類似的演演算法。
看一段小文字:
《鯊魚故事》(Shark Tale)是2005年第77屆奧斯卡金像獎“最佳動畫長片”提名的三部影片之一。為了更好地達到“繪畫感”這個需要,總美工設計師皮埃爾特別用到了軟區域陰影和反射光,即利用環境光來模擬柔和陰影,這是當時非常流行的一種新的燈光技術,稱為“Ambient Occlusion”(夢工廠稱之為“exposure”<曝光>),它能夠為表面上的每一點精確計算來自天空的自然光量,這樣處理的結果就像是一張陰天狀態下曝光極好的灰度照片。然後將Ambient Occlusion Pass(AO層)與環境燈光合成,這樣,CG元素與實拍的素材就非常自然地結合在一起了。
3D軟體(渲染器)中AO的原理是統一的,Max中mr、fR、VR的AO也是幾乎一致的(只是可控性和功能、用途有所不同)。
下圖:一般光照渲染模式
環境光遮蔽
繪畫運用
環境光遮蔽