From 7d60a8a9ece368e365b5c857600004298cb89526 Mon Sep 17 00:00:00 2001 From: skal Date: Fri, 6 Feb 2026 08:46:20 +0100 Subject: fix: Correct mesh normal transformation and floor shadow rendering --- assets/final/shaders/mesh_render.wgsl | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'assets/final/shaders/mesh_render.wgsl') diff --git a/assets/final/shaders/mesh_render.wgsl b/assets/final/shaders/mesh_render.wgsl index 3759747..3faf7ca 100644 --- a/assets/final/shaders/mesh_render.wgsl +++ b/assets/final/shaders/mesh_render.wgsl @@ -33,10 +33,9 @@ fn vs_main(in: VertexInput, @builtin(instance_index) instance_index: u32) -> Ver out.clip_pos = globals.view_proj * world_pos; out.world_pos = world_pos.xyz; - // Normal transform (assuming uniform scale or using transpose(inverse(model))) - // For simplicity, we use the same mat3 logic as renderer_3d.wgsl - let normal_matrix = mat3x3(obj.model[0].xyz, obj.model[1].xyz, obj.model[2].xyz); - out.normal = normalize(normal_matrix * in.normal); + // Use transpose of inverse for normals + let normal_matrix = mat3x3(obj.inv_model[0].xyz, obj.inv_model[1].xyz, obj.inv_model[2].xyz); + out.normal = normalize(transpose(normal_matrix) * in.normal); out.uv = in.uv; out.color = obj.color; @@ -56,4 +55,4 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let lit_color = calculate_lighting(in.color.rgb, in.normal, in.world_pos, shadow); return vec4(lit_color, in.color.a); -} +} \ No newline at end of file -- cgit v1.2.3