Unity Shader 结构体类型
Dec 22, 2022
a2v、v2f、f2a、appdata_base、appdata_tan、appdata_full
初学shader,看到别人的代码,肯定会看到a2f、v2f等结构体,这里来详细解释一下。
首先 a2v v2f是结构体struct,并且是顶点函数(vertex)和片元函数(frag)的相互转换。
a2v(从应用程序传递到顶点函数)
a--应用程序 (application),2--to,v--顶点函数(vertex)。
struct a2v // 命名表示从应用程序传递到顶点函数,application to vertex
{
float4 vertex : POSITION; // 告诉Unity把模型空间下的顶点坐标填充给vertex属性
float3 normal : NORMAL; // 告诉Unity把模型空间下的法线方向填充给normal属性
float4 texcoord : TEXCOORD0; // 告诉Unity把第一套纹理坐标填充给texcoord属性
float4 tangent : TANGENT; // 告诉Unity把模型空间下的切线向量填充给tangent属性
float4 texcoord0 : TEXCOORD0;// 告诉Unity第一套贴图uv坐标填充给texcoord0属性(共4套)
float4 color : COLOR; // 告诉Unity顶点色填充给color属性
};
v2f(从顶点函数传递到片元函数)
v--顶点函数(vertex),2--to,f--片元函数(frag)。
struct v2f //命名表示从顶点函数传递到片元函数,vertex to fragment
{
float4 position:SV_POSITION; //转换为裁剪空间的顶点坐标
float4 color:COLOR;
}
f2a(片元函数应用到系统着色)
f--片元函数,2--to,a--application。
fixed4 frag(v2f IN) : SV_Target //应用到系统着色,SV_TARGET 颜色值,显示到屏幕上的颜色
{
return fixed4(1,1,1,1);
}
appdata_base
struct appdata_base {
float4 vertex : POSITION; //顶点位置
float3 normal : NORMAL; //法线
float4 texcoord : TEXCOORD0;//纹理坐标
UNITY_VERTEX_INPUT_INSTANCE_ID
};
appdata_tan
struct appdata_tan {
float4 vertex : POSITION; //顶点坐标位置
float4 tangent : TANGENT; //切线
float3 normal : NORMAL; //法线
float4 texcoord : TEXCOORD0; //第一纹理坐标
UNITY_VERTEX_INPUT_INSTANCE_ID
};
appdata_full
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0; //第一纹理坐标
float4 texcoord1 : TEXCOORD1; //第二纹理坐标
float4 texcoord2 : TEXCOORD2; //第三纹理坐标
float4 texcoord3 : TEXCOORD3; //第四纹理坐标
fixed4 color : COLOR;//顶点颜色
UNITY_VERTEX_INPUT_INSTANCE_ID
};