From be5b63ea000daca9458d7b92138ae36fabb9dd96 Mon Sep 17 00:00:00 2001 From: skal Date: Sun, 22 Mar 2026 19:31:50 +0100 Subject: feat(cnn_v3): Phase 4 — type-aware SDF in shadow pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dfWithID() in gbuf_shadow.wgsl now branches on obj.params.x (ObjectType) instead of using sdBox for everything: 0=CUBE → sdBox(lp, vec3(1)) 1=SPHERE → sdSphere(lp, 1.0) 2=PLANE → sdPlane(lp, vec3(0,1,0), obj.params.y) 3=TORUS → sdTorus(lp, vec2(0.8, 0.2)) 36/36 tests pass. --- cnn_v3/shaders/gbuf_shadow.wgsl | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'cnn_v3/shaders/gbuf_shadow.wgsl') diff --git a/cnn_v3/shaders/gbuf_shadow.wgsl b/cnn_v3/shaders/gbuf_shadow.wgsl index 36e7b28..0f5f8b4 100644 --- a/cnn_v3/shaders/gbuf_shadow.wgsl +++ b/cnn_v3/shaders/gbuf_shadow.wgsl @@ -35,9 +35,16 @@ fn dfWithID(p: vec3f) -> RayMarchResult { let n = u32(globals.params.x); for (var i = 0u; i < n; i++) { - let obj = object_data.objects[i]; - let lp = (obj.inv_model * vec4f(p, 1.0)).xyz; - let d = sdBox(lp, vec3f(1.0)); + let obj = object_data.objects[i]; + let lp = (obj.inv_model * vec4f(p, 1.0)).xyz; + let obj_type = u32(obj.params.x); + var d: f32; + switch obj_type { + case 1u: { d = sdSphere(lp, 1.0); } // SPHERE + case 2u: { d = sdPlane(lp, vec3f(0.0, 1.0, 0.0), obj.params.y); } // PLANE + case 3u: { d = sdTorus(lp, vec2f(0.8, 0.2)); } // TORUS + default: { d = sdBox(lp, vec3f(1.0)); } // CUBE (0) + fallback + } if (d < res.distance) { res.distance = d; res.object_id = f32(i + 1u); -- cgit v1.2.3