shaoxiadiablo/Assets/AGame/Res/Shaders/ShadowProject.shader
2025-05-18 01:04:31 +08:00

69 lines
1.6 KiB
Plaintext

Shader "UnityEffects/ShadowProject" {
Properties{
_ShadowTex("ShadowTex", 2D) = "gray" {}
_bulerWidth("BulerWidth", float) = 1
_shadowfactor("Shadowfactor", Range(0,1)) = 0.5
_ShadowMask("ShadowMask",2D) = "white"{}
}
SubShader{
Tags { "Queue" = "AlphaTest+1" }
Pass {
ZWrite Off
ColorMask RGB
Blend DstColor Zero
Offset -1, -1
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
float4 pos:POSITION;
float4 sproj:TEXCOORD0;
};
float4x4 unity_Projector;
sampler2D _ShadowTex;
sampler2D _ShadowMask;
//half4 _ShadowTex_TexelSize;
//float _bulerWidth;
float _shadowfactor;
v2f vert(float4 vertex:POSITION) {
v2f o;
o.pos = UnityObjectToClipPos(vertex);
o.sproj = mul(unity_Projector, vertex);
return o;
}
half4 frag(v2f i) :COLOR{
half4 uv4 = UNITY_PROJ_COORD(i.sproj);
half shadowColR = tex2Dproj(_ShadowTex, uv4).r;
half maskColA = tex2Dproj(_ShadowMask, uv4).r;
half a = (shadowColR * maskColA);
//blur来柔化边缘
//a += tex2D(_ShadowTex, uv + _ShadowTex_TexelSize.xy * _bulerWidth * float2(1,0)).a;
//a += tex2D(_ShadowTex, uv + _ShadowTex_TexelSize.xy * _bulerWidth * float2(0,1)).a;
//a += tex2D(_ShadowTex, uv + _ShadowTex_TexelSize.xy * _bulerWidth * float2(-1,0)).a;
//a += tex2D(_ShadowTex, uv + _ShadowTex_TexelSize.xy * _bulerWidth * float2(0,-1)).a;
//a = a/5;
if (a > 0)
{
return half4(1,1,1,1) * (1 - _shadowfactor * a);
}
else
{
return half4(1,1,1,1);
}
}
ENDCG
}
}
FallBack "Diffuse"
}