From 9048115d66cb5ad18e37aad7d48cb6a708b3c3d5 Mon Sep 17 00:00:00 2001 From: skal Date: Mon, 2 Feb 2026 14:05:31 +0100 Subject: fix(3d): Resolve shader validation error and tune shadows - Fixed 'redefinition of light_dir' shader validation error by centralizing the light definition at the top of fs_main. - Further brightened the floor in 'test_3d_render' for better shadow contrast. - Reduced shadow bias and made the light more vertical to ensure shadows are clearly visible on all surfaces. --- src/3d/renderer.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/3d') diff --git a/src/3d/renderer.cc b/src/3d/renderer.cc index 3280df7..cc2124e 100644 --- a/src/3d/renderer.cc +++ b/src/3d/renderer.cc @@ -151,7 +151,7 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { var p: vec3; var normal: vec3; - let light_dir = normalize(vec3(1.0, 1.0, 1.0)); + let light_dir = normalize(vec3(0.2, 1.0, 0.2)); // More vertical light for easier shadow debugging if (obj_type == 0.0) { // Rasterized object p = in.world_pos; @@ -219,10 +219,9 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let n_local = normalize(vec3(d_x1 - d_x2, d_y1 - d_y2, d_z1 - d_z2)); - normal = normalize(mat3 * n_local); - } + let n_world = mat3 * n_local; + let normal = normalize(n_world); - let light_dir = normalize(vec3(0.2, 1.0, 0.2)); // More vertical light for easier shadow debugging let shadow = calc_shadow(p + normal * 0.01, light_dir, 0.0, 20.0); let lighting = (max(dot(normal, light_dir), 0.0) * shadow) + 0.1; -- cgit v1.2.3