#ifdef GL_ES precision mediump float; #endif #define PI 3.14159265359 #define blue1 vec3(0.74,0.95,1.00) #define blue2 vec3(0.87,0.98,1.00) #define blue3 vec3(0.35,0.76,0.83) #define blue4 vec3(0.953,0.969,0.89) #define red vec3(1.00,0.38,0.227) uniform vec2 u_resolution; uniform float u_time; mat2 rotate2d(float a) { float c = cos(a); return mat2(c, -sin(a), sin(a), c); } vec2 get_center() { return(u_resolution/2.)/min(u_resolution.x, u_resolution.y); } vec2 get_st() { return gl_FragCoord.xy/min(u_resolution.x, u_resolution.y); } float dist(vec2 center) { vec2 st = get_st(); return distance(st, center); } vec3 circle(vec2 center, float width, float rad, vec3 color) { float e = 0.003; float d = dist(center); vec3 res = color; res *= smoothstep(rad-width/2.-e, rad-width/2., d); res *= 1.-smoothstep(rad+width/2., rad+width/2.+e, d); return res; } vec3 circle_with_trace(vec2 center, float width, float rad, vec3 color) { float e = 0.003; float d = dist(center); float trace = 0.08; vec3 res = color; res *= smoothstep(rad-width/2.-e, rad-width/2., d); res *= 1.-smoothstep(rad+width/2., rad+width/2.+e, d); return (res+color*.5*(smoothstep(rad-trace, rad, d)-step(rad, d))); } float circle_clip(float radius) { float d = dist(get_center()); return 1.-step(radius, d); } vec3 floating_circle() { vec2 pos = vec2(cos(u_time)*sin(u_time), sin(u_time))*.5+get_center(); return circle(pos, 0.002, 0.002, vec3(1.)); } vec3 line(float width, float angle, vec3 color, vec2 origin) { float e = 0.003; vec2 st = get_st(); st -= origin; st *= rotate2d(angle); return color*((smoothstep(-e, 0., st.x)-smoothstep(0., e, st.x))); } vec3 line_with_trace(float width, float angle, vec3 color, vec2 origin) { float e = 0.003; float trace = 0.9 * dist(get_center()); vec2 origst = get_st(); vec2 st = origst - origin; st *= rotate2d(angle); return (color*(smoothstep(-e, 0., st.x)-smoothstep(0., e, st.x))+color*.5*(step(0., st.x)-smoothstep(0., trace, st.x)))*step(0., -st.y); } vec3 target() { vec2 center = vec2(cos(u_time*0.5), sin(u_time*0.5))*0.2+get_center()+vec2(cos(u_time*0.3), sin(u_time*0.3))*0.25; vec3 blink = circle(center, 0.01, 0.005, red) * step(0.5, abs(sin(u_time*8.))); vec3 border = circle(center, 0.003, 0.02, red); vec3 impulse = circle_with_trace(center, 0.003, mod(u_time, 1.)*0.12+0.03, red); return blink+border+impulse; } void main(){ vec3 color = vec3(0.0); vec2 st = get_st(); float clip = circle_clip(.5); color += circle(get_center(), 0.002, 0.02, blue1); color += circle(get_center(), 0.002, 0.3, blue1); color += circle(get_center(), 0.002, 0.4, blue1); color += circle(get_center(), 0.005, 0.5, vec3(0.8)); color += circle(get_center(), 0.007, 0.6, blue1); color += clip*line(0.001, PI/4., vec3(.5), get_center()); color += clip*line(0.001, -PI/4., vec3(.5), get_center()); color += clip*line_with_trace(0.001, u_time, blue2, get_center()); color += floating_circle(); color += target(); gl_FragColor = vec4(color,1.0); }