diff options
Diffstat (limited to 'cnn_v3/shaders/gbuf_pack.wgsl')
| -rw-r--r-- | cnn_v3/shaders/gbuf_pack.wgsl | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/cnn_v3/shaders/gbuf_pack.wgsl b/cnn_v3/shaders/gbuf_pack.wgsl index 333589c..dd8d73b 100644 --- a/cnn_v3/shaders/gbuf_pack.wgsl +++ b/cnn_v3/shaders/gbuf_pack.wgsl @@ -86,6 +86,9 @@ fn pack_features(@builtin(global_invocation_id) id: vec3u) { let mat_id_u8 = nm.b; // mat_id already in [0,1] let shadow = textureLoad(gbuf_shadow, coord, 0).r; let transp = textureLoad(gbuf_transp, coord, 0).r; + let nor = oct_decode_unorm(nm.rg); + let diffuse = max(0.0, dot(nor, vec3f(0.408, 0.816, 0.408))); + let dif = diffuse * shadow; let prev = textureSampleLevel(prev_cnn, bilinear_sampler, uv, 0.0).rgb; // MIP 1: 2×2 box filter (half resolution context) @@ -103,13 +106,13 @@ fn pack_features(@builtin(global_invocation_id) id: vec3u) { // Texture 1: 4 u32, each = pack4x8unorm of four u8 values // [0] mat_id | prev.r | prev.g | prev.b // [1] mip1.r | mip1.g | mip1.b | mip2.r - // [2] mip2.g | mip2.b | shadow | transp - // [3] spare (0) + // [2] mip2.g | mip2.b | transp | (spare) + // [3] dif.r | dif.g | dif.b | (spare) — dif = diffuse*shadow (scalar, stored in all 3) let t1 = vec4u( pack4x8unorm(vec4f(mat_id_u8, prev.r, prev.g, prev.b)), pack4x8unorm(vec4f(mip1.r, mip1.g, mip1.b, mip2.r)), - pack4x8unorm(vec4f(mip2.g, mip2.b, shadow, transp)), - 0u + pack4x8unorm(vec4f(mip2.g, mip2.b, transp, 0.0)), + pack4x8unorm(vec4f(dif, dif, dif, 0.0)) ); textureStore(feat_tex1, coord, t1); } |
