Gouraud Shading(高洛德着色法)和其优缺点详解


Gouraud是一种插值方法,Gouraud着色法是计算机图形学中的一种插值方法,可以为多边形网格表面生成连续的明暗变化。实际使用时,通常先计算三角形每个顶点的光照,再通过双线性插值计算三角形区域中其它像素的颜色。

在图形处理器流水线中,一般有几种着色方法:

固定着色(Pure shading, Constant shading)

按照人工的方法给定片元着色器颜色值

恒定着色(Flat shading)

通过一定方法,计算出每一个多边形的最终颜色,没有变化和插值

多用于实现卡通风格

《Minecraft》就是用的恒定着色

高洛德着色(Gouraud Shading)

通过计算顶点颜色,然后通过插值方法完成着色,在一个面上面也就可以有不同的颜色了

每一个顶点做一次光照计算,然后每一个三角形根据组成它的三角形进行插值给片段进行着色,计算非常快

《Final Fantasy VII》就是用的Gouraud Shading

冯氏着色(phone Shading)

包含ambient,diffuse,specular部分

每一个图元逐像素的法线进行光照计算,计算量较大,但是效果最好

 高洛德着色(Gouraud Shading)的优缺点

优点:只计算顶点的光照,计算快

缺点有下面几个:

高光区丢失:

如果在多边形的中心有高光,而且这个高光没有扩散到该多边形的任何顶点,使用Gouraud着色法就不会渲染出任何效果,如下图周围的顶点没有得到这个计算值,这块也就不可能产生高光效果,不过可以通过提高顶点数去解决

高光区不正常:

另外,而如果正好是多边形的顶点上有高光,那么这个点上的高光是正确的,但插值会导致高光以很不自然的形式扩散到相邻的多边形上,这个大大的五角形:

亮度信息不对: 

假设有这么一个场景,下面有个三角形片元,在片元上方正好有一个光源

 我们把三角形平着倾斜过来:

根据光照公式的点乘部分计算 

 

C点的光照强度等于A点的光照强度和B点光照强度的插值 

当a和b的夹角越小的时候,得到的光照强度越大,也就是C点的光照越强

但当把光源向下移动的时候:

 a和b的夹角更大了,这就意味着A和B的光照强度降低,所以根据A点和B点得到C点的光照也会减弱

光离面越近,这个面就会暗

这明显是个错误结果,但是随着面数的增加或者使用曲面细分着色器对面进行曲面细分,则可以减少它的缺点

猜你喜欢

转载自blog.csdn.net/qq_36653924/article/details/130976716
今日推荐