Lambert光照模型和Gouraud着色以及Phong着色的区别

您所在的位置:网站首页 平面的法线向量和法向量有什么区别 Lambert光照模型和Gouraud着色以及Phong着色的区别

Lambert光照模型和Gouraud着色以及Phong着色的区别

2024-07-14 15:52| 来源: 网络整理| 查看: 265

一、Lambert模型

这里简单的介绍下Lambertian漫反射模型其实就是假设反射光均匀分布在所有方向,反射光照的强度与表面法线和光源方向夹角的余弦值成正比。也就是可以理解成受光面所受的光照都是均匀的,不会因为表面粗糙而有所影响。不能反映粗糙度带来的变化。也就是说无论我们从哪个方向进行观察,物体表面的光照的表现都是不变的。

Lambert对应的公式为:

vResult = vDiffuseMaterial*vDiffuseColor*max (0.0,dot(vNormal * vLightDir));

其中vDiffuseMaterial指的就是物体表面的漫反射材质,vDiffuseColor指的就是漫反射的颜色,后面的通过光源的方向和法线向量去计算顶点上光的强度。因为根据兰伯特模型计算顶点的光照信息,点乘是可能出现负值,所以我们可以让小于0的部分可以理解为看不见,直接取0。

所谓漫反射其实就是指光线被粗糙表面无规则地向各个方向反射的现象。

关于镜面反射的话其实就是当一束平行光触及光滑物体表面时,光线则发生规律性反射,反射后的光线也相互平行,这种规律性反射称为光的单向反射或镜面反射。

加上了漫反射的效果

二、Gouraud着色

在顶点着色器中实现的冯氏光照模型,称为Gouraud着色,这种着色中引入环境光(Ambient),漫射光(Diffuse)和镜面光(Specular).物体表面的材质对这三种光的反射量以及光源本身的强度来影响最终的颜色,这种着色方式是逐个顶点的去计算着色的,计算的过程是放在了顶点着色器中的。就比如说我在顶点着色器中计算出了颜色值,传入到片元着色器中,然后比如说我设置了三个点,三个点都设置了颜色,然后比如说我要填充为三角形。

这样的话三角形片段的颜色然后再进行插值运算。渲染出来。这样的效率其实是高的,因为只是针对每个顶点做一次计算。

但是这种方式在旋转的时候回出现一些闪烁效果如下图所示。原因就是在于三角形之间是不连续的,这种不连续则是由于颜色值在空间中进行的线性插值而导致的,也就是说会根据该像素周围的顶点来插值计算像素的最终颜色,所以会导致三角形之间有缝隙。所以我们可以考虑Phong着色方式。

三、Pong着色(冯氏着色)

冯氏着色是指计算基于每像素的与表面法向量的插值过程,对法向量与坐标进行插值,从而使离散的顶点计算出来的离散的颜色变得连续而光滑,这就是冯氏着色的要义。Pong着色方式和Gouraud的区别其实就在于一个是在片元着色器中对片元进行计算是基于每个像素的光照,一个是在顶点着色器中对每一个顶点进行运算。在这种方式中将不会为每个顶点去传递一个经过计算的颜色值,而是传递两个向量一个是法线的视觉坐标vVaryingNormal,还有一个就是光源的向量vVaryingLightDir。下面这种方式就没有了闪烁的效果,之所以还不太好看,是因为我法线取值的问题。

也就是说可以理解为Gouraud着色是逐个顶点来的,这样的话其实就相当于是计算好每个顶点的颜色,然后在顶点之间进行插值运算,就比如说我们渲染一个实心的三角形,给三角形的每一个点都去设置了颜色,而我们所看到的实心三角形其实就是在颜色空间中由这三个颜色坐标所表示的平面颜色值。

而Phong的逐个像素其实可以理解为从顶点着色器传递过来的法线,只代表了这一个顶点的顶点法线方向,而到了片元着色器处理的阶段,就是这个像素所对应的法线等参数相当于其周围几个顶点进行插值后的结果。我们用这一个像素点对应的法线方向与光照方向进行计算,就可以获得该像素点在光照条件下的颜色值,即进行的是表面法线的插值。之前的是逐个顶点计算好颜色再插值得到结果。

四、半兰伯特光照模型

在之前的计算光照的时候,计算法线方向和光方向的点乘的时候得到的结果有可能是负数,上面采取的方法是如果点乘值为负数,那么就说明该点不会受到光的照射,所以就会将将不受光的位置置为黑色。但是这样其实不好看。而且在现实世界中就算一个物体没有被光直接照射,但是还有间接的光照,也就是说光线从光源发射出来后,经过不止一次的物体反射。还有就是在现实世界中也是存在环境光的,这样的话在没有光的情况下也可以看到物体。

半兰伯特光照模型保证了兰伯特模型计算出来的光照结果大于0,所以可以使没有直接受光面不会被直接置为黑色。也就是把光线的方向向量和法线向量的点乘值*0.5+0.5。

五、总结

一般来说在硬件够强的情况下使用的都是类似于Phong着色这样的高质量的渲染的选项,因为这样渲染出来的视觉质量是非常高的,但是性能会受到一定的影响,而如果在硬件性能较低的情况下还是选择Gouraud着色方式比较好。因为一个着色器性能优化的原则其实就是把尽可能多的处理的过程移出片元着色器,而放入到顶点着色器中。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3