-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathGaussianBlur.shader
91 lines (80 loc) · 2.32 KB
/
GaussianBlur.shader
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Shader "LX/GaussianBlur"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
ZTest Always
Cull Off
Zwrite Off
CGINCLUDE
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
half2 uv[5]:TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
half4 _MainTex_TexelSize;
v2f vertV(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
const half2 uv = v.uv;
o.uv[0] = uv;
o.uv[1] = uv + float2(0, _MainTex_TexelSize.y * 1);
o.uv[2] = uv + float2(0, _MainTex_TexelSize.y * 2);
o.uv[3] = uv + float2(0, _MainTex_TexelSize.y * -1);
o.uv[4] = uv + float2(0, _MainTex_TexelSize.y * -2);
return o;
}
v2f vertH(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
const half2 uv = v.uv;
o.uv[0] = uv;
o.uv[1] = uv + float2(_MainTex_TexelSize.x * 1,0);
o.uv[2] = uv + float2(_MainTex_TexelSize.x * 2,0);
o.uv[3] = uv + float2(_MainTex_TexelSize.x * -1,0);
o.uv[4] = uv + float2(_MainTex_TexelSize.x * -2,0);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
float weight[3] = {0.4026, 0.2442, 0.0545};
fixed3 sum = tex2D(_MainTex, i.uv[0]).rgb * weight[0];
for (int index = 1; index < 3; index++)
{
sum += tex2D(_MainTex, i.uv[index]).rgb * weight[index];
sum += tex2D(_MainTex, i.uv[index+2]).rgb * weight[index];
}
return fixed4(sum, 1);
}
ENDCG
Pass
{
NAME "G_V"
CGPROGRAM
#pragma vertex vertV
#pragma fragment frag
ENDCG
}
Pass
{
NAME "G_H"
CGPROGRAM
#pragma vertex vertH
#pragma fragment frag
ENDCG
}
}
}