Shader "name"
{
Properties
{
//属性
}
SubShader
{
Pass
{
//设置渲染状态和标签
//开始CG代码片段
CGPROGRAM
//编译指令
#pragma vertex vert
#pragma fragment frag
//CG代码
ENDCG
//其他设置
}
//其他pass
}
//其他的SubShader
//如果SubShader都失败了
Fallback “VertexLit”
}
shader "Example/Shader01"
{
SubShader
{
Pass
{
//CG代码片段
CGPROGRAM
//告诉Unity哪个函数包含了顶点着色器代码,哪个函数包含片元着色器代码
#pragma vertex vert
#pragma fragment frag
//POSITION把顶点坐标填入到V中,SV_POSITION顶点着色器输出的是裁剪空间中的坐标
float4 vert(float 4 v : POSITION) : SV_POSITION
{
return mul (UNITY_MATRIX_MVP,v);
}
fixed4 frag() : SV_Target
{
return fixed4(1.0,1.0,1.0,1.0);
}
ENDCG
}
}
}
材质,Shader
游戏内物体(CUBE)
效果
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//输入结构体
struct a2v
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
//输出结构体
struct v2f
{
//裁剪信息
float4 pos : SV_POSITION;
//颜色信息
fixed3 color : COLOR0;
};
v2f vert(a2v v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex.xyz);
//根据法线向量v.normal来改变颜色
o.color = v.normal * 0.5 + fixed3(0.5,0.5,0.5);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
return fixed4(i.color,1.0);
}
ENDCG
}
你别说还蛮好看的
shader "Example/Shader01"
{
//自定义用户面板
Properties
{
_Color ("Color Tint",Color) = (1.0,1.0,1.0,1.0)
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
fixed4 _Color;
struct a2v
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
struct v2f
{
float4 pos : SV_POSITION;
fixed3 color : COLOR0;
};
v2f vert(a2v v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex.xyz);
o.color = v.normal * 0.5 + fixed3(0.5,0.5,0.5);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
fixed3 c = i.color;
//让用户面板中的颜色来决定顶点输出的颜色
c *= _Color.rgb;
return fixed4(c,1.0);
}
ENDCG
}
}
}
ShaderLab属性类型 | CG变量类型 |
---|---|
Color,Vector | float4,half4,fixed4 |
Range,Float | float,half,fixed |
2D | sampler2D |
Cube | samplerCube |
3D | sampler3D |
类型 | 精度 |
---|---|
float | 32位 |
half | 16位,范围:+-60 000 |
fixed | 11位,范围:+-2.0 |
语义 | 描述 |
---|---|
POSITION | 模型空间顶点位置,float4 |
NORAML | 顶点法线,float3 |
TANGENT | 顶点切线,float4 |
TEXCOORD0-7 | 寄存器类似于,存放坐标等。float2或float4 |
COLOR | 顶点颜色,fixed4或float4 |
语义 | 描述 |
---|---|
SV_POSITION | 裁剪空间中的顶点坐标,必要语义 |
COLOR0、COLOR1 | 通常用于输出第一、二组顶点颜色 |
TEXCOORD0-7 | 通常用语输出纹理坐标 |
语义 | 描述 |
---|---|
SV_Target | 输出值存储到渲染目标中,等同于DirectX9中的COLOR |