天天看點

Gouraud 着色(雙線性光強插值法)、Phong 着色、Blinn-Phong 反射模型差別

openGL系列文章目錄

文章目錄

  • ​​openGL系列文章目錄​​
  • ​​前言​​
  • ​​一、Gouraud 着色(雙線性光強插值法)​​
  • ​​二、phong着色​​
  • ​​三、Blinn-Phong反射模型​​
  • ​​總結​​
  • ​​源碼下載下傳​​

前言

openGL光照模型有三種:

  1. Gouraud 着色(雙線性光強插值法)
  2. Phong 着色
  3. Blinn-Phong 反射模型

    有什麼差別呢?

1.Gouraud 着色(雙線性光強插值法)的效果

Gouraud 着色(雙線性光強插值法)、Phong 着色、Blinn-Phong 反射模型差別

可以看到高光鏡面,光斑有散開的僞影

2.Phong 着色

Gouraud 着色(雙線性光強插值法)、Phong 着色、Blinn-Phong 反射模型差別

可以考到phong光照,高光光斑比較自然一些

3.Blinn-Phong 反射模型效果

Gouraud 着色(雙線性光強插值法)、Phong 着色、Blinn-Phong 反射模型差別

一、Gouraud 着色(雙線性光強插值法)

Gouraud 着色過程如下。

(1)确定每個頂點的顔色,以及光照相關計算。

(2)允許正常的光栅化過程在插入像素時對顔色也進行插值(同時也對光照進行插值)。

在OpenGL 中,這表示大多數光照計算都是在頂點着色器中完成的,片段着色器僅做傳

遞并展示自動插值的光照後的顔色。

二、phong着色

Bui Tuong Phong 在猶他大學的研究所學生期間開發了一種平滑的着色算法,在1973 年的論

文[PH73]中對其進行了描述,并在[PH75]中發表。該算法的結構類似于Gouraud 着色的算法,其

不同之處在于光照計算是按像素而非頂點完成。由于光照計算需要法向量N 和光向量L,

但在模型中僅頂點包含這些資訊,是以Phong 着色通常使用巧妙的“技巧”來實作,其中N

和L 在頂點着色器中進行計算,并在光栅化期間插值。

三、Blinn-Phong反射模型

雖然Phong 着色有着比Gouraud 着色更真實的效果,但這是建立在增大性能消耗的基礎

上的。James Blinn 在1977 年提出了一種對于Phong 着色的優化方法[BL77],被稱為Blinn-Phong

反射模型。這種優化是基于觀察到Phong 着色中消耗最大的計算之一是解出反射向量R。

Blinn 發現向量R 在計算過程中并不是必需的——R 隻是用來計算角φ 的手段。角φ 的

計算可以不用向量R,而通過L 與V 的角平分線向量H 得到。如圖1 所示,H 和N 之

間的角α 剛好等于1⁄2(φ)。雖然α 與φ 不同,但Blinn 展示了使用α 代替φ 就已經可以獲得

足夠好的結果。

角平分線向量可以簡單地使用L+V 得到(見圖2),之後cos(α)可以通過•) )H N的點積計算。

Gouraud 着色(雙線性光強插值法)、Phong 着色、Blinn-Phong 反射模型差別

圖1

Gouraud 着色(雙線性光強插值法)、Phong 着色、Blinn-Phong 反射模型差別

圖二

總結

源碼下載下傳