計算機(jī)圖形學(xué)基礎(chǔ)(三):表面著色(Surface Shading)

所有專欄系列的內(nèi)容均為本人(b站id:寧牁兒)精心總結(jié)和排版,僅用于免費(fèi)學(xué)習(xí)交流,任何人不得擅自用于商業(yè)活動

前面的章節(jié)已經(jīng)能簡單地計算觀測光線和相交點了,接下來就是為該相交點著色,用于計算著色的表達(dá)式就叫做著色模型,著色模型可以完全獨立于渲染系統(tǒng)的其它部分,接下來討論一個最基本的著色模型,它可以用于點光源照射不透明表面。
類點光源光照(Point-like light sources)
類點光源分為兩種:一,點光源,特征是足夠小且距離場景比較近,可以被當(dāng)做一個點來處理,它對場景中的物體有不同的照射;二,方向光源,它也可以被看做是一個點,但是它離場景比較遠(yuǎn),所以它幾乎對場景的所有物體有著相同的照射,我們不需要知道它的位置而只需要知道它的方向即可。LED燈和太陽光就是這兩種光源的典型例子。
點光源光照
點光源通過它的位置(三維空間中的一點)和發(fā)光強(qiáng)度來描述,點光源可以在各個方向上的發(fā)光強(qiáng)度一樣(各向同性的),也可以只在特定的方向上發(fā)光(如聚光燈)。
對于各向同性的光源,假設(shè)其輻射能量(radiant power)為1瓦特,考慮以其為中心、半徑為1的球面,該光源發(fā)出的能量全部打在了這個球面上,球面面積為,所以它的輻射能量密度可表示為
,這一密度也叫做輻射照度(irradiance)。
其中,表示光源的光照強(qiáng)度,當(dāng)
一定時,輻射照度與距離的平方
成反比。

上面的球面是一個特殊情況,光線都是垂直地照向球面(即光線方向和表面法線同向)。大部分情況下,光線和表面法線并不同線,如果將表面轉(zhuǎn)動,此時的照度需要乘上因子
(蘭伯特余弦定理),此時:
其中可以叫作對點光源的幾何因子,只取決于點光源和接收表面的幾何位置關(guān)系,
的值可以通過指向光源的光線方向的單位向量
和表面法線方向的單位向量
點乘得到:

方向光源光照
方向光源光照的輻射照度計算幾乎和點光源一樣,只是光源距離場景太遠(yuǎn)以至于可以視為一個常量,把它叫做常量
,這個常量就是直射照度。對于方向光源光照,有:
反射模型
照度描述的是有多少光打在物體的表面上,而著色還要考慮到它是如何反射到觀測點的。
蘭伯特反射
蘭伯特反射是一種理想散射,它假設(shè)光線同等地反射至所有方向,而不考慮入射光線的方向,所以此時觀測點觀察到的反射光只和照度相關(guān):
鏡面反射
很多材料都會有一些高光,比如金屬、光滑的塑料、植物葉子等,當(dāng)看向這些材料時,反射會隨著你的觀測位置變化而變化。也就是說,鏡面反射依賴于觀測點的位置。理想化的鏡面反射的入射角和折射角相等,但實際情況是有很多物體表面并不是完全光滑的,這在圖形學(xué)中被稱作光澤反射。
從前面我們知道光澤反射會依賴于表面法線、光照方向
和觀測向量
,一種比較簡單的光澤反射模型是修正Blinn-Phong模型,這個模型的思想是:當(dāng)光照方向
和觀測向量
關(guān)于表面法線
對稱時,會表現(xiàn)出最明亮的反射光,并且反射光的強(qiáng)度會隨著觀測向量
偏離對稱位置而平滑下降。

我們使用半程向量來衡量觀測向量
偏離對稱位置的程度,半程向量指的是觀測向量
和光照向量
疊加的一半。當(dāng)
和
方向相等時,說明觀測向量
正好在對稱的位置,反射光強(qiáng)度就越大;反之,當(dāng)
越偏離
,強(qiáng)度就越小。可以通過計算
和
的點積來衡量偏離程度,當(dāng)兩者重合時該點積達(dá)到最大值。修正Blinn-Phong模型還給這個值指定了一個指數(shù)
確定它下降的快慢程度:
值控制了表面反射的高亮程度,當(dāng)
越大時,說明反射光強(qiáng)度下降的越快,也就表明了該表面的高亮程度更高。
在知道光源位置和著色點
(即相交點)的情況下,可以計算光源至相交點的距離
和光照向量
的單位向量為
:
半程向量的單位向量容易得到,假設(shè)觀測向量
的單位向量為
,光照向量
的單位向量為
,則有:
對于蘭伯特反射來說,反射光,即
是一個常量,但對光澤反射來說,需要對系數(shù)
加上一個高光反射部分:
其中系數(shù)叫做鏡面系數(shù)(specular coefficient),控制著高光的整體明亮程度。
是為了防止
出現(xiàn)負(fù)數(shù)的情況。此時整體的系數(shù)
,這個表達(dá)式被叫做雙向反射分布函數(shù),它描述了反射光如何隨著觀測向量
和光照向量
的變化而變化。