今天分享的幹貨是unity中的Light probe,我們在對unity中的場景添加燈光進行渲染的時候,有些為了突出角色會添加很多實時光源。但這些實時光源會使內存的消耗過大,從優化的角度出發,應該首先想辦法提高間接光的亮度。而如果我們要增加動態物體的間接光照的話,就需要用今天我們要提及的Light Probe。
1、Light Probe原理
LightProbe主要解決了如何在動態對象和角色上使用烘焙的照明信息。它在計算的時候采用的是球諧函數來對球麵上的亮度信息進行編碼。核心就是球麵亮度信號編碼和重建。

上圖表示的就是一個原始的亮度信號會被分解成一係列帶縮放參數的基函數之和,如果我們知道這些基函數的縮放係數的話,就可以在運行時快速的重建原始的亮度信息。
所以lightprobe的內存消耗是很低的,隻需要將縮放係數與其對應的基函數相乘之後再求和的結果就是近似的原始信號。
在Unity中,Baked GI的LightProbe采用的3階球諧函數,RealtimeGI采用的是2階球諧函數。
2、場景中的運用
為了進一步理解我們在場景中創建一個如圖所示的半封閉空間來模擬房間。關閉掉場景中默認的DirectionalLight

然後在左上角再添加一盞點光源,為了方便觀察將光源的顏色改為紅色或者其他,稍微增加光源強度intensity以及範圍range。

當前中間的兩塊擋板都是static,所以目前看起來所接收的光照正常,但是如果我們把第一塊取消勾選static,即這塊物體時移動的話,就需要在光源周圍添加light probe,將光源的數據進行分解然後傳遞給動態物件,才會得到正確的光照。
3、創建light probe
點擊Hierarchy的Create,在Light中選擇最後一個Light Probe Group

然後會看到場景裏麵出現了幾個相連的小球立方,那些小球就是用來獲取計算原始光源。

我們將light probe拉到光源附近,ctrl加左鍵可以選擇單個小球,然後我們把後麵的四個小球選中ctrl + d進行複製,複製完成以後拉開距離,就得到如下圖所示的light probe

然後打開lighting settings用默認參數點擊Generate Lighting對整個場景進行燈光烘焙


烘焙完成以後選中我們設置為了no static的第一塊板,會發現它連了三個小球,而這三個小球就是在進行light probe球諧函數計算的時候,參與計算的三個小球,整塊板所有的光線信息都是來源於這個三個小球所接受的信息權重計算後進行插值得到的結果

所以,在unity中,light probe會根據物體所在的位置,選擇四麵體,然後使用組成四麵體的點進行插值。
而且,light probe隻針對no static的物件進行計算,不對static的物體有作用。
所以如果我們在場景中選擇第二塊藍色板的話,是不用有相關的probe小球出現的。

另外,如果我們在第一塊板的附近放一個cube,正常情況下在cube身上會接收到來自木板的反射光,但是實際上卻是模板對cube沒有任何的光源反射影響

而當我們把木板改成static後,再次進行烘焙就會得到完全不一樣的效果

Cube得到了大量來自木板的反射,由此可見,被light probe作用的no static物體,其自身是不會產生反射的。
來源: Thepoly 微信公眾號
熱門課程
專業講師指導 快速擺脫技能困惑相關文章
多種教程 總有一個適合自己專業問題谘詢
你擔心的問題,火星幫你解答《黑神話:悟空》作為一款現象級中國遊戲,其成功離不開多種先進計算機技術的支持。本文將深入解析該遊戲背後的關鍵技術,包括虛幻引擎......
在遊戲開發領域,Unity和Unreal Engine(虛幻引擎)都是備受推崇的遊戲引擎,但它們各自擁有不同的特點和優勢。
春節之後大量搶人!這6個行業是轉行首選,進去1年頂3年!火星畢業就能進
春節後求職,哪些行業進去能立馬漲薪?打破信息差很關鍵!
還沒畢業,就去幫電視台拍活動,作品被主任說“非常好”!猜猜是哪個專業呀?
回想過去,電子遊戲裏的草其實並不是真正的草。開發者們隻是簡單地把草的紋理直接貼在遊戲關卡的地板上
在火星的就業指導老師那裏,經常收到同學們這樣、那樣的提問。其中有一些共性問題,就業老師會根據自己豐富的經驗,為同學們給出合適的回答。