From a85b0279fd6f592ed5cfcbd2d5038d2387e49443 Mon Sep 17 00:00:00 2001 From: Alex Threlfo Date: Fri, 13 Dec 2024 18:42:03 +1100 Subject: [PATCH] fix: space transformations in WorldPositionFromDepth visual shader node generation --- scene/resources/visual_shader_nodes.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scene/resources/visual_shader_nodes.cpp b/scene/resources/visual_shader_nodes.cpp index b831a3835a0..f96dc860814 100644 --- a/scene/resources/visual_shader_nodes.cpp +++ b/scene/resources/visual_shader_nodes.cpp @@ -1747,12 +1747,13 @@ String VisualShaderNodeWorldPositionFromDepth::generate_code(Shader::Mode p_mode code += " float __log_depth = textureLod(" + make_unique_id(p_type, p_id, "depth_tex") + ", " + uv + ", 0.0).x;\n"; if (!RenderingServer::get_singleton()->is_low_end()) { - code += " vec4 __depth_view = INV_PROJECTION_MATRIX * vec4(" + uv + " * 2.0 - 1.0, __log_depth, 1.0);\n"; + code += " vec4 __ndc = vec4(" + uv + " * 2.0 - 1.0, __log_depth, 1.0);\n"; } else { - code += " vec4 __depth_view = INV_PROJECTION_MATRIX * vec4(vec3(" + uv + ", __log_depth) * 2.0 - 1.0, 1.0);\n"; + code += " vec4 __ndc = vec4(vec3(" + uv + ", __log_depth) * 2.0 - 1.0, 1.0);\n"; } - code += " __depth_view.xyz /= __depth_view.w;\n"; - code += vformat(" %s = (INV_VIEW_MATRIX * __depth_view).xyz;\n", p_output_vars[0]); + code += " vec4 __position_world = INV_VIEW_MATRIX * INV_PROJECTION_MATRIX * __ndc;\n"; + code += " __position_world.xyz /= __position_world.w;\n"; + code += vformat(" %s = __position_world.xyz;\n", p_output_vars[0]); code += " }\n"; return code;