//獲取Unity引擎源代碼:加群580392083Shader "Unity Shaders Book/Chapter 6/DiffuseVertexLevel"{PRoperties{_Diffuse("Diffuse",Color)=(1,1,1,1)}SubShader{Pass{Tags{"LightMode"= "ForwardBase"} //LightMode:用于定義該pass在Unity光照流水線中的角色,只有定義了正確的LightMode,我們才能夠得到一些Uniytn內置的光照CGPROGRAM#pragma vertex vert//vert:頂點著色器的名字#pragma fragment frag//frag:片元著色器的名字#include "Lighting.cginc"//為了使用Properties中定義的_Diffuse變量 需要定義一個和該屬性類型相匹配的變量fixed4 _Diffuse;//頂點著色器的輸出或者說是片元著色器的輸入struct a2v{float4 vertex:POSITION;float3 normal:NORMAL;//NORMAL:告訴Unity要把模型頂點的法線信息存儲到normal變量中};//定義一個片元著色器的輸入struct v2f{float4 pos:SV_POSITION;fixed3 color:Color;};//頂點著色器v2f vert(a2v v){v2f o;o.pos = mul(UNITY_MATRIX_MVP,v.vertex); //頂點模型坐標轉換為裁剪坐標fixed3 ambients = UNITY_LIGHTMODEL_AMBIENT.xyz; //獲取環境光 fixed3 wroldNormal = normalize(mul(v.normal,(float3x3)_World2Object));//Page129 把模型的法線轉換為世界坐標的法線 最后進行歸一化fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz); //獲取世界坐標中光的方向fixed3 diffuses = _LightColor0.rgb*_Diffuse.rgb*saturate(dot(wroldNormal,worldLight));//計算漫反射光o.color = ambients + diffuses;return o;}//片元著色器fixed4 frag(v2f i):SV_TARGET{return fixed4(i.color,1.0);}ENDCG}}FallBack "DIFFUSE"}
新聞熱點
疑難解答