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 !

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;

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

My normals and cull are fine... :(

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.

7 days later

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 !

2 months later

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

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

@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.

a year later

My solution to this (I'm using screen reading shader to create a blur effect at speed) was to fake the transparency with dithering - you can either find a shader that does it on the Godot subreddit or check the Spatial Material Distance Fade dither after converting it to a shader.

a year later