summaryrefslogtreecommitdiff
path: root/cnn_v3/tools/shaders.js
diff options
context:
space:
mode:
Diffstat (limited to 'cnn_v3/tools/shaders.js')
-rw-r--r--cnn_v3/tools/shaders.js7
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));}`;