1
2 Shader "Hidden/SSAA" {
3 Properties {
4 _MainTex ("Base (RGB)", 2D) = "white" {}
5 }
6
7 // very simple & fast AA by Emmanuel Julien
8
9 SubShader {
10 Pass {
11
12 ZTest Always Cull Off ZWrite Off
13
14 CGPROGRAM
15
16 #pragma vertex vert
17 #pragma fragment frag
18
19 #include "UnityCG.cginc"
20
21 uniform sampler2D _MainTex;
22 uniform float4 _MainTex_TexelSize;
23
24 struct v2f {
25 float4 pos : SV_POSITION;
26 float2 uv[5] : TEXCOORD0;
27 };
28
29 v2f vert( appdata_img v ) {
30 v2f o;
31 o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
32
33 float2 uv = v.texcoord.xy;
34
35 float w = 1.75;
36
37 float2 up = float2(0.0, _MainTex_TexelSize.y) * w;
38 float2 right = float2(_MainTex_TexelSize.x, 0.0) * w;
39
40 o.uv[0].xy = uv - up;
41 o.uv[1].xy = uv - right;
42 o.uv[2].xy = uv + right;
43 o.uv[3].xy = uv + up;
44
45 o.uv[4].xy = uv;
46
47 return o;
48 }
49
50 half4 frag (v2f i) : SV_Target
51 {
52 half4 outColor;
53
54 float t = Luminance( tex2D( _MainTex, i.uv[0] ).xyz );
55 float l = Luminance( tex2D( _MainTex, i.uv[1] ).xyz);
56 float r = Luminance( tex2D( _MainTex, i.uv[2] ).xyz);
57 float b = Luminance( tex2D( _MainTex, i.uv[3] ).xyz);
58
59 half2 n = half2( -( t - b ), r - l );
60 float nl = length( n );
61
62 if ( nl < (1.0 / 16.0) )
63 outColor = tex2D( _MainTex, i.uv[4] );
64 else {
65 n *= _MainTex_TexelSize.xy / nl;
66
67 half4 o = tex2D( _MainTex, i.uv[4]);
68 half4 t0 = tex2D( _MainTex, i.uv[4] + n * 0.5) * 0.9;
69 half4 t1 = tex2D( _MainTex, i.uv[4] - n * 0.5) * 0.9;
70 half4 t2 = tex2D( _MainTex, i.uv[4] + n) * 0.75;
71 half4 t3 = tex2D( _MainTex, i.uv[4] - n) * 0.75;
72
73 outColor = (o + t0 + t1 + t2 + t3) / 4.3;
74 }
75
76 return outColor;
77 }
78
79 ENDCG
80 }
81 }
82
83 Fallback off
84
85 }