光探針的細節

使用光照貼圖可以大幅度提升場景渲染的真實程度,但缺點是光照貼圖無法作用在動態的物體上,所以看上去運動的物體和場景就顯得很不協調。
因此,爲了解決這個問題unity3D引入了光探針(probe lighting)技術模擬使用光照貼圖的效果。

光探針照明的大致原理是:在某一光探針(light probe)的所在位置上對光照信息進行採樣,然後從該探針相鄰的其他光探針位置上對光照信息採樣。把這些採樣得到的光照信息插值運算,便可算出這些光探針之間的某個位置的光照信息。

在運行時計算插值的速度很快,可以達到實時渲染要求。運用光探針技術可以避免運動的物體和整個使用靜態光照貼圖的場景不協調的感覺。

光探針照明是一種能夠快速而近似地模擬實際光照效果的技術。這種技術適應於類似遊戲等需要實時渲染的應用場合。在這些應用中光探針通常被應用在人物角色或者一些動態的物體上;還有一個,就是如果靜態物體有層次細節,那麼針對不同的細節層級,提供不同的光照信息。

光探針技術在運行時的性能很高效,並且它用到的光照信息可以在運行之前被快速地預計算出來。

從技術角度來說,光探針照明技術對照亮在3D空間中某一個定點光照信息在運行前的預計算階段進行採樣,然後把這些信息通過球諧函數(spherical harmonic function,球面調和函數)進行編碼打包存儲。在遊戲運行時,在遊戲運行時,通過着色器程序可以把這些光照信息編碼快速地重建出光照原始效果。

類似於光照貼圖,光探針也存儲了場景中的照明信息。不同之處在於,光照貼圖存儲的是光線照射到場景物體表面的照明信息,
而光探針則存儲的是穿過場景中空白空間的光線信息。

光探針的弊端,對於處理光的高頻信息,球諧函數的階數就要增大,而當提升階數時所需要的性能耗費也會逐步提升。因此,u3d在編碼打包照明信息時用的函數都是低階球諧函數,即會忽略光的一些高頻信息。目前u3d引擎使用了三階球諧函數進行處理。

在3D空間中的一個位置點上,因爲有且只使用一個球面表達式用於描述光照,所以光探針照明技術,不適合用於描述光線穿過
一個很大的物體時的情況。因爲這種情況下光照會發生很多變動,從而無法精準地進行模擬。
另一個限制就是,因爲球諧函數是在一個球面上對光照信息進行編碼,所以對於一個大型的有着平坦平面的物體,或者是一個
有着凹面的物體,光探針照明技術也是不甚適用的。
如果想在一個大的物體上應用光探針照明技術,則需要使用light probe proxy volume組件輔助實現。

光探針可用來存儲進入探針所在點的所有照明信息。也可存儲由場景內的其他物體表面傳遞過來的間接照明信息。
在着色器程序中,使用光探針的方式也很靈活,既可以在頂點着色器中用來逐頂點光照計算。也可以在片元着色器中結合發現貼圖進行逐片元光照計算。甚至可以在頂點着色器中對光探針提供的間接照明部分進行逐頂點的光照計算。在片元着色器中結合法線貼圖
對直接照明部分進行逐像素的光照計算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章