[computer graphics]簡單光照模型(Phong和Blinn-Phong)和明暗處理
阿新 • • 發佈:2020-06-11
# 簡單光照模型(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]計算機圖形學基礎教程