import postprocess; uniform Vignette { vec2 coord_scale; vec4 optical; vec2 optical_range; float natural; }; #pragma MSP stage(fragment) void main() { vec4 incoming = texture(source, texcoord); vec2 r = vertex.xy*coord_scale; float r_sq = dot(r, r); float vignette = 1.0; if(r_sq>=optical_range.y) vignette = 0.0; else if(r_sq>=optical_range.x) { float r = sqrt(r_sq)-optical.x; float v = (optical.z*acos(r/optical.y)-sqrt(optical.z-r*r)*r); vignette = v/optical.w; } float c_sq = 1/(1+r_sq*natural); vignette *= c_sq*c_sq; frag_color = vec4(incoming.rgb*vignette, incoming.a); }