什么是着色频率
让我们来观察思考下图:
图中的三个球,首先他们拥有完全相同的顶点数据,这三个球的几何体是一模一样的,可以从球的边界看出来。
那为什么他们渲染出来的效果完全不同呢?
这就是我们要说的着色频率。所谓的着色频率就是说我们要把着色这一操作应用在哪些类型的点上。
不同的着色频率
比如第一个球体,我们将着色点设置在每个平面的中心点上,每个平面都有自己的法线。然后运用布林冯模型计算出一个颜色,然后将整个面都设置为同样的颜色,就得到了第一个球体的着色效果。(着色应用在面上)
第二个球体,我们将着色点设置在每个顶点上,同样,每个顶点都有自己的法线。然后运用布林冯模型计算出各个顶点的颜色。在通过插值计算方法,给每三个顶点围成的三角形的内部进行插值填色,让内部的颜色有个平滑的过渡。(着色应用在顶点上)
第三个球体,着色应用在每一个像素上,通过每三个顶点围成的三角形区域,和顶点的法向量。插值计算出三角形内每个像素的法向量。再进行布林冯模型计算出各个像素的颜色。这样每个像素之间都会有平滑的过渡。(着色应用在像素上)。
对于每个三角面应用着色叫Flat shading
对顶点应用着色叫Gouraud shading
对每一个像素进行着色叫:Phong shading
从上到下,计算开销越来越大。
模型精度对于不同着色频率的影响
我们可以看到,当模型精度够高的情况下,逐面着色也能得到不错的效果。
计算顶点法向量
对于逐顶点和逐像素的的着色频率。我们都需要知道每个顶点的法向量。那么我们该如何计算出这些顶点的法向量呢?
我们知道,比如说在一个球体模型中,这个球表面的任何一个顶点的法向量都会是由球心指向这个顶点的一个向量。但是在实际情况下,很多物体并不是球,这种情况下,我们需要用另外一种方法去求顶点的法向量。
在一个立方体的某一顶点处,周围一定会有三个以上的面,我们就认为这个顶点处的法向量就等同于周围面的法向量去求一个平均就可以了。我们还可以根据周围三角形的面积大小来进行一个加权求平均,会得到一个更好的效果。
这样我们就得到了每个顶点的法向量。
计算像素处的法向量
在我们得到了各个顶点的法向量后。我们就可以根据插值的方法去得到在面内部各个像素位置的一个法向量。
比如图中,左边的法线我们知道,右边顶点的法线我们也知道。就可以插值出在这两个顶点中间的这几个像素的法线。应当是从左边法线向右边发现过度的一个情况。
那么如何进行插值算法,就需要依靠重心坐标,去对一个图形内部各个位置进行插值。