The darkening or coloring of an illustration or diagram with parallel lines or a block of color.
物体之所以会呈现出来,是其材质(Material)对光(或能量)的吸收、反射、折射等处理后的产物(光或能量)。在真实世界满足基本的物理法则。为了能正确渲染物体,需要建立渲染模型(Shading Model)尽可能地去逼近模拟这些法则。
Blinn-Phong Reflection Model
该模型根据“经验”把材质处理过程拆解为:环境光(Ambient)+ 漫反射(Diffuse)+ 高光(Specular)
从理论上来说,我们只要对三角面上的每个点进行“光-材质”的处理,就能得到光线在该点反射到相机的色彩,从而在屏幕像素填充RGB,得到图像。这个过程需要:相机朝向(Viewer direction)\(\vec{v}\)、法线(Surface normal)\(\vec{n}\)、光照方向(Light direction)\(\vec{I}\) 和表面参数(颜色 color、光泽度 shininess)(Surface parameters)。
漫反射(Diffuse Refelection)
Surface color is the same for all viewing directions.
光线经过漫反射,在各个方向均可以观测到物体表面的颜色,且颜色一致。
光是有强度的,漫反射的强度在各个Viewer下并不一样,这里使用 Lambertian(Diffuse)Shading模型进行计算。
其中 \(I\) 为光源强度,\(r\) 为光源到平面点的距离,那么该点的光照强度为 \(I/r^2\)。
\(k_d\) 表示漫反射系数,越大表示强度越高,也就越亮,也就越接近物体本色。如下图:
高光(Specular Reflection)
光线经过平面镜反射,根据法线反射,其反射角方向光线强度最大。即 \(\vec{v} \rightarrow \vec{R}\),越亮。等价于:\(\vec{h} = \frac{\vec{v}+\vec{l}}{\|\vec{v}+\vec{l}\|} \rightarrow \vec{n}\)
那么,高光部分的光照强度为:
\(k_s\) 表示高光反射系数,越大表示强度越高,也就越亮,也就越接近光源本色。\(p\) 控制高光亮块(Reflection lobe)的大小。效果如下图所示:
环境光(Ambient Reflection)
Constant color to account for disregarded illumination and fill in black shadows.
在该经验模型中,环境光是固定的,注意着并不符合现实物理(This is approximate / fake!)。
目的是避免在暗处没有光反射而导致的全黑。
\(k_a\) 表示环境光反射系数,越大表示强度越高,也就越亮,也就越接近环境光 \(I_a\) 本色。
小结
最终我们得到平面一点的光照(能量)强度:
\(\begin{aligned} L & = L_a + L_d + L_s \\ & = k_a I_a + k_d (I/r^2) max(0, \vec{n} \cdot \vec{I} )+ k_s (I/r^2) max(0, \vec{n} \cdot \vec{h} )^p \end{aligned}\)