diff options
Diffstat (limited to 'src/effects/ntsc.wgsl')
| -rw-r--r-- | src/effects/ntsc.wgsl | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/effects/ntsc.wgsl b/src/effects/ntsc.wgsl index 31d4e0d..6c9fa37 100644 --- a/src/effects/ntsc.wgsl +++ b/src/effects/ntsc.wgsl @@ -3,9 +3,8 @@ #include "render/fullscreen_uv_vs" #include "math/noise" -const f32 vignetteRounding = 160.0f; -const f32 vignetteSmoothness = 0.7f; - +const vignetteRounding = 160.0f; +const vignetteSmoothness = 0.7f; @group(0) @binding(0) var input_sampler: sampler; @group(0) @binding(1) var input_texture: texture_2d<f32>; @@ -13,15 +12,14 @@ const f32 vignetteSmoothness = 0.7f; // Barrel (fisheye) distortion: strength > 0 = barrel, < 0 = pincushion fn fisheye(uv: vec2f, strength: f32) -> vec2f { - let c = uv * 2.0 - 1.0; - let r2 = c * c; - return uv * 1.03 * (1.0 + vec2f(.1, .24) * strength * r2); + let r2 = uv * uv; + return uv * 1.05 * (1.0 + vec2f(.1, .24) * strength * r2); } -fn vignette(vec2f uv) -> f32 { - uv *= 1.99; - f32 amount = 1.0 - sqrt(pow(abs(uv.x), vignetteRounding) + pow(abs(uv.y), vignetteRounding)); - f32 vhard = smoothstep(0., vignetteSmoothness, amount); +fn vignette(uv: vec2f) -> f32 { + let uv2 = uv * 1.99; + let amount = 1.0 - sqrt(pow(abs(uv2.x), vignetteRounding) + pow(abs(uv2.y), vignetteRounding)); + let vhard = smoothstep(0., vignetteSmoothness, amount); return vhard; } @@ -29,8 +27,8 @@ fn vignette(vec2f uv) -> f32 { let t = uniforms.time; // Fisheye/barrel distortion - let uv = fisheye(in.uv, 0.18); - uv = vignette(uv); + let uv = (fisheye(in.st, 0.18) + 1.) * .5; +// uv = vignette(uv); // Black outside screen edges if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) { |
