1.模板
Shader “ShaderName”{
Properties{
}
SubShader{
}
Fallback “VertexLit”
}
2.Properties语句块
属性类型 | 默认值的定义语法 | 例子 |
---|---|---|
Int | number | _Int("Int",Int)=2 |
Float | number | _Float("Float",Float)=1.5 |
Range(min,max) | number | _Range("Range",Range(0.0,5.0))=3.0 |
Color | (number,number,number,number) | _Color("Color",Color)=(1,1,1,1) |
Vector | (number,number,number,number) | _Vector("Vector",Vector)=(2,3,6,1) |
2D | "defaultTexture" {} | _2D("2D",2D)="" {} |
Cube | "defaultTexture" {} | _Cube("Cube",Cube)="white" {} |
3D | "defaultTexture" {} | _3D("3D",3D)="black" {} |
3.SubShader 语义块
子着色器
SubShader{
[Tag]
[RenderSetup]
Pass{
}
}
状态名称 | 设置指令 | 解释 |
---|---|---|
Cull | Cull Back |Front|Off | 是指剔除模式,剔除背面/正面/关闭剔除 |
ZTest | ZTest Less Greater|LEqual|GEqual|Equal|NotEqual|Always | 设置深度测试时使用的函数 |
ZWrite | ZWrite On|Off | 开启/关闭深度写入 |
Blend | Blend SrcFactor DstFactor | 开启并设置混合模式 |
在SubShader上设置时,会应用到所有Pass
SubShader的标签类型
标签类型 | 说明 | 例子 |
---|---|---|
Queue | 控制渲染顺序,指定该物体属于哪一个渲染队列,通过这种方式可以保证所有的透明物体可以在所有不透明物体后面被渲染,我们也可以自定义使用的渲染队列来控制物体的渲染顺序 | Tas{“Queue”=“Transparent”} |
RenderType | 对着色器进行分类,例如这是一个不透明的着色器或是一个透明的着色器等,这可以被用于着色器替换功能。 | Tags{“RenderType”=“Opaque”} |
DisableBatching | 一些SubShader在使用Unity的批处理功能时会出现问题,例如使用了模型空间下的坐标进行顶点动画。这时可以通过该标签来直接指明是否该SubShader使用批处理 | Tags{“DisableBatching”=“True”} |
ForceNoShadowCasting | 控制使用该SubShader的物体是否会投射阴影 | Tags{“ForceNoShadowCasting”=“true”} |
IgnoreProjector | 如果该标签为“true”,那么使用该SubShader的物体将不会受Projector的影响,通常用于半透明物体 | Tags{“IgnoreProjector”=“true”} |
CanUseSpriteAtlas | 当该SubShader是用于精灵(Sprite)时,该标签设为“False” | Tags{“CanUseSpriteAtlas”=“False”} |
PreviewType | 指明材质面板将如何预览该材质,默认情况下,材质将显示为一个球形,我们可以通过将该标签的值设为“Plane”“SkyBox”来改变预览类型 | Tags{“PreviewType”=“Plane”} |
Level of Detail (LOD),用来定义不同的性能的显卡所对应的子着色器
4.Pass语义块
Pass{
[Name]
[Tags]
[RenderSetup]
//Other code
}
标签类型 | 说明 | 例子 |
---|---|---|
LightMode | 定义该Pass在Unity的渲染流水线中的角色 | Tags{“LightMode”=“ForwardBase”} |
RequireOptions | 用于指定当满足某些条件时才渲染该Pass,它的值是一个由空格分隔的字符串。目前,Unity支持的选项有:SoftVegetation | Tags{“RequireOptions”=“SoftVegetation”} |
5.
CGPROGRAM 开始CG代码
ENDCG 结束CG代码
#pragma 标注东西 例如片段着色器使用哪个方法、使用的是哪个着色模型版本