diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-06 09:46:10 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-06 09:46:10 +0100 |
| commit | f573e9e12855f9a90878c57d1083985dc29d75b5 (patch) | |
| tree | 2d1798b9b5e3190ca27274bb0997241c2a7d5f59 /src/3d/physics.cc | |
| parent | f87fed4fb8dbaba2406143168de6629d3d0a5a00 (diff) | |
fix(shaders): Exclude meshes from SDF scaling factor in shadow calculations
Fixed incorrect mesh shadow rendering caused by applying scale factor to
mesh AABBs which already have correct local-space extents.
ROOT CAUSE:
The 's' scale factor (line 44) is meant for UNIT primitives (sphere,
box, torus) that are scaled by the model matrix. Meshes (type 5.0)
already store their correct AABB extents in obj_params.yzw, so applying
's' caused incorrect shadow sizes.
ISSUE:
let s = min(length(obj.model[0].xyz), ...);
if (obj.params.x != 4.0) { // Excluded planes only
d = min(d, get_dist(q, obj.params) * s); // ❌ WRONG for meshes!
}
FIX:
if (obj.params.x != 4.0 && obj.params.x != 5.0) { // Exclude planes AND meshes
d = min(d, get_dist(q, obj.params) * s);
} else {
d = min(d, get_dist(q, obj.params)); // No scaling
}
EXPLANATION:
- Type 1.0 (Sphere): Unit sphere, scaled by 's' ✓
- Type 2.0 (Box): Unit box, scaled by 's' ✓
- Type 3.0 (Torus): Unit torus, scaled by 's' ✓
- Type 4.0 (Plane): Special case, no scaling ✓
- Type 5.0 (Mesh): AABB already has correct size, no scaling needed ✓
FILES FIXED:
- assets/final/shaders/render/scene_query_linear.wgsl
- assets/final/shaders/render/scene_query_bvh.wgsl
PARTIAL FIX:
This fixes mesh shadow sizing issues. Shadow rotation limitation remains
(AABBs are axis-aligned, don't rotate with mesh - this is a fundamental
AABB limitation, not a bug).
handoff(Claude): Mesh shadows now correctly sized. Investigating floor
shadow stretching issue next (likely related to plane scaling).
Diffstat (limited to 'src/3d/physics.cc')
0 files changed, 0 insertions, 0 deletions
