光照模型
漫反射
兰伯特光照模型
\(c_{diffuse} = (c_{light} \cdot m_{diffuse})max(0,\hat{n} \cdot \hat{l})\)
\(m_{diffuse}\)是材质的漫反射颜色
\(c_{light}\)是光源颜色
\(\hat{n}\)是表面法线的单位向量
\(\hat{l}\)是指向光源的单位向量
把\(\hat{n} \cdot \hat{l}的结果截取至0是因为要防止物体被从后面来的光源照亮\)
半兰伯特光照模型
\(c_{diffuse} = (c_{light} \cdot m_{diffuse})(0.5(\hat{n} \cdot \hat{l}) + 0.5)\)
通过这样的方式,我们可以把\(\hat{n} \cdot \hat{l}\)的结果范围从[−1,1]映射到[0,1]范围内。也就是说,对于模型的背光面,在原兰伯特光照模型中点积结果将映射到同一个值,即0值处;而在半兰伯特模型中,背光面也可以有明暗变化,不同的点积结果会映射到不同的值上。
需要注意的是,半兰伯特是没有任何物理依据的,它仅仅是一个视觉加强技术。
高光反射
Phone光照模型
\(c_{specular} = (c_{light} \cdot m_{specular})max(0, \hat{v} \cdot \hat{r})^{m_{gloss}}\)
\(\hat{r} = 2(\hat{n} \cdot \hat{l})\hat{n} - \hat{l}\)
\(m_{gloss}\)是材质的光泽度,也被称为反光度,它用于控制高光区域的“亮点”有多宽,\(m_{gloss}\)越大,亮点就越小。
\(m_{specular}\)是材质的高光反射颜色,用于控制该材质对于高光反射的强度和颜色。
\(\hat{v}\)是视线方向。
\(\hat{r}\)是光线的反射方向。
Blinn-Phone光照模型
\(c_{specular} = (c_{light} \cdot m_{specular})max(0, \hat{n} \cdot \hat{h})^{m_{gloss}}\)
其中:
\(\hat{h} = \frac{\hat{v} + \hat{l}}{\left|\hat{v} + \hat{l}\right|}\)
Blinn-Phone模型为了避免了计算反射方向\(\hat{r}\),引入了一个新的向量\(\hat{h}\),它是通过对\(\hat{v}\)和\(\hat{l}\)取平均再归一化得到的。