I use blender game engine and blender uses OpenGL for graphics. How can I draw lines around all 3D objects? Would this be a job for a filter? Mainly, I want my end result to look drawn.

I found this:

uniform sampler2D bgl_RenderedTexture;
uniform sampler2D bgl_DepthTexture;

void main()
   float depth = texture2D( bgl_DepthTexture, gl_TexCoord[0].xy).r;
   float depth2 = texture2D( bgl_DepthTexture, gl_TexCoord[0].xy + vec2(0,0.002)).r;
   float depth3 = texture2D( bgl_DepthTexture, gl_TexCoord[0].xy + vec2(0.002,0)).r;
   float fac = abs(depth-depth2) + abs(depth-depth3);
   float intensity = 9050;  

   vec4 sub = vec4(fac*intensity,fac*intensity,fac*intensity,0);
   gl_FragColor = texture2D( bgl_RenderedTexture, gl_TexCoord[0].xy ) - sub;

#change float intensity

here and that seems to work, but I need it to look more sketched. So I would like some noise influence. Maybe it's called sinus displacement? Is there a way to do that?

I draw and I want the style to look like this. Thanks.

Disclaimer: I do hang out on BSE and this is not a question they are prepared to answer or is it necessarily on-topic for them, since it is about OpenGL.

  • \$\begingroup\$ What you want to Google is "NPR Shaders". \$\endgroup\$ Commented Dec 10, 2015 at 22:10
  • \$\begingroup\$ The sample of what you want it to look like now "doesn't exist or is private". \$\endgroup\$ Commented Jan 23, 2021 at 15:47

1 Answer 1


Here's some code that hopefully gives you the effect you are looking for. It works similar to your original code, but has some added code to help get a brighter pop.

uniform sampler2D bgl_RenderedTexture;
uniform sampler2D bgl_DepthTexture;
uniform vec2 bgl_TextureCoordinateOffset[9];

const float near = 0.1;
const float far = 100.0;

float depth(in vec2 coo)
 vec4 depth =  texture2D(bgl_DepthTexture, coo);
 return -near / (-1.0+float(depth) * ((far-near)/far));

void main(void)

    vec4 sample[9];
    vec4 border;
    vec4 texcol = texture2D(bgl_RenderedTexture, gl_TexCoord[0].st);

    for (int i = 0; i < 9; i++)
        sample[i] = vec4(depth(gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i])); 

    vec4 horizEdge = sample[2] + sample[5] + sample[8] -
                     (sample[0] + sample[3] + sample[6]);

    vec4 vertEdge = sample[0] + sample[1] + sample[2] -
                    (sample[6] + sample[7] + sample[8]);

    border.rgb = sqrt((horizEdge.rgb * horizEdge.rgb) + 
                            (vertEdge.rgb * vertEdge.rgb));

       if (border.r > 0.8||border.g > 0.8||border.b > 0.8){
        gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
  gl_FragColor.rgb = texcol.rgb;
        gl_FragColor.a = 1.0;
  • 3
    \$\begingroup\$ It would be worth talking about what this code does, and why it's doing that. \$\endgroup\$ Commented Jan 23, 2021 at 15:45

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .