Cubemap應用之反射,折射,菲涅耳反射

cubemap
先將場景環(huán)境渲染到cubemap中,可以離線渲染,也可以實時渲染。對于靜態(tài)的效果,離線就可以。離線還可以使用外部資源,如拍攝的全景圖生成cubemap。
想象cubemap是一個包圍在場景外的立方體。通過從場景中心向其發(fā)射射線來采樣上面的顏色。

反射
對于反射,想象cubmap上有一個像素發(fā)射光線到表面然后反射到眼睛中,為獲取這個顏色,需要從視線方向反推出入射光線的方向,即使用視線的反方向計算出折射方向來采樣cubemap上面的顏色,就是入射像素的顏色。

折射
對于折射,要根據(jù)折射定律計算出折射光線,即 n1sina = n2sinb, 其中n1,n2是兩個界面的折射率,a是入射角,b是折射角。實際上經(jīng)常使用n1/n2即透射比。因為入射方向已知,透射比已知,所以可以計算出折射方向。計算時同樣使用視線方向作為入射方向,根據(jù)光路可逆性,使用計算出的折射方向來采樣cubmap即可。

菲涅耳反射
對于菲涅耳反射
菲涅耳現(xiàn)象:當光線照射到物體表面上時,一部分發(fā)生反射,一部分進入物體內(nèi)部,發(fā)生折射或散射。被反射的光和入射光之間存在一定的比率關(guān)系。根據(jù)觀察方向,反射光的量是不同的。比如視線垂直看往水面,能看到水下的情景,此時被水面反射的光線很少,因此能看到水下物體;而看遠處的水面時幾乎看不見水下的情景,此時被水面反射的光線很多,因此極少有光線從水下反射回來,從而幾乎看不到水下的情景。
為了模擬這個現(xiàn)象,采樣一個近似公式去計算反射光的強度: F(v,n) ,其中v是視線方向,n是表面法線。
有多種近似公式,如Schlick菲涅耳近似等式:Fschlick(v,n) = F0 + (1-F0)(1- dot(v,n)) ^ 5
其中F0是一個用于控制菲涅耳發(fā)射強度的系數(shù),范圍0~1, 當F0為1時,沒有菲涅耳效果,完全反射;當F0為0時,完全使用計算出來的反射光比例。公式計算的結(jié)果和dot(v,n)成反比,即v和n的夾角越小,反射光越弱,當v和n夾角為0時,完全沒有反射光;而v和n夾角接近90度時,反射光特別強。也就是在邊緣處反射光最強,從而模擬了菲涅耳現(xiàn)象。
根據(jù)菲涅耳近似等式計算的結(jié)果,去調(diào)節(jié)反射光的比例,從而模擬了菲涅爾現(xiàn)象。即在普通反射的基礎上,使用fresnel值對reflection值進行調(diào)節(jié)即可。當F0為1時,物體完全反射cubemap中的圖像;當F0為0時,是一個具有邊緣光照效果的漫反射物體。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容