文章内容来自上面这篇
p
d
f
pdf
pdf,如有错误,欢迎指正。
简要介绍一下
P
h
o
n
g
Phong
Phong和
B
l
i
n
n
−
P
h
o
n
g
Blinn-Phong
Blinn−Phong光照模型的特点。
简要介绍一下问题,同时给出了
N
、
L
、
V
、
P
N、L、V、P
N、L、V、P的意义(之后计算会用到)。
第
0
0
0步,此时最终颜色仅与物体本身的材质有关。
第
1
1
1步,我们可以加上环境光(它能将灯光均匀地照射在场景中每个物体上面)。
这里对
K
e
、
K
a
、
I
L
a
K_e、K_a、I_{La}
Ke、Ka、ILa进行了更加细致的阐述,它们是和波长有关的函数。
这里开始引入漫反射
D
i
f
f
u
s
e
r
e
f
l
e
c
t
i
o
n
Diffuse\ \ reflection
Diffuse reflection。
第
2
2
2步,这里给出了漫反射方程,
K
d
K_d
Kd是漫反射系数,
I
L
I_L
IL是光线的(颜色)强度,
N
N
N是表面的法向量,
L
L
L是指向光源的方向,
θ
θ
θ是二者间的夹角,当
N
∗
L
N*L
N∗L(数量积)
<
=
0
<=0
<=0时,
B
B
B应该等于
0
0
0(免去来自于物体内部的贡献)。
接下来是镜面反射(某些物体上的高光),它和观察方向
V
V
V有关。
当角度
φ
φ
φ增大时,高光会迅速衰减。
这里讲的是
P
h
o
n
g
Phong
Phong镜面反射。
这里讲的是
B
l
i
n
n
−
P
h
o
n
g
Blinn-Phong
Blinn−Phong镜面反射,因为计算反射光线
R
R
R比较复杂,需要更多时间,所以这里使用了
L
、
V
L、V
L、V的半角向量
H
H
H作为替代(当然效果也会略差于
P
h
o
n
g
Phong
Phong)。
第三步,这次我们加入了
B
l
i
n
n
−
P
h
o
n
g
Blinn-Phong
Blinn−Phong镜面反射。
方向光。
点光源。这里讲到了光强的衰弱(与距离的平方有关)。
聚光灯。
第
4
4
4步,加上了光强衰弱,并且现在能够处理多光源的情况了(这个式子是针对聚光灯的)。
接下来是针对点光源的式子,
I
L
a
I_{La}
ILa是全局环境光,
I
L
a
,
j
I_{La,j}
ILa,j是每一个独立的光源。同理漫反射
I
L
d
,
j
I_{Ld,j}
ILd,j和镜面反射
I
L
s
,
j
I_{Ls,j}
ILs,j也可以独立出来。从上式镜面反射部分可以看出,这是
B
l
i
n
n
−
P
h
o
n
g
Blinn-Phong
Blinn−Phong镜面反射,如果使用
P
h
o
n
g
Phong
Phong镜面反射的话,应该把
N
∗
H
N*H
N∗H改为
V
∗
R
V*R
V∗R,其中
V
V
V是视线,
R
R
R是
L
L
L的反射光线。在这里说一下
R
R
R应该怎么计算:
先看上图,已知
L
ˉ
\bar{L}
Lˉ为
O
P
ˉ
\bar{OP}
OPˉ,其中
O
O
O为交点,
P
P
P为点光源的位置,
N
ˉ
\bar{N}
Nˉ为法线,现在要求反射光线
R
ˉ
\bar{R}
Rˉ,我们可以向上图一样把
R
ˉ
\bar{R}
Rˉ平移上去搞成一个等腰三角形,那么很容易得到
O
H
ˉ
/
2
=
(
L
ˉ
∗
N
ˉ
)
∗
N
ˉ
\bar{OH}/2=(\bar{L}*\bar{N})*\bar{N}
OHˉ/2=(Lˉ∗Nˉ)∗Nˉ(这里再乘
N
ˉ
\bar{N}
Nˉ的原因是前面计算的是两个向量的数量积,结果为一个数值),那么
R
ˉ
=
O
H
−
L
ˉ
=
2
∗
(
L
ˉ
∗
N
ˉ
)
∗
N
ˉ
−
L
ˉ
\bar{R}=OH-\bar{L}=2*(\bar{L}*\bar{N})*\bar{N}-\bar{L}
Rˉ=OH−Lˉ=2∗(Lˉ∗Nˉ)∗Nˉ−Lˉ。
这里讲了
P
h
o
n
g
Phong
Phong插值(法向量插值),先计算顶点的法线,然后对法线进行插值,最后用它进行着色。