高光反射

作者:追风剑情 发布于:2016-9-4 11:06 分类:Shader

这里的高光反射是一种经验模型,也就是说,它并不完全符合真实世界中的高光反射现象。它可用于计算那些沿着完全镜面反射方向被反射的光线,这可以让物体看起来是有光泽的,例如金属材质。

计算高光反射需要知道的信息比较多,如表面法线、视角方向、光源方向、反射方向等。我们假设这些矢量都是单位矢量。

3333333.jpg

在这四个矢量中,我们实际上只需要知道其中3个矢量即可,而第四个矢量——反射方向可以通过其他信息计算得到:

2222.jpg

这样,我们就可以利用Phong模型来计算高光反射的部分:

4444.jpg

其中,mgloss是材质的光泽度(gloss),也被称为反光度(shininess)。它用于控制高光区域的“亮点”有多宽,mgloss越大,亮点就越小。mspecular是材质的高光反射颜色,它用于控制该材质对于高光反射的强度和颜色。clight则是光源的颜色和强度。同样,这里也需要防止v.r的结果为负数。

和上述的Phong模型相比,Blinn提出了一个简单的修改方法来得到类似的效果。它的基本思想是,避免计算反射方向r。为此,Blinn模型引入了一个新的矢量h,它是通过对v和l的取平均后再归一化得到的。即

4444.jpg

然后,使用n和h之间的夹角进行计算,而非v和r之间的夹角。

111.jpg

总结一下,Blinn模型的公式如下:

2222.jpg

在硬件实现时,如果摄像机和光源距离模型足够远的话,Blinn模型会快于Phong模型,这是因为,此时可以认为v和l都是定值,因此h将是一个常量。但是,当v或者l不是定值时,Phong模型可能反而更快一些。需要注意的是,这两种光照模型都是经验模型,也就是说,我们不应该认为Blinn模型是对"正确的"Phong模型的近似。实际上,在一些情况下,Blinn模型更符合实验结果。

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号