uniform shader image; uniform float2 imageSize; uniform float amount; uniform float angle; float4 imageEval(float2 uv) { uv.y = 1.0 - uv.y; float2 coord = uv * imageSize; return unpremul(image.eval(coord)); } half4 main(float2 coord) { float2 uv = coord / imageSize; uv.y = 1.0 - uv.y; float2 offset = amount * float2(sin(angle), cos(angle)); float2 greenAlpha = unpremul(image.eval(coord)).ga; float2 redAlpha = imageEval(uv + offset).ra; float2 blueAlpha = imageEval(uv - offset).ba; float3 color = float3(redAlpha.x, greenAlpha.x, blueAlpha.x); float avgAlpha = (redAlpha.y + greenAlpha.y + blueAlpha.y) / 3.0; return float4(color * avgAlpha, avgAlpha); }