Extending the sample shader linked by @NoviceInDisguise:
How it works: the shader gets the rendered image as a texture its x/y coordinates range from 0 to 1.0
The distance from center is calculated by sqrt(x*x+y*y) > .3
to exclude a circular region from blur.
uniform sampler2D bgl_RenderedTexture;
void main(void)
{
vec4 texcolor = texture2D(bgl_RenderedTexture, gl_TexCoord[0].st);
float x = gl_TexCoord[0].st.x - .5;
float y = gl_TexCoord[0].st.y - .5;
if ( sqrt(x*x+y*y) > .3 ) {
float value = 0.0015;
vec4 color = texture2D(bgl_RenderedTexture, vec2(gl_TexCoord[0].st.x + value, gl_TexCoord[0].st.y + value)); // Sample area around current pixel
color += texture2D(bgl_RenderedTexture, vec2(gl_TexCoord[0].st.x - value, gl_TexCoord[0].st.y - value));
color += texture2D(bgl_RenderedTexture, vec2(gl_TexCoord[0].st.x + value, gl_TexCoord[0].st.y - value));
color += texture2D(bgl_RenderedTexture, vec2(gl_TexCoord[0].st.x - value, gl_TexCoord[0].st.y + value));
color /= 4.0;
gl_FragColor = color;
}
else {
gl_FragColor =texcolor;
}
}
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/c7P0I.png)
Node setup: Add a Filter 2D configure it as Custom Shader and select the above script.
Sample render
Disclaimer: A decent blur needs to incorporate values from a 3x3, 5x5 or bigger matrix, the sample code only uses the left and right neighbor.