cubemap
先將場(chǎng)景環(huán)境渲染到cubemap中,可以離線渲染溢十,也可以實(shí)時(shí)渲染垮刹。對(duì)于靜態(tài)的效果,離線就可以张弛。離線還可以使用外部資源荒典,如拍攝的全景圖生成cubemap酪劫。
想象cubemap是一個(gè)包圍在場(chǎng)景外的立方體。通過從場(chǎng)景中心向其發(fā)射射線來采樣上面的顏色寺董。
反射
對(duì)于反射覆糟,想象cubmap上有一個(gè)像素發(fā)射光線到表面然后反射到眼睛中,為獲取這個(gè)顏色螃征,需要從視線方向反推出入射光線的方向搪桂,即使用視線的反方向計(jì)算出折射方向來采樣cubemap上面的顏色,就是入射像素的顏色盯滚。
折射
對(duì)于折射,要根據(jù)折射定律計(jì)算出折射光線酗电,即 n1sina = n2sinb, 其中n1,n2是兩個(gè)界面的折射率魄藕,a是入射角,b是折射角撵术。實(shí)際上經(jīng)常使用n1/n2即透射比背率。因?yàn)槿肷浞较蛞阎干浔纫阎塾耄钥梢杂?jì)算出折射方向寝姿。計(jì)算時(shí)同樣使用視線方向作為入射方向,根據(jù)光路可逆性划滋,使用計(jì)算出的折射方向來采樣cubmap即可饵筑。
菲涅耳反射
對(duì)于菲涅耳反射
菲涅耳現(xiàn)象:當(dāng)光線照射到物體表面上時(shí),一部分發(fā)生反射处坪,一部分進(jìn)入物體內(nèi)部根资,發(fā)生折射或散射。被反射的光和入射光之間存在一定的比率關(guān)系同窘。根據(jù)觀察方向玄帕,反射光的量是不同的。比如視線垂直看往水面想邦,能看到水下的情景裤纹,此時(shí)被水面反射的光線很少,因此能看到水下物體丧没;而看遠(yuǎn)處的水面時(shí)幾乎看不見水下的情景鹰椒,此時(shí)被水面反射的光線很多,因此極少有光線從水下反射回來骂铁,從而幾乎看不到水下的情景吹零。
為了模擬這個(gè)現(xiàn)象,采樣一個(gè)近似公式去計(jì)算反射光的強(qiáng)度: F(v,n) 拉庵,其中v是視線方向灿椅,n是表面法線。
有多種近似公式,如Schlick菲涅耳近似等式:Fschlick(v,n) = F0 + (1-F0)(1- dot(v,n)) ^ 5
其中F0是一個(gè)用于控制菲涅耳發(fā)射強(qiáng)度的系數(shù)茫蛹,范圍0~1, 當(dāng)F0為1時(shí)操刀,沒有菲涅耳效果,完全反射婴洼;當(dāng)F0為0時(shí)骨坑,完全使用計(jì)算出來的反射光比例。公式計(jì)算的結(jié)果和dot(v,n)成反比柬采,即v和n的夾角越小欢唾,反射光越弱,當(dāng)v和n夾角為0時(shí)粉捻,完全沒有反射光礁遣;而v和n夾角接近90度時(shí),反射光特別強(qiáng)肩刃。也就是在邊緣處反射光最強(qiáng)祟霍,從而模擬了菲涅耳現(xiàn)象。
根據(jù)菲涅耳近似等式計(jì)算的結(jié)果盈包,去調(diào)節(jié)反射光的比例沸呐,從而模擬了菲涅爾現(xiàn)象。即在普通反射的基礎(chǔ)上呢燥,使用fresnel值對(duì)reflection值進(jìn)行調(diào)節(jié)即可崭添。當(dāng)F0為1時(shí),物體完全反射cubemap中的圖像疮茄;當(dāng)F0為0時(shí)滥朱,是一個(gè)具有邊緣光照效果的漫反射物體。