Shader "BF/PostEffect/Blur" { Properties { [HideInInspector]_MainTex("MainTex", 2D) = "white"{} _BlurSize("BlurSize", Float)=1 } SubShader { CGINCLUDE #include "UnityCG.cginc" sampler2D _MainTex; float4 _MainTex_TexelSize; float _BlurSize; struct a2v { float4 pos : POSITION; float4 uv : TEXCOORD0; }; struct v2f { float4 pos : SV_POSITION; half2 uvs[5] : TEXCOORD0; }; v2f vertVertical(a2v v) { v2f o; o.pos = UnityObjectToClipPos(v.pos); o.uvs[0] = v.uv.xy; o.uvs[1] = v.uv.xy + float2(0, -1) * _MainTex_TexelSize.xy * _BlurSize; o.uvs[2] = v.uv.xy + float2(0, -2) * _MainTex_TexelSize.xy * _BlurSize; o.uvs[3] = v.uv.xy + float2(0, 1) * _MainTex_TexelSize.xy * _BlurSize; o.uvs[4] = v.uv.xy + float2(0, 2) * _MainTex_TexelSize.xy * _BlurSize; return o; } v2f vertHorizontal(a2v v) { v2f o; o.pos = UnityObjectToClipPos(v.pos); o.uvs[0] = v.uv.xy; o.uvs[1] = v.uv.xy + float2(-1, 0) * _MainTex_TexelSize.xy * _BlurSize; o.uvs[2] = v.uv.xy + float2(-2, 0) * _MainTex_TexelSize.xy * _BlurSize; o.uvs[3] = v.uv.xy + float2(1, 0) * _MainTex_TexelSize.xy * _BlurSize; o.uvs[4] = v.uv.xy + float2(2, 0) * _MainTex_TexelSize.xy * _BlurSize; return o; } fixed4 frag(v2f f) : SV_TARGET { float weight[3] = {0.4026, 0.2442, 0.0545}; fixed4 o; o = tex2D(_MainTex, f.uvs[0]) * weight[0]; o += tex2D(_MainTex, f.uvs[1]) * weight[1]; o += tex2D(_MainTex, f.uvs[2]) * weight[2]; o += tex2D(_MainTex, f.uvs[3]) * weight[1]; o += tex2D(_MainTex, f.uvs[4]) * weight[2]; return o; } ENDCG Pass { NAME "GAUSSIAN_BLUR_VERTICAL" CGPROGRAM #pragma vertex vertVertical #pragma fragment frag ENDCG } Pass { NAME "GAUSSIAN_BLUR_HORIZONTAL" CGPROGRAM #pragma vertex vertHorizontal #pragma fragment frag ENDCG } } //Fallback "Diffuse" }