Syldarion

Diamond Fractal Image Effect Shader

Jan 5th, 2021
1,634
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "Hidden/DiamondFractalImageEffect"
  2. {
  3.     Properties
  4.     {
  5.         _MainTex ("Texture", 2D) = "white" {}
  6.         _FractalFactor ("Fractal Factor", float) = 10.0
  7.         _FractalDistance ("Fractal Distance", float) = 0.0
  8.         _SampleDistance ("Sample Distance", float) = 0.0
  9.         _WarpStart ("Warp Start Distance", Range(0.0, 1.0)) = 0.5
  10.         _UvZoom ("UV Zoom", float) = 1.0
  11.     }
  12.     SubShader
  13.     {
  14.         // No culling or depth
  15.         Cull Off ZWrite Off ZTest Always
  16.  
  17.         Pass
  18.         {
  19.             CGPROGRAM
  20.             #pragma vertex vert
  21.             #pragma fragment frag
  22.  
  23.             #include "UnityCG.cginc"
  24.  
  25.             struct appdata
  26.             {
  27.                 float4 vertex : POSITION;
  28.                 float2 uv : TEXCOORD0;
  29.             };
  30.  
  31.             struct v2f
  32.             {
  33.                 float2 uv : TEXCOORD0;
  34.                 float4 vertex : SV_POSITION;
  35.             };
  36.  
  37.             v2f vert (appdata v)
  38.             {
  39.                 v2f o;
  40.                 o.vertex = UnityObjectToClipPos(v.vertex);
  41.                 o.uv = v.uv;
  42.                 return o;
  43.             }
  44.  
  45.             sampler2D _MainTex;
  46.             float _FractalFactor;
  47.             float _FractalDistance;
  48.             float _SampleDistance;
  49.             float _WarpStart;
  50.             float _UvZoom;
  51.  
  52.             fixed4 frag (v2f i) : SV_Target
  53.             {
  54.                 float2 center = float2(0.5, 0.5);
  55.                 float2 zuv = (i.uv - center) * _UvZoom + center;
  56.                 float2 st = zuv;
  57.                 st = st * 2.0 - 1.0;
  58.                
  59.                 float t = length(abs(st) - _FractalDistance);
  60.                 float t2 = frac(t * _FractalFactor);
  61.                 float t3 = smoothstep(_WarpStart, 1.0, t2);
  62.                
  63.                 float2 away = normalize(st - center) * (_SampleDistance * t3);
  64.            
  65.                 fixed4 col = tex2D(_MainTex, zuv + away);
  66.                
  67.                 return col;
  68.             }
  69.             ENDCG
  70.         }
  71.     }
  72. }
  73.  
RAW Paste Data