diff options
| author | skal <pascal.massimino@gmail.com> | 2026-03-23 00:43:20 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-03-23 00:43:20 +0100 |
| commit | 13cf1438caa56b34529d4031ddf73d38286b70e5 (patch) | |
| tree | b8de1b0a597edcbfadcea5fca862be4b3d72a3db /cnn_v3/tools/shaders.js | |
| parent | 1470dd240f48652d1fe97957fe44a49b0e1ee9a6 (diff) | |
feat(cnn_v3): shadow→dif migration complete (ch18)
Replace raw shadow (ch18) with dif = max(0,dot(normal,KEY_LIGHT))*shadow
across all layers. Channel count stays 20, weight shapes unchanged.
- gbuf_pack.wgsl: t1.z = pack4x8unorm(mip2.g, mip2.b, dif, transp); t1.w = 0u
- gbuf_deferred.wgsl: read dif from unpack4x8unorm(t1.z).z
- gbuf_view.wgsl: revert to 4×5 grid, ch18=dif label, ch19=trns label
- tools/shaders.js: FULL_PACK_SHADER adds oct_decode + computes dif
- cnn_v3_utils.py: assemble_features() computes dif on-the-fly via oct_decode
- docs: CNN_V3.md, HOWTO.md, HOW_TO_CNN.md, GBUF_DIF_MIGRATION.md updated
handoff(Gemini): shadow→dif migration done, ready for first training pass
Diffstat (limited to 'cnn_v3/tools/shaders.js')
| -rw-r--r-- | cnn_v3/tools/shaders.js | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/cnn_v3/tools/shaders.js b/cnn_v3/tools/shaders.js index f178637..6c49864 100644 --- a/cnn_v3/tools/shaders.js +++ b/cnn_v3/tools/shaders.js @@ -272,6 +272,10 @@ const FULL_PACK_SHADER=` @group(0) @binding(5) var transp: texture_2d<f32>; @group(0) @binding(6) var f0: texture_storage_2d<rgba32uint,write>; @group(0) @binding(7) var f1: texture_storage_2d<rgba32uint,write>; +fn oct_decode(f:vec2f)->vec3f{ + var n=vec3f(f.x,f.y,1.-abs(f.x)-abs(f.y)); + if(n.z<0.){n.x=(1.-abs(f.y))*sign(f.x); n.y=(1.-abs(f.x))*sign(f.y);} + return normalize(n);} fn ld(c:vec2i,d:vec2i)->f32{return textureLoad(depth,clamp(c,vec2i(0),d-vec2i(1)),0).r;} fn b2(tl:vec2i,d:vec2i)->vec3f{ var s=vec3f(0.); @@ -299,9 +303,10 @@ fn main(@builtin(global_invocation_id) id:vec3u){ let mid=textureLoad(matid,c,0).r; let shd=textureLoad(shadow,c,0).r; let trp=textureLoad(transp,c,0).r; + let dif=max(0.,dot(oct_decode(oct),vec3f(0.408,0.816,0.408)))*shd; let m1=b2(c-vec2i(0),d); let m2=b4(c-vec2i(1),d); textureStore(f1,c,vec4u( pack4x8unorm(vec4f(mid,0.,0.,0.)), pack4x8unorm(vec4f(m1.r,m1.g,m1.b,m2.r)), - pack4x8unorm(vec4f(m2.g,m2.b,shd,trp)), + pack4x8unorm(vec4f(m2.g,m2.b,dif,trp)), 0u));}`; |
