Shader "Custom/Shadow"
{
Properties
{
}
SubShader
{
//BasePass,渲染环境光和最重要的平行光
Pass
{
//指明光照模式为前向渲染模式
Tags{ "LightMode" = "ForwardBase" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//确保光照衰减等光照变量可以被正确赋值
#pragma multi_compile_fwdbase
//包含引用的内置文件
#include "Lighting.cginc"
#include "AutoLight.cginc"
//定义输入与输出的结构体
struct a2v
{
float4 vertex : POSITION;
};
struct v2f
{
float4 pos : SV_POSITION;
//存储世界坐标下的法线方向和顶点坐标
//添加内置宏,声明一个用于阴影纹理采样的坐标,参数是下一个可用的插值寄存器的索引值
SHADOW_COORDS(2)
};
//在顶点着色器中,计算世界坐标下的法线方向和顶点坐标,并传递给片元着色器
v2f vert(a2v v)
{
v2f o;
//转换顶点坐标到裁剪空间
o.pos = UnityObjectToClipPos(v.vertex);
//添加另一个内置宏,用于在顶点着色器中计算上一步中声明的阴影纹理坐标
TRANSFER_SHADOW(o);
return o;
}
//在片元着色器中计算光照模型
fixed4 frag(v2f i) : SV_Target
{
//使用内置宏计算阴影值
fixed shadow = SHADOW_ATTENUATION(i);
return SHADOW_ATTENUATION(i);
}
ENDCG
}
//Additional Pass,渲染其他光源
}
Fallback"Specular"
}