如何在表面着色器中使用頂點函數


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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章