// Author: // Title: #define PI 3.14159265359 #define PI_2 6.28318530718 #ifdef GL_ES precision mediump float; #endif uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; float line(float pos, float dist) { const float width = 0.010; return smoothstep(dist-width, dist, pos) * (1.0 - smoothstep(dist, dist + width, pos)); } float pulse(vec2 st, vec2 p, float scanline) { return smoothstep(0.068, 0.0, distance(st, p)) * (pow(scanline, 1.592)) * 2.136; } // Function from IƱigo Quiles // https://www.shadertoy.com/view/MsS3Wc vec3 hsb2rgb( in vec3 c ){ vec3 rgb = clamp(abs(mod(c.x*6.0+vec3(0.0,4.0,2.0), 6.0)-3.0)-1.0, 0.0, 1.0 ); rgb = rgb*rgb*(3.0-2.0*rgb); return c.z * mix( vec3(1.0), rgb, c.y); } void main() { vec2 st = gl_FragCoord.xy/u_resolution.xy; st -= vec2(0.5); st *= 2.0; float t = fract(u_time / 2.0); float d = distance(st, vec2(0.0)); float scanline = fract((atan(st.x, st.y)) / PI_2 - t); float c = pow(scanline, 2.0); c *= (1.0 - step(1.0, d)); float radial = c / 0.8; radial += line(d, 0.2); radial += line(d, 0.4); radial += line(d, 0.6); radial += line(d, 0.8); radial += line(d, 1.0); radial += line(st.x, 0.000); radial += line(st.y, 0.0); radial += pulse(st, vec2(0.360,-0.200), scanline); radial += pulse(st, vec2(-0.140,0.230), scanline); radial += pulse(st, vec2(0.460,0.200), scanline); radial += pulse(st, vec2(0.240,0.450), scanline); radial += pulse(st, vec2(0.610,0.390), scanline); radial += pulse(st, vec2(0.430,0.700), scanline); vec3 base = vec3(0.0); vec3 color = base + vec3(0.040,0.470,0.010) * radial; // crop to circle color *= (1.0 - step(1.0, d)); gl_FragColor = vec4(color,1.0); }