溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

unity3d中光照探針的示例分析

發(fā)布時(shí)間:2022-01-19 09:33:19 來(lái)源:億速云 閱讀:234 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下unity3d中光照探針的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

         

需求

常規(guī)的unity烘焙光照探針 是采用3階球諧來(lái)存儲(chǔ)的 有9個(gè)float3數(shù)據(jù),一般項(xiàng)目探針數(shù)量不會(huì)太多所以不用考慮內(nèi)存問(wèn)題。但我參與的 生死狙擊2 (可點(diǎn)擊看游戲視頻)項(xiàng)目 ,有開(kāi)放大世界,所有 lightmap加lightprobe 顯存開(kāi)銷(xiāo)巨大500多M。所以我實(shí)現(xiàn)了一套VLM烘焙方式,提高10倍的烘焙速度 和 節(jié)省22倍的顯存開(kāi)銷(xiāo).這套方案太復(fù)雜 我這里只是分享其中的一個(gè)壓縮技術(shù)。如果你也因?yàn)槠渌蛐枰獕嚎s 或因?yàn)榍蛑C模型尾巴有漏光問(wèn)題需要解決 可以參考下我的做法。

基礎(chǔ)思路

首先想到的肯定是 2階球諧來(lái)存,因?yàn)椴簧俅罄姓f(shuō)過(guò)精度也夠。而且unity的realtime gi好像就是用的2階.我沒(méi)有采用2階的原因是球諧算法沒(méi)有完全掌握,根據(jù)顏色反向構(gòu)建和壓縮 特別是工具修復(fù)漏光時(shí) 需要用到 半球拷貝(對(duì)sh某個(gè)方向的顏色拷貝到另一個(gè)sh的某個(gè)方向)都很不好掌控,雖然能找到算法但如果你和我一樣 對(duì)自己沒(méi)完全掌握的算法用起來(lái)有點(diǎn)擔(dān)心 ,那么就適合這樣直觀的方式來(lái)存儲(chǔ)。

我們用一個(gè)豐富點(diǎn)的烘焙情況做為測(cè)試基準(zhǔn)

unity3d中光照探針的示例分析  

 
unity引擎自帶的球諧為基準(zhǔn)  


首先想到的是cubemap  xyz正負(fù)方向6個(gè)方向分別存一個(gè)顏色,采樣的時(shí)候只需要 計(jì)算6次max(0,dot(dir,normal))*colr;就可以得到個(gè)不錯(cuò)的結(jié)果 如下圖

unity3d中光照探針的示例分析  

 

 
6方向色模擬




渲染的算法也超簡(jiǎn)單 每個(gè)方向算權(quán)重 就可以了 是不是很接近了呢  
unity3d中光照探針的示例分析

升級(jí)思路 (正戲開(kāi)始)

雖然模擬了個(gè)大概但,6個(gè)顏色 沒(méi)比9個(gè)少多少 而且2階球諧只需要4個(gè)顏色,所以我打算開(kāi)始采用4方向軸。我想到正四面體,因?yàn)?個(gè)頂點(diǎn)是對(duì)稱的 也就是數(shù)學(xué)意義完全相同的 所以中心指向4個(gè)頂點(diǎn)得到的4個(gè)坐標(biāo)軸 兩兩夾角都相同,所以很適合用來(lái)建立一個(gè)4半軸坐標(biāo)系(應(yīng)該算非笛卡爾坐標(biāo)系)  ,通過(guò)計(jì)算或查詢固定的角度可以選一個(gè)4個(gè)軸的方向,我選了 一個(gè)TetrahedroDirs = { new Vector3(-0.8164966f, -0.3333331f, -0.4714046f), new Vector3(0.8164966f, -0.3333331f, -0.4714046f), new Vector3(0, -0.3333331f, 0.9428091f), new Vector3(0, 1, 0) };就是 一個(gè)頂點(diǎn)是向上的。因?yàn)橹挥?個(gè)顏色所以很好用3張圖存儲(chǔ)。效果但看誤差嚴(yán)重實(shí)際上效果 間接光貢獻(xiàn)度不大 這點(diǎn)差距不敏感

unity3d中光照探針的示例分析
unity3d中光照探針的示例分析  

 
4半軸坐標(biāo)系模擬效果  


代碼也很簡(jiǎn)單 ,為什么要比直角坐標(biāo)系 +1/3 可以自己思考下,實(shí)際上可以進(jìn)一步壓縮掉75% ,因?yàn)?可以某大區(qū)域只設(shè)置一個(gè)顏色 然后只記錄間接光的強(qiáng)度,這樣4個(gè)強(qiáng)度剛好一個(gè)rgba圖就可以存入 只有 引擎的 1/7容量。如果這種極限壓縮不符合項(xiàng)目,那么可以讓一個(gè)場(chǎng)景只用256種顏色 然后每個(gè)探針多一個(gè)byte 存入顏色索引,256色配合256強(qiáng)度 和插值計(jì)算也很豐富了。

unity3d中光照探針的示例分析

端游項(xiàng)目實(shí)裝效果

unity3d中光照探針的示例分析  
傳統(tǒng)lightmap+lightprobe烘焙 動(dòng)態(tài)對(duì)象靜態(tài)對(duì)象間接光不一致,但靜態(tài)物件間接光豐富
unity3d中光照探針的示例分析  
新純探針烘焙 探針壓縮方式 是案例的 4半軸坐標(biāo)系方式 動(dòng)靜統(tǒng)一但細(xì)節(jié)不豐富

重大內(nèi)存/顯存收益

0.58G 到23M 壓縮到原來(lái)的3.87%

當(dāng)然內(nèi)存/顯存巨大收益并非直接來(lái)自這個(gè)探針?lè)桨付莵?lái)自我VLM的實(shí)現(xiàn),VLM大量探針用了本方案。

unity3d中光照探針的示例分析

以上是“unity3d中光照探針的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI