uniform shader image; uniform float2 imageSize; uniform float scale; float luma(float3 color) { return dot(color, float3(0.299, 0.587, 0.114)); } half4 main(float2 coord) { float2 uv = coord / imageSize; uv.y = 1.0 - uv.y; float2 center = float2(0.5); float noiseScale = 1.; float radius = 0.5; float2 d = uv - center; float r = length(d * float2(1., imageSize.y / imageSize.x)) * scale; float a = atan(d.y, d.x) + noiseScale * (radius - r) / radius; float2 uvt = center + r * float2(cos(a), sin(a)); float c = (.75 + .25 * sin(uvt.x * 1000.)); float4 color = unpremul(image.eval(coord)); float l = luma(color.rgb); float f = smoothstep(.5 * c, c, l); f = smoothstep(0., .5, f); float3 col = float3(f); return float4(col * color.a, color.a); }