Postprocessing with depth pass and transparent objects

panicqpanicq Posts: 54Member


I'm trying to create a custom post process on top of everything (including transparent objects) that requires the depth pass. I've tried using the screen-reading technique ( but SCREEN_TEXTURE grabs the screen before transparent objects are being drawn :( What would be the best way of doing this without rendering twice the scene ?

Thank you in advance !


  • MegalomaniakMegalomaniak Posts: 3,244Admin
    edited March 2020

    Make sure the transparent objects are using depth draw alpha pre-pass:

    edit: or maybe it should be always, one of those I think.

  • panicqpanicq Posts: 54Member
    edited March 2020

    Hum thanks it's half-resolving my issue as I now see my object, however the Albedo does not show anymore at some point when I'm rotating my camera, this is quite strange. Here is my transparent shader header, and I simply write to the ALPHA and ALBEDO in the frag.

    shader_type spatial;
    render_mode unshaded, depth_draw_alpha_prepass;
  • MegalomaniakMegalomaniak Posts: 3,244Admin

    Might some of your models normals be inverted? Might have to adjust the cull mode.

  • panicqpanicq Posts: 54Member
    edited March 2020

    My normals and cull are fine... :(

  • SIsilicon28SIsilicon28 Posts: 766Moderator

    This is simply a limitation of SCREEN_TEXTURE. It will only have opaque objects rendered in it. The reason why it shows as black might be because the depth was generated in a pre-pass, but no color information because transparent objects don't get rendered in it.

  • panicqpanicq Posts: 54Member

    Ok, sorry to bother you with my question. Assuming the fact that I want to use Viewports and no "hacky quad post process technique"; how could I setup a 2 pass shader using depth. Let me explain in details:

    I need to blur an object in the scene, but only one large object and this specific object intersects with others. So in the end I need depth information and two post process shaders. How can I do that properly in godot ? Thanks in advance !

  • RokasRokas Posts: 1Member

    Have you solved this? I'm having the same problem.

  • DschoonmakerDschoonmaker Posts: 220Member

    You could do it with a 2D shader, but I don't think the depth buffer can be accessed then.

  • MegalomaniakMegalomaniak Posts: 3,244Admin

    @Dschoonmaker said:
    You could do it with a 2D shader, but I don't think the depth buffer can be accessed then.

    @SIsilicon28 was/is working on giving access to buffers via viewport texture.

Leave a Comment

BoldItalicStrikethroughOrdered listUnordered list
Align leftAlign centerAlign rightToggle HTML viewToggle full pageToggle lights
Drop image/file