URP | Phong 和 Blinn-Phong光照光照模型
Phong | 馮氏光照模型
介紹
Phong光照模型中主要的部分就是對高光的計算
是根據(jù)反射原理,如果正好在反射方向觀察,那看到的反射光就越多。所以計算反射方向和觀察方向。就可以計算出高光反射。
公式
I(spcular) = pow(max(0,dot(R,V)), gloss)
最終顏色 = 直射光顏色 * 反射光顏色 * pow(max(0, dot(反射光方向, 視野方向)), 光澤度(gloss)
Phong光照模型原理
簡單介紹一下,蘭伯特光照模型,已經(jīng)獲取到了法線向量(N),光照向量(L),
Phong 光照模型 是計算觀察方向(V)和反射方向(R) 這倆個向量。計算出高光的強(qiáng)弱。

HLSL 怎么求出這倆個向量,
V 視角
獲取相機(jī)的世界坐標(biāo)(_WorldSpaceCameraPos )這個宏是內(nèi)置的,
使用相機(jī)空間的位置信息 —世界空間頂點位置信息 = 就可以得到相機(jī)方向。
這一步是在頂點階段計算的,不要忘記片元結(jié)構(gòu)體里申明變量。
注意 :是float3類型的向量,不要錯誤。
在片元著色器階段計算
片元著色器
傳入數(shù)據(jù)歸一化一下,
注意 :是float3類型的向量,不要錯誤。
R 反射
那怎么計算反射向量,我們可以使用光的反方向,和頂點法線方向求出反射方向。
注意 :是float3類型的向量,不要錯誤。
這里的 -LightDir 是負(fù)的方向。
高光計算部分
套用公式帶入,后面 乘光照顏色。
效果

代碼
Blinn-Phong光照
半角向量 | Halfway vector
Blinn-Phong光照引入了一個概念,半角向量,用H表示. 它在視線方向和光線方向的中間

H 半角向量
怎么獲取半角向量,使用視角 + 光照方向
高光計算
使用 dot(N,H)
倆個效果對比

總結(jié)
Phong 光照模型 主要是計算出 視角方向(ViewDir)和反射方向(ReflectDir),視角方向最好在頂點階段計算,這樣會少很多計算量,向量傳入片元著色器階段歸一化一下。

注意:向量的類型,一開始我是設(shè)置 real 類型,在反射方向,計算出一個錯誤的結(jié)果。查找了半天。

我們修改成 real3類型,在看一下效果。

Blinn-Phone ?光照模型,是在Phone基礎(chǔ)上修改的,
Blinn-Phong著色的一個附加好處是,它比Phong著色性能更高,因為我們不必計算更加復(fù)雜的反射向量