本系列文章系学习 唐福幸《Unity ShaderLab 新手宝典》的笔记,包含个人理解,如有错误欢迎批评指出
顶点-片段着色器基础
4.3.5 结构体
之前代码中函数输入输出参数过多,可以使用结构体去精简
void vert(in float4 vertex : POSITION, in float2 uv : TEXCOORD0, out float4 position : SV_POSITION, out float2 texcoord : TEXCOORD0)
{
//函数内容
}
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 position : SV_POSITION;
float2 texcoord : TEXCOORD0;
};
v2f vert(appdata v)
{
v2f oo;
//函数内容
v2f.position = ......
......
return v2f;
}
下面以 4.3.4.3 在shader中使用贴图 的代码为例,进行修改
Shader "Chapter4/NewUnlitShaderTex2"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_MainColor ("MainColor",Color) = (1,1,1,1)
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 position : SV_POSITION;
float2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;//表示uv的缩放和平移
float4 _MainColor;
v2f vert(appdata v)
{
v2f obj;
obj.position = UnityObjectToClipPos(v.vertex);
obj.texcoord = v.uv * _MainTex_ST.xy + _MainTex_ST.zw;//纹理坐标的计算公式
return obj;
}
fixed4 frag(v2f iD): SV_TARGET
{
return tex2D(_MainTex,iD.texcoord) * _MainColor;
}
ENDCG
}
}
}