1. 程式人生 > >[computer graphics]簡單光照模型(Phong和Blinn-Phong)和明暗處理

[computer graphics]簡單光照模型(Phong和Blinn-Phong)和明暗處理

# 簡單光照模型(Phong和Blinn-Phong)和明暗處理 支援點光源和平行光,是一種簡單光照模型,它將光照分解成了三個部分,分別為 - 漫反射 - 鏡面反射 - 環境光 如圖所示,是一個簡單的幾何模型。 - $L$是光源方向 - $N$是法線方向 - $R$是反射方向 - $V$是視線方向 - $H$是$L$和$V$的平分 - 所有向量都是單位向量 ## 理想漫反射 當光源來自一個方向時,漫反射均勻地向各個方向傳播,與視點無關,是由物體表面粗糙不平引起的,漫反射的空間分佈是均勻的,也就是說不論從哪個方向看去,同一個點的漫反射光強都是一樣的。物體上的點$P$,法向量為$N$,入射光強度為$I_p$,$L$為$P$指向光源的方向。如果所有所有的向量都是單位向量,那麼有 $$ I_d = I_pK_d\cdot(L\cdot N) $$ 其中$K_d=(K_{dr},K_{dg},K_{db})$這三個分量分別是RGB三原色的漫反射係數,可以反應物體的顏色。同樣的$I_p=(I_r,I_g,I_b)$可以通過分量來設定光源的顏色。 ## 鏡面反射 對於理想鏡面,反射光集中在一個方向,並遵守反射定律。對於一般的光滑表面,反射光則集中在一個範圍內,且反射定律決定的方向光強最大。所以從不同位置觀察到的鏡面反射光強不同。鏡面反射光可表示為 $$ I_s = I_pK_s(R\cdot V)^{n} $$ $R \cdot V$計算的是反射方向和視線方向的夾角,夾角越小,強度越大。$n$是反射指數,反應了物體的表面的光滑程度,一般1-2000。$n$越大約光滑,因為n越大,例如2000,那麼當夾角很小時,例如很接近1,如0.9,但是經過2000乘方,就變得很小了,這意味著只有無限接近反射方向,才能看到高光,其他方向不行,這就表示物體很光滑。反過來,$n$很小那麼移動一點角度,也能看到衰弱的高光,所以光斑會比較明顯。 在鏡面反射模型中,最終要的是計算R的方向,$R$可以通過入射方向和法線方向計算出來
因為這裡的向量都是單位向量,只有方向不一致 $$ \begin{aligned} ||L||\cos\theta &= ||M||=\cos\theta\\ &M和N的方向一致\\ R &= -L+2M \\ &=2N\cos\theta-L\\ &=2N\cdot(N\cdot L)-L \end{aligned} $$ 高光區域只反映光源的顏色,漫反射才能設定物體的顏色。 ## 環境光 光源間接對物體施加的明暗影響,在物體和環境之間多次反射。在簡單光照模型中進行了簡化,通常用一個常數來模擬環境光 $$ I = I_aK_a $$ $I_a$是環境光強,$K_a$為物體對環境光的反射係數。 ## Phong模型 $$ I = I_aK_a +I_pK_d\cdot(L\cdot N)+I_pK_s(R\cdot V)^{n} $$ Phong模型是上述三種因素的疊加,其中$R$的計算比較費時,需要對每一點計算一次$R$的值。 ## Blinn-Phong模型 由於Phong模型計算較為耗時,後來提出了一種對Phong模型的修改,Blinn-Phong模型。 假設: 1. 光源在無窮遠處,光線的方向L為常數(這就意味著,對物體上所有點來說,光線的方向都是一致的,正常情況應該是光源到點的向量,每個點的光照方向都不一致) 2. 視點在無窮遠處,視線的防線V為常數(這個同理) 3. 此模型針對高光部分進行了修改,$R\cdot V$的計算用$H\cdot N$近似,其中$H=(L+V)/||L+V||$,也就是$L$和$V$的平分向量。當$V$接近$R$的時候,$H$也接近$N$,符號高光的規律。對於所有點,$H$只需計算一次。 所以Blinn-Phong模型的可以表示成: $$ I = I_aK_a +I_pK_d\cdot(L\cdot N)+I_pK_s(H\cdot N)^{n} $$
(圖片中應該採用了明暗處理,不僅是光照模型) # 明暗處理 如今的物體大多數用多邊形表示,一個多邊形的法線方向一致,因此一個多邊形內部的畫素相同,而在鄰接出可能會有突變,感覺不連續。為了讓過度平滑,基本思想是:對多邊形的頂點計算合適的光強度,在內部進行均勻插值。其中有兩種主要的做法: - 計算物體表面多邊形頂點的光強,然後插值,求多邊形內部光強。 - 對內部點的法向量進行插值,而頂點的法向量用相鄰多邊形的法向量的平均值得到。 ## Gouraud明暗處理(雙線性光強插值) 基本演算法 1. 計算多邊形頂點的平均法向量 2. 用Phong模型計算頂點的平均強度 3. 插值計算離散邊上的各點光強 4. 插值計算多邊形區域內的各點光強 計算速度比簡單光照模型有了很大的提高,解決了顏色突變問題,但是鏡面反射效果不理想。 ## Phong明暗處理(雙線性法向量插值) 和Gouraud方法基本類似,只不過是對法向量插值。多邊形頂點的法向量用相鄰多邊形的法向量的平均值。而內部每個點都要計算法向量,用頂點的法向量插值得到。 這種做法效果好,可以產生正確的高光,但是計算量很大。
- [1]維基百科 - [2]計算機圖形學基礎教程