Shader "Unity Shaders Book/Chapter 5/PickUpColor"{ PRoperties{ //聲明一個屬性 _Color("Color Tint",Color) = (1.0,1.0,1.0,1.0) } SubShader{ Pass{ CGPROGRAM //表示vert函數包含了頂點著色器代碼 #pragma vertex vert //表示frag函數包含了片園著色器代碼 #pragma fragment frag //在CG代碼中,我們需要定義一個與屬性名稱和類型都匹配的變量 fixed4 _Color; //使用一個結構體來定義頂點著色器的輸入 struct a2v{ //POSITION語意告訴Unity,用模型空間的頂點坐標填充vertex變量 float4 vertex:POSITION; //NORMAL語意告訴Unity,用模型空間的法線方向填充normal變量 float3 normal:NORMAL; //TEXCOORD0語意告訴Unity,用模型的第一套紋理坐標填充texcoord變量 float4 texcoord:TEXCOORD0; }; //使用一個結構體來定義頂點著色器的輸出 struct v2f{ //SV_POSITION語意告訴Unity,pos里包含了頂點在裁剪空間中的位置信息 float4 pos:SV_POSITION; //COLOR0語意告訴Unity,color可以用于存儲顏色信息 fixed3 color:COLOR0; }; v2f vert(a2v v){ //聲明輸出結構 v2f o; //得到裁剪空間的坐標 o.pos=mul(UNITY_MATRIX_MVP,v.vertex); //v.normal包含了頂點的法線方向 其分量范圍在[-1.0,1.0] //下面的代碼把分量范圍映射到[0.0,1.0] //存儲到o.color中傳遞給片元著色器 o.color = v.normal*0.5+fixed3(0.5,0.5,0.5); return o; } fixed4 frag(v2f i):SV_Target{ fixed3 c = i.color; //使用_Color熟悉來控制輸出顏色 c *=_Color.rgb; //將插值后的c顯示到屏幕上 return fixed4(c,1.0); } ENDCG } } }
新聞熱點
疑難解答