71 lines
1.5 KiB
Plaintext
Raw Permalink Normal View History

2025-05-18 01:04:31 +08:00
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"
}