本文共 1846 字,大约阅读时间需要 6 分钟。
Shader "Unlit/HalfLambert"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Diffuse("Diffuse Color",Color) =(1,1,1,1) } SubShader { Pass { Tags{ "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "Lighting.cginc" fixed4 _Diffuse; sampler2D _MainTex; float4 _MainTex_ST; struct a2v { float4 vertex :POSITION ; float2 uv:TEXCOORD0 ; float3 normal:NORMAL; }; struct v2f { float4 pos:SV_POSITION; float3 worldNormal:TEXCOORD0; float2 uv:TEXCOORD1; }; v2f vert(a2v v) { v2f o; o.worldNormal = normalize(UnityObjectToWorldNormal(v.normal)); o.uv = TRANSFORM_TEX(v.uv,_MainTex); o.pos = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag(v2f i):SV_Target { fixed3 N = i.worldNormal; fixed3 L = normalize(_WorldSpaceLightPos0); // 半兰伯特公式 float halfLambert = dot(N,L)*0.5+0.5; // 漫反射颜色计算 float3 diffuseColor = _Diffuse.rgb * _LightColor0.rgb * halfLambert; // 漫反射+环境光 float4 mixColor = float4 (diffuseColor,0.5) + UNITY_LIGHTMODEL_AMBIENT; // 纹理采样后的颜色 * 混合计算后的颜色 float4 color = tex2D(_MainTex,i.uv) * mixColor; return color; } ENDCG } }}