Gouraud Shading和Phong Shading都是光照反射模型(Reflection Model),用來計算鏡面反射方向的光強。
注意,不要望文生義,認為是計算陰影的模型。
相同點:
1 二者都是明暗處理技術;
2 都要先應用多邊形的法線算出其公共頂點的法線(如下圖);
3 都應用Phong局部反射模型計算多邊形頂點處的光強(算式如下圖)。
即 反射光 = 環境光 + 漫反射 + 鏡面反射
其中環境光是一個常量,就好比將一條直線上移的截距值,基於這個基本光強,再加上漫反射和鏡面反射。
漫反射和鏡面反射是點光源在該點上的漫反射和鏡面反射。
4 都不考慮物體間的相互作用,即將物體的反射光、折射光(漫反射光實際上是上頭提到的環境光,我們將其看成常量處理,比較簡單)作為入射光強的一部分來考慮,這樣是相對不真實的情況,ray tracing會解決這一問題。
下圖為Phong局部反射模型中漫反射和鏡面反射的示意圖:
不同點:
Gouraud明暗處理只在多邊形頂點處采用Phong局部反射模型計算光強,而在多邊形內的其他點采用雙向線性插值,這樣做的優點是高效,但是無法很好的處理鏡面高光問題,依賴於其所在多面形的相對位置;
而Phong明暗處理,通過差值計算每個頂點的法向量(3次差值,在x,y,z三個方向分別進行差值計算),然后計算每個點上的光強值,這樣效果好,但計算復雜,需要付出比Gouraud 4-5 倍的時間。
通常,在一個比較復雜的場景中,當物體鏡面發射很微弱時,我們對其采用Gouraud明暗處理,而對於一些鏡面高光的物體,采用Phong明暗處理,這樣既保證質量,又保證速度。
下圖為Gouraud (a)和Phong (b)模型的示意圖: