GAMES101-08-1:Shading - Shading Frequencies


问题

前面的Blinn-Phong Model是针对单个shading point进行着色,下一步是针对具体的物体进行着色。

对于同样的几何物体,不同的着色频率会导致不同的结果,如下图:

对真实物理对象着色时的问题

  • 图1是针对一个面进行着色,即在一个面上只着色一次;
  • 图2是针对三角形的顶点进行着色,然后三角形内部通过插值补全其他的着色区域;
  • 图3是针对每个像素进行着色,通过计算三角形顶点的法线方向,然后对每个像素的法线方向进行插值,然后进行着色;

这三种方法,效果是越来越好,但是计算量也是越来越大。

Flat shading: shade each triangle

  • Triangle face is flat — one normal vector
  • Not good for smooth surfaces

Flat shading的效果

Gouraud shading: shade each vertex

  • Interpolate colors from vertices across triangle
    • 插值的内容在后续的课程中提供;
  • Each vertex has a normal vector

Gouraud shading的效果

Defining Per-Vertex Normal Vectors

From the underlying geometry

Best to get vertex normals from the underlying geometry:过于理想;

  • e.g. consider a sphere

利用平面所覆盖的图形计算法线向量

利用邻居进行平均

一般化的方法: infer vertex normals from triangle faces

  • 简单方法: average surrounding face normals; 其中 N_v是顶点的法线向量,$N_i$ 是该顶点相邻的三角形的法线向量。计算完成后,需要将得到的法线向量归一化,因为只关心方向。

$$
N_v = \frac{\sum_{i}{}N_i}{\Vert \sum_{i}{}N_i \Vert}
$$

计算Vertex的法线向量

  • 加权平均:按照三角形面积进行法线向量的平均;

Phong shading: shade each pixel

  • Interpolate normal vectors across each triangle
  • Compute full shading model at each pixel
  • Not the Blinn-Phong Reflectance Model:与Phong shading均为同一个人提出的;

Phong shading的效果

Defining Per-Pixel Normal Vectors

根据之前得到了三角形顶点的法线向量,可以利用顶点的法线向量进一步得到每个像素的向量,这里需要利用 Barycentric interpolation of vertex normals 来完成,后续会介绍。

对比

这三种方法不一定是哪种一定最好,如下图:当物体的顶点很多时,或者三角形很密集时,使用简单的Face shading效果也不错。

三种着色频率效果的对比


文章作者: alex Li
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 alex Li !
  目录