UnityShader开发——常见语义与标签

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 标注东西 例如片段着色器使用哪个方法、使用的是哪个着色模型版本

猜你喜欢

转载自blog.csdn.net/qq_28474981/article/details/83662139