Vanguard Golf Hole — Sound Waves Dark Portal

GLSL shader by joeyw_vanguard_hole · created 2026-07-28 · 10s loop · 1 pass

AAA concentric sound-wave golf hole portal. Black void + cyan rim. NOT fractal.

Tags: 3D, Animation, Raymarching, Portal, Golf

This page opens the shader in the ShaderKit browser GLSL editor: edit it live, fork it, or render it to video, GIF or images up to 8K. Also available as a full-screen view and an embeddable player.

Shader source (GLSL)

Common

#define pi acos(-1.)
#define deg pi/180.
#define time iTime*2.*pi/10.
#define R iResolution.xy
#define ar R.x/R.y
#define M iMouse
#define xm (M.xy/R)
#define nm ((xm.xy-0.5)*vec2(ar,1.)+0.5)
mat2 r2d(float a) {
    return mat2(cos(a),sin(a),-sin(a),cos(a));
}

Buffer A (iChannel0)

// Vanguard Golf Hole — Sound Waves in the Dark / Black Hole Blue Light
// NOT fractal / NOT kaleidoscope — concentric ridges + cyan rim only
void mainImage(out vec4 fragColor, in vec2 fragCoord){
    vec2 uv = (fragCoord - 0.5*iResolution.xy) / iResolution.y;
    vec3 ro = vec3(0.0, 0.55, 1.55);
    vec3 ta = vec3(0.0, -0.05, 0.0);
    vec3 ww = normalize(ta - ro);
    vec3 uu = normalize(cross(ww, vec3(0.0,1.0,0.0)));
    vec3 vv = cross(uu, ww);
    vec3 rd = normalize(uv.x*uu + uv.y*vv + 1.35*ww);

    float t = 0.0; float hit = -1.0;
    for(int i=0;i<96;i++){
        vec3 p = ro + rd*t;
        // funnel bowl: y ~ r^2, hole at center
        float r = length(p.xz);
        float bowl = p.y + 0.35 - 0.55*r*r;
        // concentric sound-wave ridges (sin of radius only — NO angular fractal)
        float ridges = 0.018*sin(r*62.0 - iTime*1.8);
        float d = abs(bowl - ridges) - 0.012;
        // black void aperture
        float hole = max(r - 0.22, -p.y - 0.05);
        d = min(d, hole);
        if(d < 0.001){ hit = d; break; }
        t += clamp(d, 0.004, 0.08);
        if(t > 6.0) break;
    }

    vec3 col = vec3(0.0);
    if(hit > -0.5){
        vec3 p = ro + rd*t;
        float r = length(p.xz);
        // numeric normal
        vec2 e = vec2(0.002,0.0);
        // re-evaluate SDF for normal
        #define SDF(Q) (abs((Q).y + 0.35 - 0.55*dot((Q).xz,(Q).xz) - 0.018*sin(length((Q).xz)*62.0 - iTime*1.8)) - 0.012)
        vec3 n = normalize(vec3(
            SDF(p+e.xyy)-SDF(p-e.xyy),
            SDF(p+e.yxy)-SDF(p-e.yxy),
            SDF(p+e.yyx)-SDF(p-e.yyx)
        ));
        vec3 light = normalize(vec3(0.75 + 0.25*sin(iTime), 0.85, 0.35));
        float diff = clamp(dot(n, light), 0.0, 1.0);
        float fres = pow(1.0 - clamp(dot(n, -rd), 0.0, 1.0), 3.0);
        // cyan electric rim + deep navy body — black void center
        vec3 cyan = vec3(0.15, 0.75, 1.0);
        vec3 navy = vec3(0.02, 0.06, 0.14);
        float voidM = smoothstep(0.28, 0.18, r);
        col = mix(navy*(0.15+0.85*diff), vec3(0.0), voidM);
        col += cyan * fres * (0.55 + 0.45*sin(r*40.0 - iTime*2.2));
        col += cyan * 0.35 * smoothstep(0.02, 0.0, abs(r-0.22));
        // fine grain shimmer (dot pixels) — not fractal
        float grain = fract(sin(dot(fragCoord.xy + iTime, vec2(12.9898,78.233))) * 43758.5453);
        col += (grain-0.5) * 0.03 * (1.0-voidM);
        // soft bloom-ish glow on rim
        col += cyan * 0.12 * fres * fres;
    } else {
        // deep black stage
        col = vec3(0.0);
        float vig = smoothstep(1.2, 0.2, length(uv));
        col += vec3(0.01,0.03,0.06)*(1.0-vig)*0.4;
    }
    col = tanh(col*1.4);
    fragColor = vec4(col, 1.0);
}

More shaders by joeyw_vanguard_hole

Browse all public shaders · All shaders by joeyw_vanguard_hole · ShaderKit home

Vibe Mode BETA
💰 ~0 credits
Uniforms
FPS: 0
Time: 0
Resolution: 0 x 0

Account

FPS: -- Time: -- --×-- 1x