百人計(jì)劃圖形2.4——傳統(tǒng)光照模型
光照模型
光照模型(illumination model),也稱為明暗模型,用于計(jì)算物體某點(diǎn)處的光強(qiáng)(顏色值從算法理論基礎(chǔ)而言,光照模型分為兩類:一種是基于物理理論的,另一種是基于經(jīng)驗(yàn)?zāi)P偷摹?/p>
基于物理理論的光照模型:偏重于使用物理的度量和統(tǒng)計(jì)方法,效果非常真實(shí),但是計(jì)算復(fù)雜,實(shí)現(xiàn)起來也較為困難;
經(jīng)驗(yàn)?zāi)P?是對光照的一種模擬,通過實(shí)踐總結(jié)出簡化的方法,簡化了真實(shí)的光照計(jì)算,并且能達(dá)到很不錯(cuò)的效果

為什么需要光照模型
現(xiàn)實(shí)世界的光照是極其復(fù)雜的,而且會受到諸多因素的影響,有限的計(jì)算能力無法完全模擬
使用簡化的光照模型對現(xiàn)實(shí)的情況進(jìn)行近似,使得計(jì)算處理起來會更容易,并且令效果更符合需求。這些光照模型就是基于我們對光的物理特性的理解。



漫反射
什么是漫反射?
在光照模型的定義中,當(dāng)光線從光源照射到模型表面時(shí),光線均勻被反射到各個(gè)方向,這種現(xiàn)象就是漫反射
在漫反射的過程中,光線發(fā)生了發(fā)生了吸收和散射,而因此改變顏色和方向
如何計(jì)算?
漫反射光照符合Lambert定律,反射光強(qiáng)與法線和光源方向之間的夾角的余弦值成正比


高光反射(鏡面反射)






經(jīng)典光照模型







總結(jié)
· Lambert模型只考慮表面的漫反射部分
Phong模型能夠較好的呈現(xiàn)鏡面高光的效果,也是四種模型中最接近真實(shí)的效果,需要計(jì)算較復(fù)雜的反射向量Blinn-Phong模型效果與Phong模型相近,更偏向藝術(shù)性的效果,使用方便計(jì)算的半程向量代替較為復(fù)雜的反射向量,計(jì)算量小于Phong,是效果和效率的最佳選擇,也是大多數(shù)情況下的默認(rèn)光照模型
Gourand模型計(jì)算頂點(diǎn)光照并通過增量法插值計(jì)算多邊形內(nèi)部的光強(qiáng),當(dāng)頂點(diǎn)密度低時(shí),表現(xiàn)效果很差,對于高
光的效果也不盡如意,計(jì)算量較小
作業(yè):
能量守恒的理念在基礎(chǔ)光照模型中的作用
能量守恒
????微平面近似法使用了這樣一種形式的能量守恒(Energy Conservation):出射光線的能量永遠(yuǎn)不能超過入射光線的能量(發(fā)光面除外)。如上圖我們可以看到,隨著粗糙度的上升,鏡面反射區(qū)域會增加,但是鏡面反射的亮度卻會下降。如果每個(gè)像素的鏡面反射強(qiáng)度都一樣(不管反射輪廓的大?。敲创植诘钠矫婢蜁派涑鲞^多的能量,而這樣就違背了能量守恒定律。這也就是為什么正如我們看到的一樣,光滑平面的鏡面反射更強(qiáng)烈而粗糙平面的反射更昏暗。
????為了遵守能量守恒定律,我們需要對漫反射光和鏡面反射光做出明確的區(qū)分。當(dāng)一束光線碰撞到一個(gè)表面的時(shí)候,它就會分離成一個(gè)折射部分和一個(gè)反射部分。反射部分就是會直接反射開而不進(jìn)入平面的那部分光線,也就是我們所說的鏡面光照。而折射部分就是余下的會進(jìn)入表面并被吸收的那部分光線,也就是我們所說的漫反射光照。
????這里還有一些細(xì)節(jié)需要處理,因?yàn)楫?dāng)光線接觸到一個(gè)表面的時(shí)候折射光是不會立即就被吸收的。通過物理學(xué)我們可以得知,光線實(shí)際上可以被認(rèn)為是一束沒有耗盡就不停向前運(yùn)動(dòng)的能量,而光束是通過碰撞的方式來消耗能量。每一種材料都是由無數(shù)微小的粒子所組成,這些粒子都能如下圖所示一樣與光線發(fā)生碰撞。這些粒子在每次的碰撞中都可以吸收光線所攜帶的一部分或者是全部的能量而后轉(zhuǎn)變成為熱量。

????一般來說,并非全部能量都會被吸收,而光線也會繼續(xù)沿著(基本上)隨機(jī)的方向發(fā)散,然后再和其他的粒子碰撞直至能量完全耗盡或者再次離開這個(gè)表面。而光線脫離物體表面后將會協(xié)同構(gòu)成該表面的(漫反射)顏色。不過在基于物理的渲染之中我們進(jìn)行了簡化,假設(shè)對平面上的每一點(diǎn)所有的折射光都會被完全吸收而不會散開。而有一些被稱為次表面散射(Subsurface Scattering)技術(shù)的著色器技術(shù)將這個(gè)問題考慮了進(jìn)去,它們顯著地提升了一些諸如皮膚,大理石或者蠟質(zhì)這樣材質(zhì)的視覺效果,不過伴隨而來的代價(jià)是性能的下降。
????對于金屬(Metallic)表面,當(dāng)討論到反射與折射的時(shí)候還有一個(gè)細(xì)節(jié)需要注意。金屬表面對光的反應(yīng)與非金屬(也被稱為介電質(zhì)(Dielectrics))表面相比是不同的。它們遵從的反射與折射原理是相同的,但是所有的折射光都會被直接吸收而不會散開,只留下反射光或者說鏡面反射光。亦即是說,金屬表面只會顯示鏡面反射顏色,而不會顯示出漫反射顏色。由于金屬與電介質(zhì)之間存在這樣明顯的區(qū)別,因此它們兩者在PBR渲染管線中被區(qū)別處理,而我們將在文章的后面進(jìn)一步詳細(xì)探討這個(gè)問題。
????反射光與折射光之間的這個(gè)區(qū)別使我們得到了另一條關(guān)于能量守恒的經(jīng)驗(yàn)結(jié)論:反射光與折射光它們二者之間是互斥的關(guān)系。無論何種光線,其被材質(zhì)表面所反射的能量將無法再被材質(zhì)吸收。因此,諸如折射光這樣的余下的進(jìn)入表面之中的能量正好就是我們計(jì)算完反射之后余下的能量。
????我們按照能量守恒的關(guān)系,首先計(jì)算鏡面反射部分,它的值等于入射光線被反射的能量所占的百分比。然后折射光部分就可以直接由鏡面反射部分計(jì)算得出:
float kS = calculateSpecularComponent(...); // 反射/鏡面 部分
float kD = 1.0 - ks; ? ? ? ? ? ? ? ? ? ? ? ?// 折射/漫反射 部分
????這樣我們就能在遵守能量守恒定律的前提下知道入射光線的反射部分與折射部分所占的總量了。按照這種方法折射/漫反射與反射/鏡面反射所占的份額都不會超過1.0,如此就能保證它們的能量總和永遠(yuǎn)不會超過入射光線的能量。而這些都是我們在前面的光照教程中沒有考慮的問題。
2.基于能量守恒的理念,自己寫一套完整的光照模型,需要包含環(huán)境光照
光照模型還在理解,后續(xù)補(bǔ)上