Shading mode
只要三角面的代表点(如:三角面中的第一个index点)被光照到什么颜色,就决定了该三角面的整个面的颜色。
某特殊情况,大家应该可以想象到:
- 如果一个很大的三角面中,第一个index点一个聚光灯照到,那么整个大三角面绘制出来的就是光源色
- 如果一个很大的三角面中,几乎被一个聚光灯照射到整个面,但就没照射到代表点(第一个index点),那么整个大三角面绘制出来的光源色就没有这个聚光灯的光源色
与Flat相比,仅仅是三角面所有像素颜色是根据三个顶点的光源色插值算出来的,所以上述Flat shading的某特殊情况,Gouraud shading也有类似的问题(顶点没被关照到时的颜色问题)
相比前两者的shading mode,该模式处理光照数据是在fragment阶段处理的,所以能精确控制到没个像素上,当然开销就比较大,像素处理光照时,每个像素的所在的三角面计算光照时的法线都会插值计算一下(根据三角面三顶点插值),所以每个像素处理出来的光照效果是最平滑的。
- Flat, Gouraud shading 都是在vertex阶段处理光照数据的
- Phong shading是在fragment阶段处理光照数据的
所以如果我们用到了这三种光源处理shading,就按我们需要的风格来选择。
- 工程下载(u3d ver : 2017.4.3f1, vs : vs2017_community)
- 使用Unity打开工程,打开Assets/Scenes下的场景,运行即可
- 运行效果
如何在Unity中分别实现Flat Shading(平面着色)、Gouraud Shading(高洛德着色)、Phong Shading(冯氏着色)