This is the testing Godot forums! All forum posts unique to this forum will be deleted! Please use the main forums here for any posts you want to keep. All forum rules still apply.

Postprocessing with depth pass and transparent objects

panicqpanicq Posts: 54Member

Hey

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 (https://docs.godotengine.org/en/3.1/tutorials/shading/advanced_postprocessing.html) 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 !

Comments

  • MegalomaniakMegalomaniak Posts: 2,580Admin
    edited March 2020

    Make sure the transparent objects are using depth draw alpha pre-pass:
    https://docs.godotengine.org/en/stable/tutorials/3d/spatial_material.html#depth-draw-mode

    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: 2,580Admin

    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: 693Moderator

    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: 216Member

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

  • MegalomaniakMegalomaniak Posts: 2,580Admin

    @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

Rich Text Editor. To edit a paragraph's style, hit tab to get to the paragraph menu. From there you will be able to pick one style. Nothing defaults to paragraph. An inline formatting menu will show up when you select text. Hit tab to get into that menu. Some elements, such as rich link embeds, images, loading indicators, and error messages may get inserted into the editor. You may navigate to these using the arrow keys inside of the editor and delete them with the delete or backspace key.