Net.Like.Xue.Tokyo/Assets/Plugins/Le Tai's Asset/TranslucentImage/Resources/EfficientBlur.shader

123 lines
3.4 KiB
Plaintext

Shader "Hidden/EfficientBlur"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_BackgroundColor ("_BackgroundColor", Color) = (0,0,0,0)
}
CGINCLUDE
#include "UnityCG.cginc"
#include "lib.cginc"
UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex);
float4 _MainTex_TexelSize;
uniform half _Radius;
BlurVertexOutput vert(appdata_img v)
{
BlurVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_OUTPUT(BlurVertexOutput, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.texcoord = GetGatherTexcoord(v.texcoord, _MainTex_TexelSize, _Radius);
return o;
}
ENDCG
SubShader
{
Cull Off ZWrite Off ZTest Always Blend Off
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
half4 frag(BlurVertexOutput i) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i)
half4 o = GATHER(_MainTex, i.texcoord);
return o;
}
ENDCG
}
Pass
{
CGPROGRAM
//Crop before blur
#pragma vertex vertCrop
#pragma fragment frag
#pragma multi_compile_local BACKGROUND_FILL_NONE BACKGROUND_FILL_COLOR
float4 _CropRegion;
half3 _BackgroundColor;
BlurVertexOutput vertCrop(appdata_img v)
{
BlurVertexOutput o = vert(v);
o.texcoord.xy = getNewUV(o.texcoord.xy, _CropRegion);
o.texcoord.zw = getNewUV(o.texcoord.zw, _CropRegion);
return o;
}
half4 frag(BlurVertexOutput i) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half4 o = GATHER(_MainTex, i.texcoord);
#if BACKGROUND_FILL_COLOR
o.rgb = lerp(_BackgroundColor, o.rgb, o.a);
o.a = 1.0h;
#endif
return o;
}
// v2f vert(appdata v)
// {
// v2f o;
// UNITY_SETUP_INSTANCE_ID(v);
// UNITY_INITIALIZE_OUTPUT(v2f, o);
// UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
// o.vertex = UnityObjectToClipPos(v.vertex);
// o.uv = v.uv;
//
// o.viewDir = mul(unity_CameraInvProjection, o.vertex).xyz;
// #if UNITY_UV_STARTS_AT_TOP
// o.viewDir.y = -o.viewDir.y;
// #endif
// o.viewDir.z = -o.viewDir.z;
// o.viewDir = mul(unity_CameraToWorld, o.viewDir.xyzz).xyz;
// return o;
// }
//
// samplerCUBE _EnvTex;
// float4 _EnvTex_HDR;
//
// half4 frag(v2f i) : SV_Target
// {
// UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
// half4 col = SAMPLE_SCREEN_TEX(_MainTex, i.uv);
// half4 envData = texCUBE(_EnvTex, normalize(i.viewDir));
// half3 env = DecodeHDR(envData, _EnvTex_HDR);
// col.rgb *= col.a;
// col.rgb = col.rgb + env * (1 - col.a);
// col.a = 1;
// return col;
// }
ENDCG
}
}
FallBack Off
}