BLOKS Shader Bulletin Board
audio nebula drive
Shader Preview Unavailable
This realtime shader may be too intensive for your current device or browser.
Shader Code
mat2 rot(float a) {
float s = sin(a);
float c = cos(a);
return mat2(c, -s, s, c);
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord.xy / iResolution.xy;
vec2 p = uv * 2.0 - 1.0;
p.x *= uAspect;
vec2 m = uPointer * 2.0 - 1.0;
m.x *= uAspect;
float t = iTime;
float bass = uAudioBass;
float mid = uAudioMid;
float high = uAudioHigh;
float level = uAudioLevel;
vec2 q = p;
float distMouse = length(q - m);
q += uPointerDelta * vec2(uAspect, 1.0) * exp(-distMouse * 4.0) * 24.0;
q *= rot(t * 0.08 + bass * 1.6 + uPointerDown * 0.6);
float r = length(q);
float a = atan(q.y, q.x);
float spiral = sin(a * 6.0 + r * (18.0 + bass * 30.0) - t * (2.5 + level * 8.0));
float nebula = sin(q.x * (5.0 + mid * 14.0) + t);
nebula += sin(q.y * (7.0 + high * 22.0) - t * 1.3);
nebula += sin((q.x + q.y) * 6.0 + spiral * 2.0);
nebula /= 3.0;
float field = smoothstep(-0.15, 0.85, nebula);
float core = 0.035 / max(r, 0.035);
float mouse = 0.02 / max(distMouse, 0.02);
vec3 bg = vec3(0.004, 0.008, 0.03);
vec3 blue = vec3(0.04, 0.22, 1.0);
vec3 cyan = vec3(0.18, 0.85, 1.0);
vec3 violet = vec3(0.7, 0.16, 1.0);
vec3 hot = vec3(1.0, 0.35, 0.75);
vec3 col = bg;
col += blue * field * (0.25 + mid);
col += cyan * core * (0.25 + bass * 1.5);
col += violet * smoothstep(0.2, 1.0, spiral * 0.5 + 0.5) * (0.2 + high);
col += hot * level * smoothstep(0.9, 0.0, r);
col += cyan * mouse * 0.16;
col *= 1.0 + level * 2.0;
col *= 1.0 - smoothstep(0.8, 1.7, length(p)) * 0.55;
col = pow(max(col, 0.0), vec3(0.82));
fragColor = vec4(col, 1.0);
}
