- A+
Unity的Light probe解析:
1、Light Probe原理
LightProbe主要解決了如何在動(dòng)態(tài)對(duì)象和角色上使用烘焙的照明信息。它在計(jì)算的時(shí)候采用的是球諧函數(shù)來對(duì)球面上的亮度信息進(jìn)行編碼。核心就是球面亮度信號(hào)編碼和重建。
上圖表示的就是一個(gè)原始的亮度信號(hào)會(huì)被分解成一系列帶縮放參數(shù)的基函數(shù)之和,如果我們知道這些基函數(shù)的縮放系數(shù)的話,就可以在運(yùn)行時(shí)快速的重建原始的亮度信息。
所以lightprobe的內(nèi)存消耗是很低的,只需要將縮放系數(shù)與其對(duì)應(yīng)的基函數(shù)相乘之后再求和的結(jié)果就是近似的原始信號(hào)。
在Unity中,Baked GI的LightProbe采用的3階球諧函數(shù),RealtimeGI采用的是2階球諧函數(shù)。
2、場(chǎng)景中的運(yùn)用
為了進(jìn)一步理解我們?cè)趫?chǎng)景中創(chuàng)建一個(gè)如圖所示的半封閉空間來模擬房間。關(guān)閉掉場(chǎng)景中默認(rèn)的DirectionalLight
然后在左上角再添加一盞點(diǎn)光源,為了方便觀察將光源的顏色改為紅色或者其他,稍微增加光源強(qiáng)度intensity以及范圍range。
當(dāng)前中間的兩塊擋板都是static,所以目前看起來所接收的光照正常,但是如果我們把第一塊取消勾選static,即這塊物體時(shí)移動(dòng)的話,就需要在光源周圍添加light probe,將光源的數(shù)據(jù)進(jìn)行分解然后傳遞給動(dòng)態(tài)物件,才會(huì)得到正確的光照。
3、創(chuàng)建light probe
點(diǎn)擊Hierarchy的Create,在Light中選擇最后一個(gè)Light Probe Group
然后會(huì)看到場(chǎng)景里面出現(xiàn)了幾個(gè)相連的小球立方,那些小球就是用來獲取計(jì)算原始光源。
我們將light probe拉到光源附近,ctrl加左鍵可以選擇單個(gè)小球,然后我們把后面的四個(gè)小球選中ctrl + d進(jìn)行復(fù)制,復(fù)制完成以后拉開距離,就得到如下圖所示的light probe
然后打開lighting settings用默認(rèn)參數(shù)點(diǎn)擊Generate Lighting對(duì)整個(gè)場(chǎng)景進(jìn)行燈光烘焙
烘焙完成以后選中我們?cè)O(shè)置為了no static的第一塊板,會(huì)發(fā)現(xiàn)它連了三個(gè)小球,而這三個(gè)小球就是在進(jìn)行l(wèi)ight probe球諧函數(shù)計(jì)算的時(shí)候,參與計(jì)算的三個(gè)小球,整塊板所有的光線信息都是來源于這個(gè)三個(gè)小球所接受的信息權(quán)重計(jì)算后進(jìn)行插值得到的結(jié)果
所以,在unity中,light probe會(huì)根據(jù)物體所在的位置,選擇四面體,然后使用組成四面體的點(diǎn)進(jìn)行插值。
而且,light probe只針對(duì)no static的物件進(jìn)行計(jì)算,不對(duì)static的物體有作用。
所以如果我們?cè)趫?chǎng)景中選擇第二塊藍(lán)色板的話,是不用有相關(guān)的probe小球出現(xiàn)的。
另外,如果我們?cè)诘谝粔K板的附近放一個(gè)cube,正常情況下在cube身上會(huì)接收到來自木板的反射光,但是實(shí)際上卻是模板對(duì)cube沒有任何的光源反射影響
而當(dāng)我們把木板改成static后,再次進(jìn)行烘焙就會(huì)得到完全不一樣的效果
Cube得到了大量來自木板的反射,由此可見,被light probe作用的no static物體,其自身是不會(huì)產(chǎn)生反射的。

