// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
|
|
Shader "DynamicShadowProjector/Blit/CopyMipmap" {
|
Properties {
|
_MainTex ("Albedo (RGB)", 2D) = "white" {}
|
}
|
|
CGINCLUDE
|
#include "UnityCG.cginc"
|
|
sampler2D _MainTex;
|
half4 _MainTex_TexelSize;
|
fixed _Falloff;
|
|
struct v2f_blit
|
{
|
float4 pos : SV_POSITION;
|
half2 uv0 : TEXCOORD0;
|
};
|
struct v2f_downsample
|
{
|
float4 pos : SV_POSITION;
|
half2 uv0 : TEXCOORD0;
|
half2 uv1 : TEXCOORD1;
|
half2 uv2 : TEXCOORD2;
|
half2 uv3 : TEXCOORD3;
|
};
|
|
v2f_blit vert_blit(appdata_img v)
|
{
|
v2f_blit o;
|
o.pos = UnityObjectToClipPos(v.vertex);
|
o.uv0 = v.texcoord.xy;
|
return o;
|
}
|
|
fixed4 frag_blit_with_falloff(v2f_blit i) : COLOR
|
{
|
fixed4 color = tex2D(_MainTex, i.uv0);
|
return lerp(fixed4(1,1,1,0), color, _Falloff);
|
}
|
|
v2f_downsample vert_downsample(appdata_img v)
|
{
|
v2f_downsample o;
|
o.pos = UnityObjectToClipPos(v.vertex);
|
o.uv0 = v.texcoord.xy + _MainTex_TexelSize.xy;
|
o.uv1 = v.texcoord.xy - _MainTex_TexelSize.xy;
|
o.uv2 = v.texcoord.xy + _MainTex_TexelSize.xy * half2(1,-1);
|
o.uv3 = v.texcoord.xy + _MainTex_TexelSize.xy * half2(-1,1);
|
return o;
|
}
|
|
fixed4 frag_downsample_mip0(v2f_downsample i) : COLOR
|
{
|
half4 uv;
|
uv.zw = 0;
|
uv.xy = i.uv0;
|
fixed4 color = 0.25*tex2Dlod(_MainTex, uv);
|
uv.xy = i.uv1;
|
color += 0.25*tex2Dlod(_MainTex, uv);
|
uv.xy = i.uv2;
|
color += 0.25*tex2Dlod(_MainTex, uv);
|
uv.xy = i.uv3;
|
color += 0.25*tex2Dlod(_MainTex, uv);
|
return color;
|
}
|
ENDCG
|
|
SubShader {
|
Pass {
|
ZTest Always Cull Off ZWrite Off
|
Fog { Mode Off }
|
CGPROGRAM
|
#pragma vertex vert_blit
|
#pragma fragment frag_blit_with_falloff
|
ENDCG
|
}
|
Pass {
|
ZTest Always Cull Off ZWrite Off
|
Fog { Mode Off }
|
CGPROGRAM
|
#pragma vertex vert_downsample
|
#pragma fragment frag_downsample_mip0
|
#pragma target 3.0
|
ENDCG
|
}
|
}
|
}
|