Advertisement
tonynogo

Demo 39 - Blur effect with Grab pass

Jul 6th, 2017
9,136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "Custom/Blur"
  2. {
  3.     Properties
  4.     {
  5.         _Factor ("Factor", Range(0, 5)) = 1.0
  6.     }
  7.     SubShader
  8.     {
  9.         Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
  10.        
  11.         GrabPass { }
  12.        
  13.         Pass
  14.         {
  15.             CGPROGRAM
  16.             #pragma vertex vert
  17.             #pragma fragment frag
  18.             #pragma fragmentoption ARB_precision_hint_fastest
  19.  
  20.             #include "UnityCG.cginc"
  21.  
  22.             struct appdata
  23.             {
  24.                 float4 vertex : POSITION;
  25.                 float2 uv : TEXCOORD0;
  26.             };
  27.  
  28.             struct v2f
  29.             {
  30.                 float4 pos : SV_POSITION;
  31.                 float4 uv : TEXCOORD0;
  32.             };
  33.  
  34.             v2f vert (appdata v)
  35.             {
  36.                 v2f o;
  37.                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
  38.                 o.uv = ComputeGrabScreenPos(o.pos);
  39.                 return o;
  40.             }
  41.            
  42.             sampler2D _GrabTexture;
  43.             float4 _GrabTexture_TexelSize;
  44.             float _Factor;
  45.  
  46.             half4 frag (v2f i) : SV_Target
  47.             {
  48.  
  49.                 half4 pixelCol = half4(0, 0, 0, 0);
  50.  
  51.                 #define ADDPIXEL(weight,kernelX) tex2Dproj(_GrabTexture, UNITY_PROJ_COORD(float4(i.uv.x + _GrabTexture_TexelSize.x * kernelX * _Factor, i.uv.y, i.uv.z, i.uv.w))) * weight
  52.                
  53.                 pixelCol += ADDPIXEL(0.05, 4.0);
  54.                 pixelCol += ADDPIXEL(0.09, 3.0);
  55.                 pixelCol += ADDPIXEL(0.12, 2.0);
  56.                 pixelCol += ADDPIXEL(0.15, 1.0);
  57.                 pixelCol += ADDPIXEL(0.18, 0.0);
  58.                 pixelCol += ADDPIXEL(0.15, -1.0);
  59.                 pixelCol += ADDPIXEL(0.12, -2.0);
  60.                 pixelCol += ADDPIXEL(0.09, -3.0);
  61.                 pixelCol += ADDPIXEL(0.05, -4.0);
  62.                 return pixelCol;
  63.             }
  64.             ENDCG
  65.         }
  66.  
  67.         GrabPass { }
  68.  
  69.         Pass
  70.         {
  71.             CGPROGRAM
  72.             #pragma vertex vert
  73.             #pragma fragment frag
  74.             #pragma fragmentoption ARB_precision_hint_fastest
  75.  
  76.             #include "UnityCG.cginc"
  77.  
  78.             struct appdata
  79.             {
  80.                 float4 vertex : POSITION;
  81.                 float2 uv : TEXCOORD0;
  82.             };
  83.  
  84.             struct v2f
  85.             {
  86.                 float4 pos : SV_POSITION;
  87.                 float4 uv : TEXCOORD0;
  88.             };
  89.  
  90.             v2f vert (appdata v)
  91.             {
  92.                 v2f o;
  93.                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
  94.                 o.uv = ComputeGrabScreenPos(o.pos);
  95.                 return o;
  96.             }
  97.            
  98.             sampler2D _GrabTexture;
  99.             float4 _GrabTexture_TexelSize;
  100.             float _Factor;
  101.  
  102.             fixed4 frag (v2f i) : SV_Target
  103.             {
  104.  
  105.                 fixed4 pixelCol = fixed4(0, 0, 0, 0);
  106.  
  107.                 #define ADDPIXEL(weight,kernelY) tex2Dproj(_GrabTexture, UNITY_PROJ_COORD(float4(i.uv.x, i.uv.y + _GrabTexture_TexelSize.y * kernelY * _Factor, i.uv.z, i.uv.w))) * weight
  108.                
  109.                 pixelCol += ADDPIXEL(0.05, 4.0);
  110.                 pixelCol += ADDPIXEL(0.09, 3.0);
  111.                 pixelCol += ADDPIXEL(0.12, 2.0);
  112.                 pixelCol += ADDPIXEL(0.15, 1.0);
  113.                 pixelCol += ADDPIXEL(0.18, 0.0);
  114.                 pixelCol += ADDPIXEL(0.15, -1.0);
  115.                 pixelCol += ADDPIXEL(0.12, -2.0);
  116.                 pixelCol += ADDPIXEL(0.09, -3.0);
  117.                 pixelCol += ADDPIXEL(0.05, -4.0);
  118.                 return pixelCol;
  119.             }
  120.             ENDCG
  121.         }
  122.     }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement