#define PI 3.141592653589793 float sdEllipse(vec2 p, vec2 r) { vec2 q = p / r; return (length(q) - 1.0) * min(r.x, r.y); } float sdCircle(vec2 p, float r) { return length(p) - r; } float sdBox(vec2 p, vec2 b) { vec2 d = abs(p) - b; return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); } float opStroke(float d, float w) { return abs(d) - w; } float fill(float d) { return 1.0 - smoothstep(0.0, 0.004, d); } float stroke(float d, float w) { return 1.0 - smoothstep(0.0, 0.004, opStroke(d, w)); } // Simple dollar sign SDF-ish shape float dollarSign(vec2 p) { float s = 0.0; // main vertical bar float bar = fill(sdBox(p, vec2(0.018, 0.18))); // upper curve vec2 pu = p - vec2(0.02, 0.07); float upperOuter = stroke(sdCircle(pu, 0.11), 0.020); float upperCut = fill(sdBox(pu - vec2(-0.07, 0.00), vec2(0.08, 0.14))); float upper = upperOuter * (1.0 - upperCut); // lower curve vec2 pl = p - vec2(-0.02, -0.07); float lowerOuter = stroke(sdCircle(pl, 0.11), 0.020); float lowerCut = fill(sdBox(pl - vec2(0.07, 0.00), vec2(0.08, 0.14))); float lower = lowerOuter * (1.0 - lowerCut); s = max(bar, max(upper, lower)); return s; } void mainImage(out vec4 fragColor, in vec2 fragCoord) { vec2 uv = fragCoord.xy / iResolution.xy; vec4 base = texture(iChannel0, uv); vec3 col = base.rgb; // ------------------------------------------------------------------ // Bouncing "DVD logo" style motion // ------------------------------------------------------------------ vec2 logoSize = vec2(0.23, 0.13); // width/height of medallion in UV space vec2 minP = logoSize * 0.5 + vec2(0.03, 0.04); vec2 maxP = vec2(1.0) - minP; // Ping-pong motion vec2 travel = maxP - minP; vec2 phase = fract(vec2(iTime * 0.070, iTime * 0.052) + vec2(0.17, 0.61)); vec2 tri = abs(phase * 2.0 - 1.0); vec2 center = minP + travel * tri; // Local coordinates around logo center vec2 p = uv - center; p.x *= iResolution.x / iResolution.y; // aspect correction // ------------------------------------------------------------------ // Cash Money inspired medallion // ------------------------------------------------------------------ float outer = sdEllipse(p, vec2(0.17, 0.095)); float inner = sdEllipse(p, vec2(0.145, 0.078)); float core = sdEllipse(p, vec2(0.122, 0.060)); float outerFill = fill(outer); float innerRing = stroke(inner, 0.010); float coreFill = fill(core); // Rim beading / jewelry vibe float angle = atan(p.y, p.x); float beads = pow(0.5 + 0.5 * sin(angle * 26.0 - iTime * 2.2), 8.0); beads *= stroke(sdEllipse(p, vec2(0.158, 0.086)), 0.008); // Chrome/gold light sweep float sweep = pow(max(0.0, sin((uv.x * 4.0 + uv.y * 2.6) * PI * 2.0 - iTime * 1.7)), 18.0); vec3 darkGold = vec3(0.28, 0.12, 0.02); vec3 gold = vec3(0.95, 0.67, 0.16); vec3 paleGold = vec3(1.00, 0.88, 0.52); vec3 diamond = vec3(1.00, 0.96, 0.85); vec3 logoCol = vec3(0.0); // outer medallion logoCol += outerFill * mix(darkGold, gold, 0.65); logoCol += innerRing * paleGold * 0.9; logoCol += beads * paleGold * 0.8; logoCol += coreFill * mix(gold, paleGold, 0.35); // embossed center float emboss = 0.5 + 0.5 * sin(p.x * 28.0 + p.y * 12.0 - iTime * 0.6); logoCol += coreFill * emboss * vec3(0.10, 0.05, 0.01); // dollar sign centerpiece float ds = dollarSign(p * 1.7); logoCol = mix(logoCol, diamond, ds * 0.9); logoCol += ds * paleGold * 0.35; // little sparkle hits float sparkle1 = exp(-length((p - vec2(-0.07, 0.03)) * vec2(1.0, 1.2)) * 60.0); float sparkle2 = exp(-length((p - vec2(0.08, -0.01)) * vec2(1.0, 1.2)) * 80.0); float cross1 = (1.0 - smoothstep(0.0, 0.004, abs(p.x + 0.07))) * (1.0 - smoothstep(0.0, 0.05, abs(p.y - 0.03))); cross1 += (1.0 - smoothstep(0.0, 0.004, abs(p.y - 0.03))) * (1.0 - smoothstep(0.0, 0.05, abs(p.x + 0.07))); float cross2 = (1.0 - smoothstep(0.0, 0.003, abs(p.x - 0.08))) * (1.0 - smoothstep(0.0, 0.04, abs(p.y + 0.01))); cross2 += (1.0 - smoothstep(0.0, 0.003, abs(p.y + 0.01))) * (1.0 - smoothstep(0.0, 0.04, abs(p.x - 0.08))); float twinkle = 0.65 + 0.35 * sin(iTime * 5.0); logoCol += (sparkle1 * cross1 + sparkle2 * cross2) * paleGold * twinkle * 0.9; // moving light sweep across logo logoCol += outerFill * sweep * vec3(1.0, 0.92, 0.60) * 0.45; // subtle shadow behind logo float shadow = fill(sdEllipse(p - vec2(0.010, -0.010), vec2(0.17, 0.095))); shadow *= 0.18; // Logo mask float logoMask = outerFill; // Keep it in background so text stays readable // Darken behind medallion slightly, then add logo col = mix(col, col * 0.82, shadow); col = mix(col, col + logoCol, logoMask * 0.32); fragColor = vec4(clamp(col, 0.0, 1.0), base.a); }