Phong Lighting介紹:

打光模型(lighting model)有很多種,但是大致上分為兩類,具有物理根據的打光模型和以人類視覺的方式做調整的打光模型。

據物理根據的打光模型,會考量到物體的反射係數或是粗糙程度等資訊,像是blinn-phong model、BRDF等等。

下圖為blinn-phong的示意圖

clip_image002

以人類視覺的方式為根據的打光模型,最簡單的就是phong-shading了。傳統的pipeling只對頂點做內插,然後在來去計算打光的部分,由於只有對於頂點去做內插,並沒有去對法向量(normal)去做考量,所以造成specular的打光效果不正確的現象。所以,在做打光計算的時候,我們需要考量到法向量,如此衣來這樣的打光效果才是正確的。

Phong-lighting的計算主要分為三個項目,算式如下:

clip_image004

經由這樣算出來的結果就是RGB的數值,Ka*ia這個項目,一般都會忽略掉不做計算,原因在於該物體並不會自體發光,如果現在計算的物體會自體發光的話,這個項目就要列入計算了。後面兩項一個是diffuse項目,一個是specular項目。下圖為是意圖

clip_image006

Specular項目,主要是用次方的方式來逼近強光的效果。而diffuse的計算,則是使用內積的方式,看看光在垂直面上的強度。

diffuse項目,主要是計算光打到物體以後會均勻反射,而specular項目只有在特定的方向才可以經由眼睛所觀察到。

上面算是簡單的符號介紹:

L : 光的方向(light-point_position 需要normalize)

Ka、Kd、ns和Ks都是物體材質的部分

N : 法向量

R : 光打到物體過後的反射方向 (reflect(-L,Normal))

各自計算的效果可以由下圖看出

clip_image008

下圖為phong-lighting和blinn的差異:

clip_image010

可以看到蠻大的差異在於specular的部分,phong lighting的部分看起來比較假,有人說看起來比較像是玩具的感覺。

本篇圖片大部分轉至Wiki的部分。

接下來是實作的部分,這邊要先說明XNA3.1和XNA4.0對於SHADER的部分有做部分的調整,而在接下來的範例中,我會使用XNA 4.0。

在後面有一篇會在簡介XNA 4.0以及依些簡單的操作。(會分在後面主要是因為我現在用的是另一台電腦XD)

創作者介紹
創作者 teexit1224 的頭像
teexit1224

StreamWhite

teexit1224 發表在 痞客邦 留言(0) 人氣()