1.什么是着色?
在计算机图形学中,着色指的是对于不同的物体应用不同的材质。我们知道,光的反射我们需要进行进行建模。一个简单的光学模型就是 Blinn-Phong 反射模型(Blinn-Phong Reflection Model)。基本的模型一般会有以下几个部分:漫反射,高光(镜面反射),环境光(在这里我们不考虑环境光反射,我们认为这是一个常量)。
对于任何的着色点,我们定义了:
- 法线 n,是垂直于反射面的线;
- 观察方向v,是着色点和观察点的连线;
- 光照方向l,是着色点和光源的连线。
以上的方向向量都是单位向量。同时我们还需要定义物体表面的参数,例如颜色,亮度。当我们着色时,我们不考虑其他的物体遮挡,因此着色中没有阴影。
2.漫反射
漫反射指的是一束光线会向各个方向均匀地反射。
2.1 Lambert’s 余弦定律
Lambert’s 余弦定律(Lambert’s Cosine Law)说明了漫反射光的能量和入射角度之间的关系。光线反射的能量和光照方向和发现的夹角 cos 值(向量点乘的结果)成正比关系。
3. 点光源
我们认为光源是一个点。在同一时刻光的能量集中在同一个球壳上。根据能量守恒定律我们可以得知,每一个球壳上光能量相同。随着球壳变大,单位面积上的光能量减小。我们定义距离为 1 的光能量为 𝐼。光能量和距离成平方反比关系,距离为 𝑟 的地方的光能量为 𝐼/𝑟2.
4. 漫反射计算公式
漫反射能量的计算公式如下
这里,𝑘𝑑 代表吸收率,如果用 RGB 定义一个向量作为吸收率就可以代表这个反射点的颜色。max(0, n⋅l) 可以把反射光线在反方向的光线过滤掉,这些光线没有贡献。同时,漫发射和观察的方向无关
5.镜面反射
我们认为光滑的平面可以满足基本的镜面反射的物理规律(入射角等于反射角)。当我们的观察方向和反射角方向一直的时候就可以看到高光。我们一般使用半程向量和法线的接近程度来“映射”观察方向和反射角的接近程度。半程向量指的是光源方向和观察方向角平分线上的方向向量。
一边来说高光的颜色 𝑘𝑠 为白色。我们会给 cos 项乘一个指数 𝑝。原因是余弦函数的容忍度很高,但是我们
希望当角度偏离一点点的时候就看不到高光。因此会使用一个指数,一般来说 𝑝 ∈ [100, 200]。
6.环境光照
我们粗略的认为环境中所有点的光照相同,是一个常数。环境光与光源方向,法线方向和观察方向无关。计算公式如下:
7.Blinn-Phong 反射模型
综上所述,Blinn-Phong 反射模型可以表示为: