漫反射
参数:
观测方向 \(v\)
法线 \(n\)
光线方向 \(l\)
着色时是没有阴影的
光均匀地向四面八方散射,所有观察方向的表面颜色都相同。
光线照到表明的角度不同时,反射的亮度也不同,所以用公式 \(\overrightarrow{l}\cdot \overrightarrow{n}\) 来计算
光线衰弱
假设单位方向上单位面积的光照强度为\(I\),则距离为r时的光照强度为 \( \frac{I}{r^2} \)
漫反射模型
\(L_d\) 漫反射光
\(k_d\) 漫反射系数(颜色)
\(\frac{I}{r^2}\)着色点的光照强度
\(\overrightarrow{l}\cdot \overrightarrow{n}\) 着色点接受能量
\(L_d=k_d(\frac{I}{r^2})max(0,\overrightarrow{l}\cdot \overrightarrow{n})\)
镜面反射
当观测方向\(v\)接近于反射方向\(R\)时,镜面反射强度会增大。
布林-冯模型
镜面反射的强度和观测方向\(v\)与反射方向\(R\)的角度有关,但是求出反射方向\(R\)很困难,运算量大,所以布林-冯模型采用光线方向\(l\)和观测方向\(v\)之间的半程向量来代替。
\(h=bisector(v,l)=\frac{\overrightarrow{v}+\overrightarrow{l}}{|\overrightarrow{v}+\overrightarrow{l}|}\)
\(L_s\) 镜面反射光
\(k_s\) 镜面反射系数
\(L_s=k_s(\frac{I}{r^2})max(0,cos\alpha)^p\)
\(=k_s(\frac{I}{r^2})max(0,\overrightarrow{n}\cdot \overrightarrow{h})^p\)
注意到,\(max(0,\overrightarrow{n}\cdot \overrightarrow{h})^p\)乘了p次方,是因为\(cos\alpha\)的镜面反射范围过大,会使高光面积过大。
增加p会使反射波瓣变窄。
图中展示的是\(L_d+L_s\)。当\(k_s\)和\(p\)改变时的高光变化。
环境光
任何物体的任何面,即便没有被光源直接照到,但其他物体反射过去的光仍然可能打到该物体上。由于环境光来自四面八方,计算非常复杂,所以这里大胆假设每个地方接收到的环境光强度完全相同。
\(L_s\) 环境光
\(k_s\) 环境光系数
\(L_a=k_a I_a\)
布林-冯反射模型
布林-冯反射=环境光+漫反射光+高光
\(L=L_a+L_d+L_s\)
\(=k_a I_a+k_d(\frac{I}{r^2})max(0,\overrightarrow{n} \cdot \overrightarrow{l})+k_s(\frac{I}{r^2})max(0,\overrightarrow{n} \cdot \overrightarrow{h})^p\)