unity3d中光照探針的示例分析

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

成都創(chuàng)新互聯(lián)科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供成都服務(wù)器托管,高防物理服務(wù)器租用,成都IDC機(jī)房托管,成都主機(jī)托管等互聯(lián)網(wǎng)服務(wù)。

         

需求

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

基礎(chǔ)思路

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

我們用一個(gè)豐富點(diǎn)的烘焙情況做為測試基準(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方向色模擬




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

升級思路 (正戲開始)

雖然模擬了個(gè)大概但,6個(gè)顏色 沒比9個(gè)少多少 而且2階球諧只需要4個(gè)顏色,所以我打算開始采用4方向軸。我想到正四面體,因?yàn)?個(gè)頂點(diǎn)是對稱的 也就是數(shù)學(xué)意義完全相同的 所以中心指向4個(gè)頂點(diǎn)得到的4個(gè)坐標(biāo)軸 兩兩夾角都相同,所以很適合用來建立一個(gè)4半軸坐標(biāo)系(應(yīng)該算非笛卡爾坐標(biāo)系)  ,通過計(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張圖存儲。效果但看誤差嚴(yán)重實(shí)際上效果 間接光貢獻(xiàn)度不大 這點(diǎn)差距不敏感

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

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


代碼也很簡單 ,為什么要比直角坐標(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è)場景只用256種顏色 然后每個(gè)探針多一個(gè)byte 存入顏色索引,256色配合256強(qiáng)度 和插值計(jì)算也很豐富了。

unity3d中光照探針的示例分析

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

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

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

0.58G 到23M 壓縮到原來的3.87%

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

unity3d中光照探針的示例分析

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

網(wǎng)站欄目:unity3d中光照探針的示例分析
標(biāo)題鏈接:http://muchs.cn/article34/gppipe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、建站公司移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站策劃、小程序開發(fā)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)