Advertisement
tonynogo

Demo 71 - Truchet - Arabesque

Jul 6th, 2017
3,516
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "Custom/Noise/Truchet - Arabesque"
  2. {
  3.     Properties
  4.     {
  5.         _Factor1 ("Factor 1", float) = 1.0
  6.         _Factor2 ("Factor 2", float) = 1.0
  7.         _Factor3 ("Factor 3", float) = 1.0
  8.  
  9.         _GridSize ("GridSize", float) = 1.0
  10.         _Border ("Border", range(0.0, 0.5)) = 0.1
  11.     }
  12.  
  13.     SubShader
  14.     {
  15.         Tags { "RenderType"="Opaque" }
  16.  
  17.         Pass
  18.         {
  19.             CGPROGRAM
  20.             #pragma vertex vert_img
  21.             #pragma fragment frag
  22.            
  23.             #include "UnityCG.cginc"
  24.            
  25.             float _Factor1;
  26.             float _Factor2;
  27.             float _Factor3;
  28.  
  29.             float _GridSize;
  30.  
  31.             float2 truchetPattern(float2 uv, float index)
  32.             {
  33.                 index = frac((index - 0.5) * 2.0);
  34.  
  35.                 if(index > 0.75)
  36.                 {
  37.                     return float2(1.0, 1.0) - uv;
  38.                 }
  39.                
  40.                 if(index > 0.5)
  41.                 {
  42.                     return float2( uv.x, uv.y);
  43.                 }
  44.  
  45.                 if(index > 0.25)
  46.                 {
  47.                     return 1.0 - float2(1.0 - uv.x, uv.y);
  48.                 }
  49.  
  50.                 return uv;
  51.             }
  52.  
  53.             float noise(half2 uv)
  54.             {
  55.                 return frac(sin(dot(uv, float2(_Factor1, _Factor2))) * _Factor3);
  56.             }
  57.  
  58.             #define Circle(uv, center, radius, border)  step(length(uv - center), radius + border/2) - step(length(uv - center), radius - border/2)
  59.  
  60.             float _Border;
  61.  
  62.             fixed4 frag (v2f_img i) : SV_Target
  63.             {
  64.                 i.uv *= _GridSize;
  65.                 float2 intVal = floor(i.uv);
  66.                 float2 fracVal = frac(i.uv);
  67.  
  68.                 float2 tile = truchetPattern(fracVal, noise(intVal));
  69.  
  70.                 fixed val = Circle(tile, float2(0.5, 1.0), 0.25, _Border)
  71.                 + Circle(tile, float2(0.0, 0.0), 0.25, _Border)
  72.                 + Circle(tile, float2(0.0, 0.5), 0.25, _Border)
  73.                 + Circle(tile, float2(0.0, 1.0), 0.50, _Border)
  74.                 + Circle(tile, float2(1.0, 0.0), 0.50, _Border)
  75.                 + Circle(tile, float2(1.0, 0.0), 0.25, _Border)
  76.                 + Circle(tile, float2(1.0, 0.625), 0.125, _Border);
  77.  
  78.                 return fixed4(val, val, val, 1);
  79.             }
  80.             ENDCG
  81.         }
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement