71 lines
1.5 KiB
Plaintext
71 lines
1.5 KiB
Plaintext
![]() |
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"
|
||
|
}
|