一:告訴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;
}