1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| Shader "Custom/LambertByVertex" { Properties { _Color("Color", Color) = (1, 1, 1, 1) _MainTex("InputTex", 2D) = "white" {} }
SubShader { // Blend One Zero Pass { // Name "LambertByVertex"
CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" //新的引用 #include "Lighting.cginc" //返回结构体 //引用结构体 appdata_full vert (appdata_full v) { //模型顶点坐标转屏幕坐标 v.vertex = UnityObjectToClipPos(v.vertex); //获取法线坐标并转换成世界坐标下的法线坐标 float3 worldNormal = UnityObjectToWorldNormal(v.normal); //世界坐标下的光线坐标 //单位化坐标 //获取世界坐标下的光线坐标 float3 worldLight = normalize(_WorldSpaceLightPos0.xyz); //上面的公式 float3 diffuse = _LightColor0.rgb * v.color.rgb * max(0, dot(worldNormal, worldLight)); //算出的值给颜色 v.color = float4(diffuse, 1); return v; } float4 frag (appdata_full v) : SV_Target { //输出颜色 return v.color; } ENDCG } } }
|