计算机图形学中的 Phong 模型(镜面反射)
先决条件 -基本照明模型
Phong 反射模型:
当我们观察发光的发光表面时,例如闪闪发光的表面、抛光的金属片、苹果等,我们在某些观察点位置发现了一种亮点。这种现象称为镜面反射。
看下图:
N = Normal vector
L = Point light source
V = Viewing direction
R = is representing the unit vector directed towards the ideal specular reflection
∅ = Viewing angle relative to the specular reflection direction R.
θ = Angle made by L & R with N.
对于理想的反射面(完美的镜子),入射光仅在镜面反射方向上反射。因此,在这种情况下,当向量 V & R 重合(视角(∅=0))时,我们可以看到反射光。
亮面的镜面反射范围较窄,而暗面的反射范围较宽。由 Phong Bui Tuong 发明的用于计算镜面反射范围的经验模型也称为Phong 镜面反射模型。该模型设置镜面反射成正比的COS N s个(∅)的强度。角度∅的范围可以在0≤∅≤1之间。其中n s是镜面反射参数,其值由要显示的表面类型决定。更亮(有光泽)表面的n s值可以是 100 或更多,而对于暗淡表面,其值是 1 或小于 1。镜面反射的强度取决于表面的物体(材料)属性和光的角度入射光,以及其他因素,例如入射光的偏振和颜色。
我们可以通过对每个表面使用光谱反射函数W(∅) 的镜面反射来控制光的强度变化。其中∅的值在0 ≤ ∅ ≤ 1的范围内。一般来说, W(∅)会随着入射角的增加而增加,在 ∅=90* W(90*)=1 处,在这种情况下,所有入射到材料表面的光被反射。因此,使用光谱反射函数W(∅) 我们可以将Phong 镜面反射模型写为:
对于许多不透明的材料表面,镜面反射对于所有入射角几乎都是恒定的。因此,在这种情况下,我们可以用常数系数 (Ks)替换W(∅) ,并且对于每个表面,该值位于0 和 1之间:
Since, V & R are unit vectors so, |V|=|R|=1 :
V * R = |V|*|R|*cos(θ) ,
V * R = cos(θ)
所以,我们可以把前面的等式写成:
这里, R可以通过L在法向量方向上的投影计算得到:
R + L = (2*N.L)*N
So, using the above equation specular-reflection vector is obtained,
R = (2*N.L)*N - L.
Phong 模型中的组合环境反射、漫反射和镜面反射可以表示为具有多个光源的以下等式:
因此,对于单点光源,我们可以将照明表面上一点的组合反射和镜面反射建模为:
并且,对于n 个点光源,方程将是: