IT技術互動交流(liu)平jiao)/h4>

吉林体彩网官网

作者︰lianera  來源︰IT165收集  發布日期︰2020-02-27 15:34:26

簡介

之前在一篇(pian)實時深度圖(tu)優(you)化的論文中(zhong)看(kan)到jiao)蛐徹guang)照(Spherical Harmonics Lighting)的應用,在查閱了許許多多資(zi)料之後還是無法(fa)完全理(li)解,我個(ge)人覺得如果(guo)之前對實時渲染技術不是很了si)獾幕埃 qiu)諧光(guang)照還是有一huan) 訊鵲摹4蠖嗍淖zi)料都(du)是從(cong)原理(li)上描述球(qiu)諧函數及其光(guang)照過程,而沒有對具體的應用做解釋,我直到真正動手實現了一遍(bian)球(qiu)諧光(guang)照之後,才完全理(li)解球(qiu)諧光(guang)照具體的過程以及作用。

球(qiu)諧光(guang)照實際上是一種(zhong)對光(guang)照的簡化,對于空間上的一點,受到的光(guang)照在各個(ge)方(fang)向上是不同(tong)的,也(ye)即各向異性,所以空間上一點如果(guo)要(yao)完全還原光(guang)照情況,那就需要(yao)記錄周圍球(qiu)面上所有方(fang)向的光(guang)照。注意這里考慮的周圍環境往往是復雜的情況,而不是幾個(ge)簡單的光(guang)源,如果(guo)是那樣的話,直接(jie)用光(guang)源的光(guang)照模型求(qiu)和就可以了。 如果(guo)環境光(guang)照可以用簡單函數表示(shi),那自然直接(jie)求(qiu)點周圍球(qiu)面上的積分就可以了。但是通(tong)常光(guang)照不會那麼簡單,並且用函數表示(shi)光(guang)照也(ye)不方(fang)便,所以經(jing)常用的方(fang)法(fa)是使(shi)用環境光(guang)貼圖(tu),比如像這樣的︰ 上面的圖(tu)是立方(fang)體展開得到的,這種(zhong)貼圖(tu)也(ye)就是cubemap,需要(yao)注意的是一般的cubemap是從(cong)里往外看(kan)的。 考慮一個(ge)簡單場景中(zhong)有個(ge)點,他周圍的各個(ge)方(fang)向上的環境光(guang)照就是上面的cubemap呈(cheng)現的,假如我想知道(dao)這個(ge)點各個(ge)方(fang)向的光(guang)照情況,那麼就必須在cubemap對應的各個(ge)方(fang)向進(jin)行(xing)采樣。對于一個(ge)大的場景來說,每(mei)個(ge)位置點的環境光(guang)都(du)有可能不同(tong),如果(guo)把每(mei)個(ge)點的環境光(guang)貼圖(tu)儲存起來,並且每(mei)次獲取(qu)光(guang)照都(du)從(cong)相應的貼圖(tu)里面采樣,可想而知這樣的方(fang)法(fa)是非常昂貴的。 利(li)用球(qiu)諧函數就可以很好的解決這個(ge)問題,球(qiu)諧函數的主(zhu)要(yao)作用就是用簡單的系數表示(shi)復雜的球(qiu)面函數。關于球(qiu)諧函數的理(li)論推導與解釋可以參(can)考wiki(https://en.wikipedia.org/wiki/Spherical_harmonics)。如果(guo)只是要(yao)應用和實現球(qiu)諧光(guang)照,不會涉及到推導過程,不過球(qiu)諧基(ji)函數卻是關鍵的內容,球(qiu)諧基(ji)函數已經(jing)有人在wiki上列好了表格,參(can)考(https://en.wikipedia.org/wiki/Table_of_spherical_harmonics),前3階的球(qiu)諧基(ji)函數如下(xia)︰ 這里值得注意的是很多資(zi)料用這張圖(tu)來描述球(qiu)諧基(ji)函數︰ 我剛開始(shi)看(kan)到這張圖(tu)的時候簡直ben)醯媚 涿睿 導噬險飫錈婷mei)個(ge)曲面都(du)是用球(qiu)坐標系表示(shi)的,球(qiu)諧基(ji)都(du)是qian)ㄒyi)在球(qiu)坐標系上的函數,r(也(ye)就是離中(zhong)心的距離)表示(shi)的就是這個(ge)球(qiu)諧基(ji)在這個(ge)方(fang)向分量(liang)的重(zhong)要(yao)程度qu)N沂怯美lei)比傅dao)鏌ye)變換的方(fang)法(fa)來理(li)解的,其實球(qiu)諧函數本(ben)身(shen)就是拉普拉斯(si)變換在球(qiu)坐標系下(xia)的表示(shi),這里的每(mei)個(ge)球(qiu)諧基(ji)可以類(lei)比成傅dao)鏌ye)變換中(zhong)頻域的各個(ge)離散的頻率,各個(ge)球(qiu)諧基(ji)乘以對應的系數就可以還原出原來的球(qiu)面函數。一個(ge)復雜的波形可以用簡單的諧波和相應系數表示(shi),同(tong)樣的,一個(ge)復雜的球(qiu)面上的函數也(ye)可以用簡單的球(qiu)諧基(ji)和相應的系數表示(shi)。 由于球(qiu)諧基(ji)函數階zi)俏尷薜模 災荒莧qu)前面幾組基(ji)來近似,一般在光(guang)照中(zhong)大都(du)取(qu)3階,也(ye)即9個(ge)球(qiu)諧系數。

實驗(yan)

我們先考慮簡單的情況,比如說定義(yi)一個(ge)光(guang)照函數︰ 在球(qiu)坐標系下(xia),將該函數的值當做光(guang)照強度值,可以畫出光(guang)照在球(qiu)面上的分布情況︰ 不過由于這種(zhong)方(fang)式可視化方(fang)式對于亮度變換不是很敏感,所以我們把強度當成球(qiu)坐標系的r,畫出來是這個(ge)樣子︰  現在要(yao)將這個(ge)函數轉換成球(qiu)諧系數表示(shi),首先要(yao)做的就是qian)雲浣jin)行(xing)采樣,采樣的目標是確(que)定在某個(ge)球(qiu)諧基(ji)方(fang)向上強度的大小,也(ye)即求(qiu)得每(mei)個(ge)球(qiu)諧基(ji)Yi對應的系數ci。具體的采樣方(fang)法(fa)如下(xia)︰  其中(zhong)N為采樣次數。也(ye)就是說在計算某個(ge)球(qiu)諧系數ci的時候,首先在球(qiu)面上采許多點,然後把這些點的光(guang)照強度和球(qiu)諧基(ji)相乘(在那個(ge)方(fang)向上,球(qiu)諧基(ji)函數的分量(liang)或者說重(zhong)要(yao)程度就是Yi(xi)),通(tong)過這些采樣點,從(cong)而得到了在每(mei)個(ge)球(qiu)諧基(ji)函數上光(guang)照的分布情況。注意某個(ge)球(qiu)諧基(ji)只能大致(zhi)代表它那個(ge)方(fang)向上的光(guang)照強度,所以需要(yao)組合(he)很多個(ge)球(qiu)諧基(ji)函數才能近似還原出原光(guang)照。 還原的過程比較簡單,通(tong)過球(qiu)諧基(ji)與對應的系數相乘得到︰  這里L'是還原後的光(guang)照,s是球(qiu)面上的一點(也(ye)可以看(kan)成某個(ge)方(fang)向),n是球(qiu)諧函數的階zi)^2也(ye)即球(qiu)諧系數的個(ge)數。 值得注意的是采樣和tu)撲i是預先進(jin)行(xing)的,比如說復雜場景中(zhong),某個(ge)位置預先用光(guang)線跟蹤方(fang)法(fa)計算環境光(guang),從(cong)而采樣出ci,這樣這個(ge)位置的光(guang)照信(xin)息就壓(ya)縮成幾個(ge)ci表示(shi)了。但是重(zhong)建光(guang)照的過程是在運行(xing)時實時進(jin)行(xing)的,從(cong)重(zhong)建光(guang)照的過程中(zhong)可以看(kan)出該式非常簡單,其中(zhong)Yi的計算從(cong)球(qiu)諧基(ji)函數的表中(zhong)就可以看(kan)出只涉及到簡單的乘法(fa)和tu)臃fa),完全可以在shader中(zhong)實現(球(qiu)諧基(ji)函數中(zhong)的r一般默(mo)認都(du)設置成1)。所以如果(guo)給(gei)我們一個(ge)點的球(qiu)諧系數,利(li)用上面的公式馬上就等得到每(mei)個(ge)方(fang)向上的光(guang)照強度qu)對于上面的那個(ge)光(guang)照函數來說,首先對原函數進(jin)行(xing)采樣,采樣10000個(ge)點並計算出前6階36個(ge)球(qiu)諧系數,計算出的球(qiu)諧系數(部(bu)分)如下(xia)︰  計算好了球(qiu)諧系數之後,我們就可以利(li)用這些系數來還原原光(guang)照了,利(li)用第二個(ge)公式還原之後的效果(guo)如下(xia)︰ 從(cong)左(zuo)至右分別是原光(guang)照、0~2階球(qiu)諧光(guang)照、0~5階球(qiu)諧光(guang)照,從(cong)中(zhong)可以看(kan)出到第5階球(qiu)諧光(guang)照與原光(guang)照已經(jing)很接(jie)近了,只是有xing)﹝bu)分的高頻信(xin)息不同(tong)。說明球(qiu)諧系數越多,還原的效果(guo)越好,同(tong)時還原光(guang)照時能夠較好地保留低頻部(bu)分,而高頻信(xin)息則(ze)丟(ding)失(shi)得比較多。不過對于光(guang)照來說,一般都(du)是比較低頻的信(xin)息,所以3階,也(ye)就是到l=2時ben)鴕丫jing)足夠了。 如果(guo)用CubeMap的方(fang)式來可視化就是這個(ge)樣子︰    左(zuo)圖(tu)為原環境光(guang)的CubeMap,右圖(tu)為0~5階球(qiu)諧系數還原之後的光(guang)照,可以看(kan)出已經(jing)還原得很好了。    拋開簡單的函數,如果(guo)是復雜的環境光(guang)貼圖(tu),過程也(ye)是一樣的,比如對于一個(ge)這樣的環境光(guang)︰ 對它進(jin)行(xing)采樣並還原之後,得到了這樣的結果(guo)︰ 效果(guo)還不錯,只是高頻丟(ding)失(shi)了很多。不過這是qian)怨guang)照的還原,因此丟(ding)失(shi)了高頻信(xin)息關系也(ye)不大。 如果(guo)把這兩個(ge)光(guang)照投射到jiao)蠣嬪轄jin)行(xing)可視化,就是這個(ge)樣子︰ 可惜的是網頁(ye)上沒法(fa)進(jin)行(xing)交互,所以只能表現出某個(ge)角(jiao)度的光(guang)照還原情況。 有了上面這些實驗(yan)的準(zhun)備,我們就可以開始(shi)在實際的場景中(zhong)應用球(qiu)諧光(guang)照,下(xia)一篇(pian)我將會簡要(yao)介紹(shao)一下(xia)我的實現過程。 另外,實驗(yan)過程中(zhong)用到的一些工具我放在github的這個(ge)倉庫的experiment文件夾中(zhong)︰https://github.com/lianera/SphericalHarmonicsLighting

不過這些工具都(du)是實驗(yan)性質的,如果(guo)有問題歡(huan)迎(ying)反(fan)饋(kui)。

吉林体彩网官网

    Tag標簽(qian)︰光(guang)照  
    • 吉林体彩网官网

    About IT165 - 廣告服務 - 隱私(si)聲明 - 版(ban)權申明 - 免責條(tiao)款(kuan) - 網站地圖(tu) - 網友投稿 - 江苏快三官网聯系方(fang)式
    本(ben)站內容來自于互聯網,僅供(gong)用于網絡(luo)技術學習,學習中(zhong)請遵(zun)循相關法(fa)律法(fa)規(gui)
    吉林体彩网官网 | 下一页