From 53b44f27edcf40e92818954660d0782613c84ec7 Mon Sep 17 00:00:00 2001 From: numzero Date: Sat, 29 Mar 2025 11:31:59 +0300 Subject: [PATCH] Different sort of glare? --- src/glare.wgsl | 49 ++++++++++++------------------------------------- 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/src/glare.wgsl b/src/glare.wgsl index 066db36..e9b2d29 100644 --- a/src/glare.wgsl +++ b/src/glare.wgsl @@ -21,7 +21,7 @@ fn on_vertex(in: Vertex) -> Varying { return Varying(uv, vec4(xy, 0., 1.)); } -const CUTOFF: i32 = 200; +const CUTOFF: i32 = 50; @fragment fn pass_h(in: Varying) -> @location(0) vec4f { @@ -33,8 +33,12 @@ fn pass_h(in: Varying) -> @location(0) vec4f { for (var x = a; x < b; x++) { let w = weight(x - pix.x); let pixel = textureLoad(tex, vec2i(x, pix.y), 0); - accum += w * pixel; + if (all(pixel >= vec4(0.))) { // excludes NaNs + accum += w * pixel; + } } +// accum.x = textureLoad(tex, pix, 0).x; +// accum.y = textureLoad(tex, pix, 0).y; return vec4(accum.xyz, params.sigma); } @@ -48,45 +52,16 @@ fn pass_v(in: Varying) -> @location(0) vec4f { for (var y = a; y < b; y++) { let w = weight(y - pix.y); let pixel = textureLoad(tex, vec2i(pix.x, y), 0); - accum += w * pixel; + if (all(pixel >= vec4(0.))) { // excludes NaNs + accum += w * pixel; + } } +// accum.x = textureLoad(tex, pix, 0).x; return vec4(accum.xyz, params.sigma); } -// fn weight(dist: i32) -> f32 { -// let σ = 50.; -// let d = f32(dist); -// let w = max(0., 1. - abs(d) / σ) / σ; -// return .1 * w; -// } - fn weight(dist: i32) -> f32 { - let σ = params.sigma / 1e5; + let σ = params.sigma / 1e4; let d = f32(dist) / σ; - return 3. / (1. + d*d); + return 1. / (1. + d*d); } - -// fn weight(dist: i32) -> f32 { -// let σ = params.sigma / 1e8; -// let d = f32(dist) / σ; -// return 3. / (1. + abs(d)); -// } - -// fn weight(dist: i32) -> f32 { -// let σ = params.sigma / 300.; -// let d = abs(f32(dist) / σ); -// return 1. / (1. + d*d*d) / σ; -// } - -// fn weight(dist: i32) -> f32 { -// let d = f32(abs(dist)); -// let c = mix(.01, 1., exp(-d*d)); -// // return c * pow(1.2, -d); -// return c / (1. + pow(d, 2.0)); -// // return .25 * c / (1. + pow(.1 * d, 4.0)); -// } - -// fn weight(dist: i32) -> f32 { -// let d = 2. * f32(dist); -// return exp(-d*d); -// }