编写Shader时,不同阶段,顶点着色器、片元着色器处理的和输出的数据格式都不同。需要使用不同的语义来标识。否则着色器并不知道该数据的意义,以及如何处理。
Shader "Unlit/DataTypeShader"
{
Properties
{
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//应用程序阶段的数据格式
//以下变量囊括了模型的所有数据信息
struct initData
{
float4 vertex:POSITION;//顶点
float4 tangent:TANGENT;//切线
float4 normal:NORMAL;//法线
float4 texcoord:TEXCOORD0; //UV1
float4 texcoord1:TEXCOORD1;//UV2
float4 texcoord2:TEXCOORD2;//UV3
float4 texcoord3:TEXCOORD3;//UV4
fixed4 color:COLOR; //顶点色
}
//几何阶段生成的数据格式
struct verData
{
float4 pos:SV_POSITION;
float2 uv : TEXCOORD0;
float4 color:COLOR0;
}
//光栅化阶段数据格式
//SV_TARGET:指定输出颜色到RenderTarget的语义
//SV_DEPTH:一般情况下,模型的像素深度值在光栅化时会自动插值计算得出,并不需要我们做额外的处理,
//但这并不代表不可以修改它,通过在片断着色器中输出SV_DEPTH语义可以更改像素的深度值。
fixed4 frag():SV_TARGET
{
}
ENDCG
}
}
}