簡(jiǎn)介
之前在一篇實(shí)時(shí)深度圖優(yōu)化的論文中看到球諧光照(Spherical Harmonics Lighting)的應(yīng)用,在查閱了許許多多資料之后還是無(wú)法完全理解,我個(gè)人覺(jué)得如果之前對(duì)實(shí)時(shí)渲染技術(shù)不是很了解的話,球諧光照還是有一定難度的。大多數(shù)的資料都是從原理上描述球諧函數(shù)及其光照過(guò)程,而沒(méi)有對(duì)具體的應(yīng)用做解釋,我直到真正動(dòng)手實(shí)現(xiàn)了一遍球諧光照之后,才完全理解球諧光照具體的過(guò)程以及作用。
球諧光照實(shí)際上是一種對(duì)光照的簡(jiǎn)化,對(duì)于空間上的一點(diǎn),受到的光照在各個(gè)方向上是不同的,也即各向異性,所以空間上一點(diǎn)如果要完全還原光照情況,那就需要記錄周圍球面上所有方向的光照。注意這里考慮的周圍環(huán)境往往是復(fù)雜的情況,而不是幾個(gè)簡(jiǎn)單的光源,如果是那樣的話,直接用光源的光照模型求和就可以了。
如果環(huán)境光照可以用簡(jiǎn)單函數(shù)表示,那自然直接求點(diǎn)周圍球面上的積分就可以了。但是通常光照不會(huì)那么簡(jiǎn)單,并且用函數(shù)表示光照也不方便,所以經(jīng)常用的方法是使用環(huán)境光貼圖,比如像這樣的:
上面的圖是立方體展開(kāi)得到的,這種貼圖也就是cubemap,需要注意的是一般的cubemap是從里往外看的。
考慮一個(gè)簡(jiǎn)單場(chǎng)景中有個(gè)點(diǎn),他周圍的各個(gè)方向上的環(huán)境光照就是上面的cubemap呈現(xiàn)的,假如我想知道這個(gè)點(diǎn)各個(gè)方向的光照情況,那么就必須在cubemap對(duì)應(yīng)的各個(gè)方向進(jìn)行采樣。對(duì)于一個(gè)大的場(chǎng)景來(lái)說(shuō),每個(gè)位置點(diǎn)的環(huán)境光都有可能不同,如果把每個(gè)點(diǎn)的環(huán)境光貼圖儲(chǔ)存起來(lái),并且每次獲取光照都從相應(yīng)的貼圖里面采樣,可想而知這樣的方法是非常昂貴的。
利用球諧函數(shù)就可以很好的解決這個(gè)問(wèn)題,球諧函數(shù)的主要作用就是用簡(jiǎn)單的系數(shù)表示復(fù)雜的球面函數(shù)。關(guān)于球諧函數(shù)的理論推導(dǎo)與解釋可以參考wiki(https://en.wikipedia.org/wiki/Spherical_harmonics)。如果只是要應(yīng)用和實(shí)現(xiàn)球諧光照,不會(huì)涉及到推導(dǎo)過(guò)程,不過(guò)球諧基函數(shù)卻是關(guān)鍵的內(nèi)容,球諧基函數(shù)已經(jīng)有人在wiki上列好了表格,參考(https://en.wikipedia.org/wiki/Table_of_spherical_harmonics),前3階的球諧基函數(shù)如下:
這里值得注意的是很多資料用這張圖來(lái)描述球諧基函數(shù):
我剛開(kāi)始看到這張圖的時(shí)候簡(jiǎn)直覺(jué)得莫名其妙,實(shí)際上這里面每個(gè)曲面都是用球坐標(biāo)系表示的,球諧基都是定義在球坐標(biāo)系上的函數(shù),r(也就是離中心的距離)表示的就是這個(gè)球諧基在這個(gè)方向分量的重要程度。我是用類比傅里葉變換的方法來(lái)理解的,其實(shí)球諧函數(shù)本身就是拉普拉斯變換在球坐標(biāo)系下的表示,這里的每個(gè)球諧基可以類比成傅里葉變換中頻域的各個(gè)離散的頻率,各個(gè)球諧基乘以對(duì)應(yīng)的系數(shù)就可以還原出原來(lái)的球面函數(shù)。一個(gè)復(fù)雜的波形可以用簡(jiǎn)單的諧波和相應(yīng)系數(shù)表示,同樣的,一個(gè)復(fù)雜的球面上的函數(shù)也可以用簡(jiǎn)單的球諧基和相應(yīng)的系數(shù)表示。
由于球諧基函數(shù)階數(shù)是無(wú)限的,所以只能取前面幾組基來(lái)近似,一般在光照中大都取3階,也即9個(gè)球諧系數(shù)。
實(shí)驗(yàn)
我們先考慮簡(jiǎn)單的情況,比如說(shuō)定義一個(gè)光照函數(shù):
在球坐標(biāo)系下,將該函數(shù)的值當(dāng)做光照強(qiáng)度值,可以畫(huà)出光照在球面上的分布情況:
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26