Shader "Unlit/shader01"
{
Properties
{
_MyColor("color", Color) = (1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 vertex : SV_POSITION;
};
fixed4 _MyColor;
v2f vert (appdata v)
{
v2f o;
//o.vertex = UnityObjectToClipPos(v.vertex);
//o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
return _MyColor;
}
ENDCG
}
}
}
对应编辑器里面可以编辑的属性值,需要在shader里面以及在Properties里面声明,如上面的_MyColor,除了color类型还可以使用别的类型
一个Shader中可以有多个SubShader,但只执行第一个可执行的SubShader。
Tags语法格式如下:
Tags { “TagName1” = “Value1” “TagName2” = “Value2” }
这里重要注意:这种Tag有两种,一种是SubShader Tags,一种是Pass Tags, 也就是说Pass中Tags会覆盖SubShader里面的Tags,也可以Pass中不定义,直接使用SubShader里面的Tags,是一个继承关系
可参考 tags
表示该物体渲染顺序,如透明物体属于Transparent队列,非透明物体属于Geometry队列,这里就是Geometry队列先进行渲染

如透明物体的话就是用 Tags { "Queue" = "Transparent" }
这里注意还可以使用运算符 Tags { "Queue" = "Transparent+10" } ,表示这个material的渲染顺序是3010
脚本中可以设置该值如 material.renderQueue=具体数值

如透明物体的话就是用 Tags { "RenderType"="Transparent" }
暂时没用到,可不用,么感觉有啥用处
参考 https://blog.csdn.net/wpapa/article/details/51319434
设置该值后,如LOD 100
着色器会找到第一个<= Shader.maximumLOD 这个subShader执行,设置方式为shader.maximumLOD = 300;
SubShader里面包换的基本的Pass命令包含渲染状态设置命令的列表。
在Shader的使用中会发现有时候只进行一次渲染是不够的,还要在它的基础上在加上一次或者多次才行,这就是多Pass的渲染的由来,如后处理的使用,就是基于这个
这里重要注意:Pass里面被定义的语句在SubShader也可以被定义(要不然代码会巨长无比,也会有很多重复的部分)
在所有SubShader的后面可定义 Fallback。基本上就是说,如果没有任何子着色器能够在此硬件上运行,则尝试使用另一个着色器中的子着色器
如使用一个备选shader
Fallback "name"
或者直接关闭
Fallback Off