Shader "Simple2" { Properties { _Diffuse("Diffuse", Color) = (1,1,1,1) _Cutoff("Alpha Cutoff", Range(0, 1)) = 0.5 } SubShader { Blend SrcAlpha OneMinusSrcAlpha ZWrite Off Pass { //指明光照模式为前向渲染模式 Tags{ "LightMode" = "ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag //确保光照衰减等光照变量可以被正确赋值 #pragma multi_compile_fwdbase //包含引用的内置文件 #include "Lighting.cginc" #include "AutoLight.cginc" fixed4 _Diffuse; fixed _Cutoff; //定义输入与输出的结构体 struct a2v { float4 vertex : POSITION; }; struct v2f { float4 pos : SV_POSITION; //添加内置宏,声明一个用于阴影纹理采样的坐标,参数是下一个可用的插值寄存器的索引值 SHADOW_COORDS(0) }; //在顶点着色器中,计算世界坐标下的法线方向和顶点坐标,并传递给片元着色器 v2f vert(a2v v) { v2f o; //转换顶点坐标到裁剪空间 o.pos = UnityObjectToClipPos(v.vertex); //添加另一个内置宏,用于在顶点着色器中计算上一步中声明的阴影纹理坐标 TRANSFER_SHADOW(o); return o; } fixed4 frag(v2f i) : SV_Target { //平行光的衰减值为1 fixed atten = 0.6; //使用内置宏计算阴影值 fixed shadow = SHADOW_ATTENUATION(i); clip(1 - shadow - _Cutoff); return fixed4(_Diffuse.rgb * atten * shadow, _Diffuse.a); } ENDCG } } //Fallback"Specular" }