Different sort of glare?

This commit is contained in:
numzero 2025-03-29 11:31:59 +03:00
parent 3e4de46b50
commit 53b44f27ed

View File

@ -21,7 +21,7 @@ fn on_vertex(in: Vertex) -> Varying {
return Varying(uv, vec4(xy, 0., 1.)); return Varying(uv, vec4(xy, 0., 1.));
} }
const CUTOFF: i32 = 200; const CUTOFF: i32 = 50;
@fragment @fragment
fn pass_h(in: Varying) -> @location(0) vec4f { 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++) { for (var x = a; x < b; x++) {
let w = weight(x - pix.x); let w = weight(x - pix.x);
let pixel = textureLoad(tex, vec2i(x, pix.y), 0); let pixel = textureLoad(tex, vec2i(x, pix.y), 0);
if (all(pixel >= vec4(0.))) { // excludes NaNs
accum += w * pixel; accum += w * pixel;
} }
}
// accum.x = textureLoad(tex, pix, 0).x;
// accum.y = textureLoad(tex, pix, 0).y;
return vec4(accum.xyz, params.sigma); 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++) { for (var y = a; y < b; y++) {
let w = weight(y - pix.y); let w = weight(y - pix.y);
let pixel = textureLoad(tex, vec2i(pix.x, y), 0); let pixel = textureLoad(tex, vec2i(pix.x, y), 0);
if (all(pixel >= vec4(0.))) { // excludes NaNs
accum += w * pixel; accum += w * pixel;
} }
}
// accum.x = textureLoad(tex, pix, 0).x;
return vec4(accum.xyz, params.sigma); 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 { fn weight(dist: i32) -> f32 {
let σ = params.sigma / 1e5; let σ = params.sigma / 1e4;
let d = f32(dist) / σ; 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);
// }