Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Learning to Dig
  2. // by David Hoskins.
  3. // License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
  4.  
  5.  
  6. //  1 out, 2 in...
  7. #define HASHSCALE1 .1031
  8. float hash12(vec2 p)
  9. {
  10.     vec3 p3  = fract(vec3(p.xyx) * HASHSCALE1);
  11.     p3 += dot(p3, p3.yzx + 19.19);
  12.     return fract((p3.x + p3.y) * p3.z);
  13. }
  14.  
  15. //--------------------------------------------------------------------------
  16. const vec2 add = vec2(1.0,0.0);
  17. float noise( in vec2 x )
  18. {
  19.     vec2 p = floor(x);
  20.     vec2 f = fract(x);
  21.     f = f*f*(1.5-f)*2.0;
  22.    
  23.     float res = mix(mix( hash12(p), hash12(p + add.xy),f.x),
  24.                     mix( hash12(p + add.yx), hash12(p + add.xx),f.x),f.y);
  25.     return res;
  26. }
  27.  
  28.  
  29.  
  30. float circle (vec2 p, float d)
  31. {
  32.     float f = length(p)-d;
  33.     return f;
  34. }
  35.  
  36.  
  37. //----------------------------------------------------------------------------------------
  38. const mat2 m = mat2( 0.80,  0.90, -0.90,  0.80 )*2.7;
  39. float fbm4( vec2 p )
  40. {
  41.     float f = 0.0;
  42.     f += 0.5000*noise( p ); p = m*p;
  43.     f += 0.2500*noise( p ); p = m*p;
  44.     f += 0.1250*noise( p ); p = m*p;
  45.     f += 0.0625*noise( p );
  46.     return f/0.9375;
  47. }
  48.  
  49. float fbm6( vec2 p )
  50. {
  51.     float f = 0.0;
  52.     f += 0.500000*(0.5+0.5*noise( p )); p = m*p;
  53.     f += 0.250000*(0.5+0.5*noise( p )); p = m*p;
  54.     f += 0.125000*(0.5+0.5*noise( p )); p = m*p;
  55.     f += 0.062500*(0.5+0.5*noise( p )); p = m*p;
  56.     f += 0.031250*(0.5+0.5*noise( p )); p = m*p;
  57.     f += 0.015625*(0.5+0.5*noise( p ));
  58.     return f/0.96875;
  59. }
  60.  
  61. // Thanks to iq for writing this warp function, altering this saved me loads of time and experimentation...
  62. // https://www.shadertoy.com/view/lsl3RH
  63. vec3 lava(in vec2 q, in float d)
  64. {
  65.     q*=2.0;
  66.     float ql = length( q );
  67.     q.x += 0.05*sin(0.37*iTime+ql*4.7);
  68.     q.y += 0.05*sin(0.33*iTime+ql*4.7);
  69.     q *= 0.7;
  70.  
  71.     vec2 o = vec2(0.0);
  72.     o.x = 0.5 + 0.5*fbm6( vec2(2.0*q          )  );
  73.     o.y = 0.5 + 0.5*fbm6( vec2(2.0*q)  );
  74.  
  75.     float ol = length( o );
  76.     o.x += 0.02*sin(0.12*iTime*4.+ol)/ol;
  77.     o.y += 0.02*sin(0.14*iTime*4.+ol)/ol;
  78.  
  79.     vec2 n;
  80.     n.x = fbm6( vec2(7.0*o+vec2(19.2))  );
  81.     n.y = fbm6( vec2(7.0*o+vec2(15.7))  );
  82.  
  83.     vec2 p = 4.0*q + 4.0*n;
  84.  
  85.     float f = 0.5 + .5 * fbm4( p );
  86.  
  87.     f = mix( f, f*f*f*3.5, f*abs(n.x) );
  88.  
  89.     float g = 0.5 + 0.5*sin(4.0*p.x)*sin(4.0*p.y);
  90.     f *= 1.0-0.5*pow( g, 8.0 );
  91.  
  92.     //vec4 on = vec4( o, n );
  93.    
  94.     vec3 col = mix(vec3(f, f, 0), vec3(1.0-f*.3), smoothstep(-.01 , -.4, d));
  95.     col += mix(vec3(0), vec3(pow(f, 5.0))*.4, smoothstep(-.01 , -.5, d));
  96.     col =  mix(col, vec3(1,1,0), n.x*.5);
  97.     col -= vec3(.0,1.,1.) * dot(o,o)*(d+.5);
  98.    
  99.     return col;
  100. }
  101. float flare( vec2 U )                            // rotating hexagon
  102. {   vec2 A = sin(vec2(0, 1.57) + iDate.w);
  103.     U = abs( U * mat2(A, -A.y, A.x) ) * mat2(2,0,1,1.7);
  104.     return .2/max(U.x,U.y);                      // glowing-spiky approx of step(max,.2)
  105. }
  106.  
  107. #define r(x)     fract(1e4*sin((x)*541.17))      // rand, signed rand   in 1, 2, 3D.
  108. #define sr2(x)   ( r(vec2(x,x+.1)) *2.-1. )
  109.  
  110. void mainImage( out vec4 fragColor, in vec2 coord )
  111. {
  112.     vec3 col = vec3(0);
  113.     vec2 xy = coord / iResolution.xy;
  114.  
  115.    
  116.     vec2 crd = (xy)*2.-1.;
  117.     float c = 0.0;
  118.    
  119.  
  120.  
  121.     xy.x  *= iResolution.x/iResolution.y;
  122.     crd.x *= iResolution.x/iResolution.y; //...Aspect ratio with y still being -1 to 1
  123.  
  124.    
  125.     float d = circle(crd, .85);
  126.     float spread = 2.;  //radius of glow
  127.     col = mix(col, vec3(.45, .3, .2), smoothstep(1. , 0., d));
  128.     col = mix(col, vec3(.0, .6, 1.0), smoothstep(0.12 , .001, (1. / spread)*d)*.5);
  129.     col = mix(vec3(.1,0.2,.1), col, smoothstep(0.0, 0.001, d+noise(crd*100.)*.005));
  130.     col = mix(col, lava(crd, d), smoothstep(-.01 , -.015, d));
  131.    
  132.     fragColor = vec4(col,1);
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement