Unity Shader的ShaderLab语法

Shader简要概括:

1、Shader在可编程渲染流水线中,所处的位置是顶点着色器和片元着色器,这两个部分是高度可编程的。

2、Unity的ShaderLab是Untiy特有的着色器编程语言,他是对Cg/HLSL/的一层封装,是为了简化编程而诞生的。

3、Shader脚本和Material密切相关,和Material一起作用在GameObject上。

4、Unity的着色器包括2种类型,一种是表面着色器,一种是顶点/片元着色器。其中表面着色器其实是对顶点/片元着色器的更高一层封装,它具有简单,易用性,但同时牺牲了控制的灵活性。需要注意的是顶点/片元着色器的“顶点着色器”和“片元着色器”写在同个shader文件里面,两个不连续的过程之所以可以放在一起,也是因为Unity为用户进行了封装。

5、一个Shader可以有多个SubShader,但必须至少有一个SubShader。

6、一个SubShader可以有多个Pass,多个Pass可以实现更加复杂的效果。

Shader结构:

    shader结构包含了:声明,属性(Properties),SubShader,状态设置,标签(tags),Pass,Fallback。

1 声明:例如 shader "Custom/MyShader" {      }   其中"Custom/"表示文件路径 "MyShader"表示这个Shader的名字

2 属性:例如 Properties{  _Int("Int", Int) = 2 }  其中 _Int是在Shader脚本里面的变量名,"Int" 是在Inspector 上显示的变量名, Int 是变量的属性,= 是给这个变量默认值。

除了Int类型外,还有Float、Range(min,max)、Color、Vector、2D、Cube、3D。需要注意的是2D、Cube、3D的属性语句是:

 _2D("2D", 2D) = "white"  {}, 其中"white"是系统内置的纹理,除了“white”还有“black”、“gray”、“bump”。

3 SubShader:SubShader包含了Pass模块,状态设置模块和标签模块。Shader可以包含多个SubShader,每个SubShader的渲染级别不同,渲染过程中会选择最合适的SubShader代码块来执行。

4 状态设置:是ShaderLab提供用于设置渲染状态的指令。常见的状态设置有:

  Cull Back | Cull Front | Cull Off :剔除模式:剔除背面/正面/关闭剔除;

  ZTest Less Greater | ZTest LEqual | ZTest GEqual | ZTest Equal | ZTest NotEqual | ZTest Always :深度测试的判断条件;

  ZWrite On | ZWrite Off :开启/关闭深度测试;

  Blend SrcFactor DstFactor:开启并设置混合模式;

5 标签:是一个键值对,用于描述对象的渲染方式,形式如 Tags{ “Queue” = "Transfparent" }常见的Tags有:

  "Queue" = "Transparent" :控制渲染顺序;

  "RenderType" = "Opaque" :对着色器进行分类,可用于着色器替换功能;

  "DisableBatching" =  "True" :使用模型空间下的顶点动画可能会出现问题,指定该SubShader是否可以批处理;

  "ForceNoShadowCasting" = "True" :该SubShader是否会投射阴影;

  "IgnorProject" = "True" :表示物体是否不受Projector的影响,常用于半透明物体;

  “CanUseSpriteAtlas” = "True" :该SubShader用于精灵时,应该设置为"False";

  "PreviewType" = "Plane" :指明材质面板应该以社么形状来预览模型,一般是球形。

6 Pass:Pass可以包含命名、标签(Tags)、渲染设置。可以用UsePass命令在其他Shader里面调用该Pass。

7 FallBack:当shader里面的所有SubShader都不符合当前运行环境时,便会执行FallBack,它告诉Unity用某个特定的Shader来执行渲染,当然也可以关闭,不使用任何Shader渲染。 例如:FallBack Off / FallBack "Name"。

你可能感兴趣的:(Unity,Shader,Unity,Shader,ShaderLab,语法)