From e569352f0bf4b041a48cb331de1053382b6a7a03 Mon Sep 17 00:00:00 2001 From: TriVoxel Date: Mon, 5 May 2025 14:27:24 -0600 Subject: [PATCH] Light fixes to correct light culling. Now lights show up properly! --- .../clear_color_depth_pass/clear_color_depth_pass.json | 3 +-- leenkx/Shaders/deferred_light/deferred_light.frag.glsl | 4 ++-- leenkx/Shaders/include/pass_viewray.vert.glsl | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/leenkx/Shaders/clear_color_depth_pass/clear_color_depth_pass.json b/leenkx/Shaders/clear_color_depth_pass/clear_color_depth_pass.json index 05f2b658..5a7b5b93 100644 --- a/leenkx/Shaders/clear_color_depth_pass/clear_color_depth_pass.json +++ b/leenkx/Shaders/clear_color_depth_pass/clear_color_depth_pass.json @@ -9,8 +9,7 @@ "texture_params": [], "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "clear_color_depth_pass.frag.glsl", - "color_attachments": ["_HDR"], - "clear_depth": 0.0 + "color_attachments": ["_HDR"] } ] } diff --git a/leenkx/Shaders/deferred_light/deferred_light.frag.glsl b/leenkx/Shaders/deferred_light/deferred_light.frag.glsl index 40279882..8cbfbc97 100644 --- a/leenkx/Shaders/deferred_light/deferred_light.frag.glsl +++ b/leenkx/Shaders/deferred_light/deferred_light.frag.glsl @@ -478,8 +478,8 @@ void main() { #endif #ifdef _Clusters - // compute linear depth for clustering directly from the reconstructed view-space pos: - float viewz = length(viewPos); + // compute depth for clustering: use the view-space Z component (linearized depth) + float viewz = viewPos.z; int clusterI = getClusterI(texCoord, viewz, cameraPlane); int numLights = int(texelFetch(clustersData, ivec2(clusterI, 0), 0).r * 255); diff --git a/leenkx/Shaders/include/pass_viewray.vert.glsl b/leenkx/Shaders/include/pass_viewray.vert.glsl index af936e4b..0b5e056e 100644 --- a/leenkx/Shaders/include/pass_viewray.vert.glsl +++ b/leenkx/Shaders/include/pass_viewray.vert.glsl @@ -24,7 +24,8 @@ void main() { // gl_Position = vec4((gl_VertexID % 2) * 4.0 - 1.0, (gl_VertexID / 2) * 4.0 - 1.0, 0.0, 1.0); // For reverse-Z, the “far” plane lives at NDC z = 0 - vec4 v = vec4(pos.x, pos.y, 0.0, 1.0); + vec4 ndcFar = vec4(pos.x, pos.y, 0.0, 1.0); + vec4 v = invVP * ndcFar; v = vec4(invVP * v); v.xyz /= v.w; viewRay = v.xyz - eye;