Phong模型
环境光
光线在场景中经过复杂的传播后,形成了弥漫于整个空间的光线,称为环境光。
-
特点
照射在物体上的光来自周围各个方向,又均匀地向各个 方向反射。 -
近似表示
I e = I a ∗ K a I_e=I_a*K_a Ie=Ia∗Ka
I a 为 环 境 光 强 度 , K a 为 物 体 对 环 境 光 的 反 射 系 数 I_a为环境光强度,K_a为物体对环境光的反射系数 Ia为环境光强度,Ka为物体对环境光的反射系数
理想漫反射(Diffuse Reflection )
当光线辐射到一个粗糙的、无光泽的表面上时,光线沿各个方向都作相同的反射,从任何角度看这种表面都有相同的亮度。
用lambert余弦定理可以算出强度值,就是入射光强度 漫反射系数 点光源方向与平面法向夹角三者乘积
可以看到漫反射的特点,只与入射角有关,与视点无关。
如果把L和N规格化为单位矢量,则
c
o
s
θ
=
L
⋅
N
cos\theta=L\cdot N
cosθ=L⋅N就得到
I
d
=
I
p
K
d
∗
(
L
⋅
N
)
I_d=I_pK_d*(L\cdot N)
Id=IpKd∗(L⋅N)
可能又多个点光源,由于漫反射光强只跟入射光有关,将这几个点光源的漫反射光强计算出来直接相加就好了。
镜面反射(Specular Reflection)
镜面反射遵循反射定律。反射光位于表面法矢两侧。
- 对于理想的高光泽度反射面,反射角等于入射角时,光线才会被反射。
- 非理想的反射面,只要其表面是光滑的,在点光源的照射下,也会产生一块特别亮的区域,称为高光点
总之可以看到,不同于漫反射,镜面反射的效果和观察者所在位置非常相关了。
综合
Phong模型就是将环境光、理想漫反射光强、镜面反射光强相加。
Phong模型的实现
近似计算
近似之后高光区域会变大,通过修改n的值来修正。
多个光源:
光的衰减
在同一光源的照射下,距光源较近的景色看起来会亮一些,而距光源较远的景物看起来会暗一些。衰减因子如果用1/d^2效果不好,因为变化太快。用下面这个函数
在漫反射和镜面反射公式中分别加入这个衰减函数。
选择颜色模型
如果选择rgb模型,可以将环境光,漫反射光和镜面反射光都分解为r g b三个分量。光强和反射系数都可以分解为这三个分量
按三个分量就可以分别计算三次
基于Phong模型模拟平行光,点光源和聚光灯效果:
平行光:不加衰减因子
点光源:保留衰减因子
聚光灯:光锥的内圆锥和外圆锥
全局光照
又称GI(Global Illumination)或Indirect Illumination间接光照。考虑场景中来自光源以及经过其他物体反射后的光照。因此 全局光照=直接光照+间接光照
间接光照有透射光和反射光两种,涉及到透射光就要用whitted光投射模型了。
要加上投射光和反射光两个部分,
光照模型的发展阶段如下
全局光照不同的实现流派
光线追踪算法
定义:追踪光线路径,然后模拟光线与虚拟对象相互作用的方式。
主要思想:从视点向成像平面上的像素发射光线,找到与该光线相交的最近物体的交点。
如果该点处的表面是漫反射表面,则计算光源直接照射该点产生的颜色。
如果该点处表面是镜面或折射面,则继续向反射或折射方向跟踪另一条光线。
如此递归下去,直到达到结束条件(光线与光源相交、逃逸或者达到设定的最大递归深度)
存在的问题
1)表面属性单一:完全看不见折射光?完全没有镜面反射?
2)漫反射作为了结束条件
改进
通过模型的修正来缓解这两个问题
改进后的算法变为:从视点发出一条光线,光线与物体表面相交时根据表面的材质属性继续采样一个方向。(由于表面的多样性可能有多个采样方向)
新的问题:计算量很大
可能的解决方法:蒙特卡洛方法 得到的就是路径追踪算法