一:告诉Unity我们将在着色器中包含一个顶点函数
CGPROGRAM
#pragma surface surf Lambert vertex:vert
说明:在编译着色器时,unity会自动寻找一个名为vert的顶点函数,如果没有找到,会抛出一个编译错误并提示你是否需要添加一个顶点函数
二:为了使surf()函数能够访问顶点函数vert()传入的值, Input结构体中加入新的属性
struct Input {
float2 uv_MainTex;
float3 vertColor;
};
三:编写简单vert函数,
void vert (inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input,o);
o.vertColor = v.color;
}
说明:函数中我们访问appdata_full 的内置结构体,该结构体是用于存储顶点信息的,我们通过 o.vertColor = v.color 将顶点信息传入Input结构体,从而达到提取顶点颜色信息的目的。
四:使用
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = IN.vertColor.rgb*_MainTint.rgb;
}