Advertisement
axoila

SDF.shader

Feb 20th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "Hidden/SDF"
  2. {
  3.     Properties
  4.     {
  5.         _MainTex ("Texture", 2D) = "white" {}
  6.     }
  7.     SubShader
  8.     {
  9.         // No culling or depth
  10.         Cull Off ZWrite Off ZTest Always
  11.  
  12.         Pass
  13.         {
  14.             CGPROGRAM
  15.             #pragma vertex vert
  16.             #pragma fragment frag
  17.            
  18.             #include "UnityCG.cginc"
  19.  
  20.             struct appdata
  21.             {
  22.                 float4 vertex : POSITION;
  23.                 float2 uv : TEXCOORD0;
  24.             };
  25.  
  26.             struct v2f
  27.             {
  28.                 float2 uv : TEXCOORD0;
  29.                 float4 vertex : SV_POSITION;
  30.             };
  31.  
  32.             v2f vert (appdata v)
  33.             {
  34.                 v2f o;
  35.                 o.vertex = UnityObjectToClipPos(v.vertex);
  36.                 o.uv = v.uv;
  37.                 return o;
  38.             }
  39.            
  40.             sampler2D _MainTex;
  41.  
  42.             fixed4 frag (v2f i) : SV_Target
  43.             {
  44.                 float4 col = 0;
  45.                 float2 coords = i.uv;
  46.                 float sign = tex2D(_MainTex, coords);
  47.                 //return sign*0.5+0.5;
  48.                 float distance = 10000;
  49.                 [unroll]
  50.                 for( int x = -10; x<=10; x++ ){
  51.                     [unroll]
  52.                     for( int y = -10; y<=10; y++ ){
  53.                         float value = tex2D(_MainTex, coords + float2(x*(_ScreenParams.z-1), y*(_ScreenParams.w-1))).r;
  54.                         //return value;
  55.                         if(sign < 0.5 && value > 0.5)
  56.                             distance = min(x*x + y*y, distance);
  57.                         if(sign > 0.5 && value < 0.5)
  58.                             distance = min(x*x + y*y, distance);
  59.                     }
  60.                 }
  61.                 if(sign < 0.5)
  62.                     col.r = 0.5-sqrt(distance)/20;
  63.                 else
  64.                     col.r = 0.5+sqrt(distance)/20;
  65.                 return col;
  66.             }
  67.             ENDCG
  68.         }
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement