Shader-片元函式呼叫頂點函式
阿新 • • 發佈:2018-12-21
// 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 顏色值,顯示到螢幕上的顏色