光探針的細節

2021-10-02 15:15:26 字數 1378 閱讀 6419

使用光照貼圖可以大幅度提公升場景渲染的真實程度,但缺點是光照貼圖無法作用在動態的物體上,所以看上去運動的物體和場景就顯得很不協調。

因此,為了解決這個問題unity3d引入了光探針(probe lighting)技術模擬使用光照貼圖的效果。

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

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

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

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

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

類似於光照貼圖,光探針也儲存了場景中的照明資訊。不同之處在於,光照貼圖儲存的是光線照射到場景物體表面的照明資訊,

而光探針則儲存的是穿過場景中空白空間的光線資訊。

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

在3d空間中的乙個位置點上,因為有且只使用乙個球面表示式用於描述光照,所以光探針照明技術,不適合用於描述光線穿過

乙個很大的物體時的情況。因為這種情況下光照會發生很多變動,從而無法精準地進行模擬。

另乙個限制就是,因為球諧函式是在乙個球面上對光照資訊進行編碼,所以對於乙個大型的有著平坦平面的物體,或者是乙個

有著凹面的物體,光探針照明技術也是不甚適用的。

如果想在乙個大的物體上應用光探針照明技術,則需要使用light probe proxy volume元件輔助實現。

光探針可用來儲存進入探針所在點的所有照明資訊。也可儲存由場景內的其他物體表面傳遞過來的間接照明資訊。

在著色器程式中,使用光探針的方式也很靈活,既可以在頂點著色器中用來逐頂點光照計算。也可以在片元著色器中結合發現貼圖進行逐片元光照計算。甚至可以在頂點著色器中對光探針提供的間接照明部分進行逐頂點的光照計算。在片元著色器中結合法線貼圖

對直接照明部分進行逐畫素的光照計算。

執行緒探針的理解

concurrenthashmap 在累加鍵值對個數的 addcount 函式中,使用 threadlocalrandom.getprobe 得到執行緒的探針雜湊值。在這裡,這個探針雜湊值的作用是雜湊執行緒,將執行緒和陣列中的不用元素對應起來,盡量避免執行緒爭用同一陣列元素。探針雜湊值和 map 裡...

Ruby探針的基本實現原理

李哲 may 13,2015 ruby語言支援語法級別的系統,框架,甚至語言本身的方法複寫,一般叫做元程式設計 meta programming 此基礎之上還有一些術語為mixin,方法的動態定義,執行時類改寫等等,這些技術和機制可以讓語言本身就能實 現其他語言需要位元組碼才能實現的功能,例如探針需...

WiFI探針的實現與研究

management frame 管理幀 type 00 control frame 控制幀 type 01 data frame 資料幀 type 10 網絡卡的監聽模式,很多網絡卡裝置並不支援。因此我們需要一張支援監聽模式的網絡卡裝置。linux下使用iw list命令檢視自己網絡卡是否支援監聽...