1、Shader
Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。
Unity Shader 不等于真正的Shader,Unity Shader 实际上是指Shaderlab 文件,在硬盘上以.shader 为后缀的一种文件。
2、传统 Shader 与 Unity Shader相比
传统Shader:
仅可以编写特定类型的Shader,如顶点着色器颜色、片元着色器等
无法设一些渲染设置,如是否开启混合、深度测试
需要设置着色器输入和输出,并注意对应关系
Unity Shader:
可以在同一文件内同时包含着色器和片元着色器的代码
通过一行特定指令就可以完成设置
需要在特定语句块中声明一些属性,也可以依靠材质修改这些属性,数据(顶点位置、 uv坐标、法线),也可以直接访问的方法
3、Shader Lab
Shader Lab 作为一种专门Unity Shader 服务语言,我们可以编写Shader Lab 来生成Unity Shader。
4、着色器语言,作为中间语言(Intermediate Language),即交给CPU 可以理解的语言。
Cg(C for Graphic)
HLSL(High Level Shading Language)
GLSL(OpenGL Shading Language)
Cg/HLSL 实际是同一种语言(Microsoft 和NVIDIA合作)
ShaderLab 内部可以嵌套 Cg/HLSL 语言编写着色器代码,需要嵌套在命令CGPROGRAM 和ENDCG 之间,代码如下:
Pass
{
//Pass 的标签和状态设置
CGPROGRAM
//编译指令
#pragma vertex vert
#pragma fragment frag
//CG 代码
ENDCG
//其他设置
}