计算机图形学(七)——Phong光照模型
- Phong光照反射模型
- 点光源
- 环境光
- 漫反射
- 镜面反射
Phong光照反射模型
Phong反射模型认为来自一个表面的反射由下面三个线性叠加的分量组成:
反射光=环境光+漫反射光+镜面反射光
某一点的光照强度
I
=
I
a
+
I
d
+
I
s
=
L
a
∗
R
a
+
L
d
∗
R
d
+
L
s
∗
R
s
.
I = I_{a}+I_{d}+I_{s} = L_{a}*R_{a}+L_{d}*R_{d}+L_{s} *R_{s}\,.
I=Ia+Id+Is=La∗Ra+Ld∗Rd+Ls∗Rs.
点光源
理想的点光源向所有方向发射的光线强度都相等。
一个位于点P0的点光源:
I
(
p
0
)
=
[
I
r
(
p
0
)
、
I
g
(
p
0
)
、
I
g
(
p
0
)
]
I_(p_0)=[I_r(p_0) 、I_g(p_0)、I_g(p_0)]
I(p0)=[Ir(p0)、Ig(p0)、Ig(p0)]
那么从点p从点光源处接收到的光线强度:
i
(
p
,
p
0
)
=
1
/
∣
p
−
p
0
∣
2
∗
I
(
p
0
)
i(p,p_0)=1/|p-p_0|^2 *I(p_0)
i(p,p0)=1/∣p−p0∣2∗I(p0)
仅仅通过点光源来照明往往会让场景之间的亮暗反差比较大,通过设置环境光,可以减弱由点光源照明引起的过高的对比度。因此会使用一个衰减因子。与距离的平方反比,从而获得柔和的照明效果。
反射模型用4个向量来计算表面上任一点的颜色值,四个向量分别为:
- n :表面在p处的法向量
- v :p指向观察者的向量
- l : p指向扩展光源上任意一点的向量
- r : 沿着向量l的方向入射的光线按照反射定律的出射方向
光源的表示:
[ L i r a L i g a L i b a L i r d L i g d L i b d L i r s L i g s L i b s ] (1) \begin{bmatrix} L_{ira} & L_{iga} & L_{iba} \\ L_{ird} & L_{igd} & L_{ibd} \\ L_{irs} & L_{igs}& L_{ibs} \end{bmatrix} \tag{1} ⎣⎡LiraLirdLirsLigaLigdLigsLibaLibdLibs⎦⎤(1)
rgb代表红绿蓝,ads代表环境光分量、漫反射光分量和镜面反射光分量。
环境光
环境光是一个常数,并且是全局照明或者间接照明的一种模拟。这一项是必需的,因为一个表面的各个部分不可能“看到”光源,但是观察者可以看到光源,而且需要光源来照明。否则的话,物体将被绘制成黑色的。在现实中,这样的光照来自全局照明或间接照明。
计算:
K
a
=
R
a
K_a = R_a
Ka=Ra
所有点的环境光强度都是相同的,反射部分由环境光的反射系数决定,存在三个反射系数,分别为
K
a
r
,
K
a
g
,
K
a
b
.
Ka_{r},Ka_{g},Ka_{b}\,.
Kar,Kag,Kab.这三个反射系数可以不相同,并且满足三个系数均大于0,小于1。
I
a
=
K
a
∗
L
a
I_{a}= K_{a}*L_{a}
Ia=Ka∗La
漫反射
漫反射表面粗糙,到各个方向反射的光线强度都相等。
计算:
K
d
=
R
d
K_d = R_d
Kd=Rd
入射方向和表面存在一定的夹角,因此漫反射光强:
I
d
=
K
d
∗
L
d
∗
(
l
⃗
⋅
n
⃗
)
I_{d}= K_{d}*L_{d}*(\vec{l}\cdot\vec{n})
Id=Kd∗Ld∗(l⋅n)
其中l,n分别代表法向量的方向和光线的方向。
同样可以考虑加衰减因子。
镜面反射
镜面反射为高光,观察者看到的光线强度取决于理想反射光线的方向r和观察者的方向v这两个方向之间的夹角。
计算:
I
s
=
K
s
∗
L
s
∗
c
o
s
a
(
ϕ
)
I_{s}= K_{s}*L_{s}*cos^a(\phi)
Is=Ks∗Ls∗cosa(ϕ)
其中
α
\alpha
α代表高光系数,金属表面大于100小于500,小于100对应高光区域比较大的材质。
同样可以考虑加衰减因子。