From 8fd3eda0ed069b1a817261f8f4d6a35c565b3fe4 Mon Sep 17 00:00:00 2001 From: skal Date: Sun, 22 Mar 2026 23:17:50 +0100 Subject: fix(cnn_v3): shadow pass — 5 bugs fixed, labels in gbuf_view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Camera Y-inversion: proj.m[5] = -proj.m[5] in upload_scene_data + WGPUFrontFace_CCW on raster pipeline. 2. Shadow formula: replace shadowWithStoredDistance with 64-step IQ soft shadow (8*d/t, unbounded). 3. Local→world SDF scale: d *= length(obj.model[0].xyz). 4. Shadow bias: use rasterized normal from normal_mat_tex (binding 4) instead of light direction — fixes terminator self-shadow on spheres. 5. ShaderComposer: GBufViewEffect now resolves #include via ShaderComposer::Get().Compose(). Also: per-tile channel labels in gbuf_view.wgsl via debug_str. Scene simplified to 1 cube + 1 sphere for debugging (restore TODO). Scale propagation for pulsating sphere confirmed correct end-to-end. handoff(Gemini): shadow validated. Next: restore full scene in GBufferEffect::set_scene() (20 cubes + 4 spheres, 2 lights), then run training pass per cnn_v3/docs/HOWTO.md §3. --- TODO.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'TODO.md') diff --git a/TODO.md b/TODO.md index e855384..f97ef0e 100644 --- a/TODO.md +++ b/TODO.md @@ -64,11 +64,12 @@ Ongoing shader code hygiene for granular, reusable snippets. **Design:** `cnn_v3/docs/CNN_V3.md` | All phases 1–7 complete. Runtime pipeline operational. -**Current pipeline:** `GBufferEffect` → `GBufDeferredEffect` → sink (debug view: albedo×diffuse) +**Current pipeline:** `GBufferEffect` → `GBufDeferredEffect` → `GBufViewEffect` → sink + +**Shadow pass status:** ✅ Fixed and re-enabled. Cube + sphere shadows correct. Pulsating sphere scale confirmed correct end-to-end. Scene is currently simplified (1 cube + 1 sphere, 1 light) for debugging. **Active work:** -- [ ] Fix/validate shadow pass (`gbuf_shadow.wgsl`) — currently disabled in deferred -- [ ] Re-enable shadow in `GBufDeferredEffect` once validated +- [ ] Restore full scene in `GBufferEffect::set_scene()` (20 cubes + 4 spheres, 2 lights) - [ ] Run first real training pass — see `cnn_v3/docs/HOWTO.md` §3 **Pending (lower priority):** -- cgit v1.2.3