69 lines
1.6 KiB
Plaintext
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"
|
||
|
}
|