summaryrefslogtreecommitdiff
path: root/assets/final/shaders/mesh_render.wgsl
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-06 08:46:20 +0100
committerskal <pascal.massimino@gmail.com>2026-02-06 08:46:20 +0100
commit7d60a8a9ece368e365b5c857600004298cb89526 (patch)
treeaa394cb9823939c561b8fb09897f1e192a4059ad /assets/final/shaders/mesh_render.wgsl
parent180b0961a2216279024b4d35229d105d95a61878 (diff)
fix: Correct mesh normal transformation and floor shadow rendering
Diffstat (limited to 'assets/final/shaders/mesh_render.wgsl')
-rw-r--r--assets/final/shaders/mesh_render.wgsl9
1 files changed, 4 insertions, 5 deletions
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<f32>(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<f32>(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<f32> {
let lit_color = calculate_lighting(in.color.rgb, in.normal, in.world_pos, shadow);
return vec4<f32>(lit_color, in.color.a);
-}
+} \ No newline at end of file