漫反射

参数:
观测方向 [latex]v[/latex]
法线 [latex]n[/latex]
光线方向 [latex]l[/latex]

着色时是没有阴影的

光均匀地向四面八方散射,所有观察方向的表面颜色都相同。

光线照到表明的角度不同时,反射的亮度也不同,所以用公式 [latex]\overrightarrow{l}\cdot \overrightarrow{n}[/latex] 来计算

光线衰弱

假设单位方向上单位面积的光照强度为[latex]I[/latex],则距离为r时的光照强度为 [latex] \frac{I}{r^2} [/latex]

漫反射模型

[latex]L_d[/latex] 漫反射光
[latex]k_d[/latex] 漫反射系数(颜色)
[latex]\frac{I}{r^2}[/latex]着色点的光照强度
[latex]\overrightarrow{l}\cdot \overrightarrow{n}[/latex] 着色点接受能量

[latex]L_d=k_d(\frac{I}{r^2})max(0,\overrightarrow{l}\cdot \overrightarrow{n})[/latex]

镜面反射

当观测方向[latex]v[/latex]接近于反射方向[latex]R[/latex]时,镜面反射强度会增大。

布林-冯模型

镜面反射的强度和观测方向[latex]v[/latex]与反射方向[latex]R[/latex]的角度有关,但是求出反射方向[latex]R[/latex]很困难,运算量大,所以布林-冯模型采用光线方向[latex]l[/latex]和观测方向[latex]v[/latex]之间的半程向量来代替。

[latex]h=bisector(v,l)=\frac{\overrightarrow{v}+\overrightarrow{l}}{|\overrightarrow{v}+\overrightarrow{l}|}[/latex]

[latex]L_s[/latex] 镜面反射光
[latex]k_s[/latex] 镜面反射系数

[latex]L_s=k_s(\frac{I}{r^2})max(0,cos\alpha)^p[/latex]
[latex]=k_s(\frac{I}{r^2})max(0,\overrightarrow{n}\cdot \overrightarrow{h})^p[/latex]

注意到,[latex]max(0,\overrightarrow{n}\cdot \overrightarrow{h})^p[/latex]乘了p次方,是因为[latex]cos\alpha[/latex]的镜面反射范围过大,会使高光面积过大。
增加p会使反射波瓣变窄。

图中展示的是[latex]L_d+L_s[/latex]。当[latex]k_s[/latex]和[latex]p[/latex]改变时的高光变化。

环境光

任何物体的任何面,即便没有被光源直接照到,但其他物体反射过去的光仍然可能打到该物体上。由于环境光来自四面八方,计算非常复杂,所以这里大胆假设每个地方接收到的环境光强度完全相同。

[latex]L_s[/latex] 环境光
[latex]k_s[/latex] 环境光系数

[latex]L_a=k_a I_a[/latex]

布林-冯反射模型

布林-冯反射=环境光+漫反射光+高光

[latex]L=L_a+L_d+L_s[/latex]
[latex]=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[/latex]



循之际,如星夜般的幻想。