光照模型

Posted winsons

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了光照模型相关的知识,希望对你有一定的参考价值。

漫反射

兰伯特光照模型

(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{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} ight|})

Blinn-Phone模型为了避免了计算反射方向(hat{r}),引入了一个新的向量(hat{h}),它是通过对(hat{v})(hat{l})取平均再归一化得到的。











以上是关于光照模型的主要内容,如果未能解决你的问题,请参考以下文章

光照模型

✠OpenGL-7-光照

最简单光照模型中的光照方向及其变换

通过使用Unity Shader实现基础光照效果

通过使用Unity Shader实现基础光照效果

OpenGL ES之基础光照模型的实现