Advertisement
noradninja

FXAA.shader

Jul 20th, 2022
874
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.83 KB | None | 0 0
  1. Shader "Vita/Fullscreen/Fxaa"
  2. {
  3.     Properties{
  4.         _MainTex("-", 2D) = "white" {}
  5.     }
  6.  
  7.     CGINCLUDE
  8.  
  9.     #include "UnityCG.cginc"
  10.  
  11.     UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex);
  12.     half _Threshold;
  13.     half _Sharpness;
  14.     half4 _MainTex_TexelSize;
  15.  
  16.     #define lum half3(0.22h, 0.707h, 0.071h)
  17.    
  18.  
  19.     struct appdata {
  20.         half4 vertex : POSITION;
  21.         half2 uv : TEXCOORD0;
  22.         UNITY_VERTEX_INPUT_INSTANCE_ID
  23.     };
  24.  
  25.     struct v2f {
  26.         half4 pos : SV_POSITION;
  27.         half2 uv : TEXCOORD0;
  28.         half4 uv1 : TEXCOORD1;
  29.         half4 uv2 : TEXCOORD2;
  30.         UNITY_VERTEX_OUTPUT_STEREO
  31.     };
  32.  
  33.     v2f vert(appdata v)
  34.     {
  35.         v2f o;
  36.    
  37.         UNITY_INITIALIZE_OUTPUT(v2f, o);
  38.        
  39.         o.pos = UnityObjectToClipPos(v.vertex);
  40.         o.uv = v.uv;
  41.         half2 offset = _MainTex_TexelSize.xy * 0.5h;
  42.         o.uv1 = half4(v.uv - offset, v.uv + offset);
  43.         o.uv2 = half4(offset, offset * 4.0h);
  44.         return o;
  45.     }
  46.  
  47.     half4 frag(v2f i) : SV_Target
  48.     {
  49.        
  50.  
  51.         half3 col = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv)).rgb;
  52.         half gr = dot(col, lum);
  53.         half gtl = dot(UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv1.xy)).rgb, lum);
  54.         half gbl = dot(UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv1.xw)).rgb, lum);
  55.         half gtr = dot(UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv1.zy)).rgb, lum);
  56.         half gbr = dot(UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv1.zw)).rgb, lum);
  57.  
  58.         half gmax = max(max(gtr, gbr), max(gtl, gbl));
  59.         half gmin = min(min(gtr, gbr), min(gtl, gbl));
  60.  
  61.         if (max(gmax, gr) - min(gmin, gr) < max(0.05h, gmax * _Threshold))
  62.             return half4(col, 1.0h);
  63.  
  64.         half diff1 = gbl - gtr;
  65.         half diff2 = gbr - gtl;
  66.  
  67.         half2 mltp = normalize(half2(diff1 + diff2, diff1 - diff2));
  68.         half dvd = min(abs(mltp.x), abs(mltp.y)) * _Sharpness;
  69.  
  70.         half3 tmp1 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv - mltp * i.uv2.xy)).rgb;
  71.         half3 tmp2 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv + mltp * i.uv2.xy)).rgb;
  72.  
  73.         mltp = clamp(mltp.xy / dvd, -2.0h, 2.0h);
  74.  
  75.         half3 tmp3 = saturate(UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv - mltp * i.uv2.zw)).rgb);
  76.         half3 tmp4 = saturate(UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv + mltp * i.uv2.zw)).rgb);
  77.  
  78.         half3 col1 = tmp1 + tmp2;
  79.         half3 col2 = ((tmp3 + tmp4) * 0.25h) + (col1 * 0.25h);
  80.  
  81.         if (dot(col1, lum) < gmin || dot(col2, lum) > gmax)
  82.             return half4(col1 * 0.5h, 1.0h);
  83.         else
  84.             return half4(col2, 1.0h);
  85.     }
  86.     ENDCG
  87.    
  88.     SubShader{
  89.         Pass {
  90.             ZTest Always Cull Off ZWrite Off
  91.             Fog { Mode off }      
  92.             CGPROGRAM
  93.             #pragma vertex vert
  94.             #pragma fragment frag
  95.             #pragma target 2.0
  96.             ENDCG
  97.         }
  98.     }
  99.     FallBack Off
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement