1. 程式人生 > >Shader-片元函式呼叫頂點函式

Shader-片元函式呼叫頂點函式

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "LXC/03 StructShader"
{
	SubShader
	{
		Pass{
		CGPROGRAM
		
#pragma vertex vert		
#pragma fragment frag

		struct a2v {	//application to vertex
		float4 vertex:POSITION;		//把模型空間下的座標填充給vertex
		float3 normal:NORMAL;		//把模型空間下的法線方向填充給normal
		float4 texcoord:TEXCOORD0;	//把第一套紋理座標填充給texcoord
		};
		
		struct v2f {
		float4 position:SV_POSITION;
		float3 temp:COLOR0;		//這個語義可以自己定義,一般儲存顏色,把法線作為顏色傳遞進去
		};
			
		v2f vert(a2v v) {
		v2f f;	
		f.temp = v.normal;
		f.position = UnityObjectToClipPos(v.vertex);		//f.position = mul(UNITY_MATRIX_MVP,v.vertex);
		return f;
		}


		fixed4 frag(v2f f) :SV_Target{
		return fixed4(f.temp,1);
	}
		ENDCG
	}
	}
		Fallback "VertexLit"
}

從應用程式傳遞到頂點函式的語義有哪些a2v POSITION 頂點座標(模型空間下的) NORMAL 法線( 模型空間下) TANGENT 切線(模型空間) TEXCOORD0 ~n 紋理座標 COLOR 頂點顏色

從頂點函式傳遞給片元函式的時候可以使用的語義 SV_POSITION 剪裁空間中的頂點座標(一般是系統直接使用) COLOR0 可以傳遞一組值 4個 COLOR1 可以傳遞一組值 4個 TEXCOORD0~7 傳遞紋理座標

片元函式傳遞給系統 SV_Target 顏色值,顯示到螢幕上的顏色