#define PI 3.141592653589793 float diamondAt(vec2 uv, vec2 c, float r) { vec2 q = (uv - c) * vec2(iResolution.x / iResolution.y, 1.0); return 1.0 - smoothstep(r * 0.20, r, abs(q.x) + abs(q.y)); } void mainImage(out vec4 fragColor, in vec2 fragCoord) { vec2 uv = fragCoord.xy / iResolution.xy; vec4 base = texture(iChannel0, uv); vec3 col = base.rgb; float edgeD = min(min(uv.x, 1.0 - uv.x), min(uv.y, 1.0 - uv.y)); float frame = 1.0 - smoothstep(0.0, 0.055, edgeD); float chrome = pow( 0.5 + 0.5 * sin((uv.x * 5.0 + uv.y * 3.0) * PI * 2.0 - iTime * 2.0), 3.0 ); float bead = pow( 0.5 + 0.5 * sin((uv.x + uv.y) * 120.0 + iTime * 1.7), 14.0 ); vec3 darkGold = vec3(0.23, 0.11, 0.02); vec3 hotGold = vec3(1.00, 0.82, 0.30); vec3 frameColor = mix(darkGold, hotGold, chrome); col = mix(col, col + frameColor * (0.20 + 0.35 * bead), frame * 0.55); // Big fake diamonds in the corners. float corners = 0.0; corners += diamondAt(uv, vec2(0.035, 0.045), 0.040); corners += diamondAt(uv, vec2(0.965, 0.045), 0.040); corners += diamondAt(uv, vec2(0.035, 0.955), 0.040); corners += diamondAt(uv, vec2(0.965, 0.955), 0.040); float twinkle = 0.75 + 0.25 * sin(iTime * 5.0); col += corners * vec3(1.0, 0.90, 0.55) * twinkle * 0.80; fragColor = vec4(clamp(col, 0.0, 1.0), base.a); }