Unity Shader - Flat, Gouraud, Phong Shading

匿名 (未验证) 提交于 2019-12-03 00:43:02

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(冯氏着色)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!