Shader(着色器)是一段运行在 GPU 上的程序,用来决定物体怎么被画出来。 比如物体是什么颜色、有没有反光、表面是否透明,以及是否出现发光、溶解等效果。
在 Unity 中,可以这样理解它们的关系:
- 模型(Mesh):提供形状,例如一个球。
- 贴图(Texture):提供图案,例如球表面的木纹。
- Shader:规定如何处理光照、贴图和颜色,让球看起来像木头、金属或玻璃。
- 材质(Material):选择一个 Shader,并设置贴图、颜色、光滑度等具体参数,然后赋给物体。
同一个球模型,使用不同 Shader 和材质,就能呈现完全不同的外观。
常见的 Shader 处理阶段有:
| 阶段 | 作用 |
|---|---|
| 顶点着色器(Vertex Shader) | 处理模型顶点的位置,可以实现波浪、树叶摇摆等形变 |
| 片元着色器(Fragment Shader) | 计算表面每个片元的颜色,可以实现光照、透明、渐变等效果 |
“片元”可以先理解成一个准备画到屏幕上的像素候选,它还可能被深度测试等步骤丢弃。
在 Unity 里,你可以直接使用内置 Shader,也可以用 Shader Graph 连接节点来制作效果,或者用 HLSL 写代码。
例如做一个“物体逐渐溶解”的效果,Shader 会根据噪声贴图和溶解参数,丢弃一部分片元,并给溶解边缘加上发光颜色。
Credits:
https://zhuanlan.zhihu.com/p/718015588