在定义一些UnityShader中的属性的时,常需要使用到语义。如:声明物体的顶点位置是需要使用PISITION语义,这个语义会告诉计算机,这个变量取到的是物体顶点的位置信息,如果没有语义的话,我们将无法获取到物体的顶点信息,将无法渲染这个物体。下边的代码是将模型各个顶点的法线的颜色付给模型,同时练习一下语义的使用。
Shader "Luoxiaoxiao/Shader_3"{
SubShader{
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//application to vertex
struct a2v{
float4 vertex : POSITION; //把顶点坐标填充给vertex
float3 normal : NORMAL; //把法线填充给normal
float4 texcoord : TEXCOORD0; //第一套纹理坐标
};
struct v2f{
float4 position : SV_POSITION;
float3 nor : COLOR0;//COLOR0这个语义可以自定义 一般存储颜色
};
//坐标的转换和顶点的其他信息
v2f vert(a2v v){
v2f f;
f.position = UnityObjectToClipPos(v.vertex);
f.nor=v.normal;
return f;
}
//将顶点的法线信息传递到片元着色器作为颜色信息
fixed4 frag(v2f f) : SV_TARGET{
return fixed4(f.nor,1);
}
ENDCG
}
}
Fallback"VertexLit"
}