diff options
Diffstat (limited to 'src/effects/ntsc.wgsl')
| -rw-r--r-- | src/effects/ntsc.wgsl | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/effects/ntsc.wgsl b/src/effects/ntsc.wgsl index b333163..31d4e0d 100644 --- a/src/effects/ntsc.wgsl +++ b/src/effects/ntsc.wgsl @@ -3,6 +3,10 @@ #include "render/fullscreen_uv_vs" #include "math/noise" +const f32 vignetteRounding = 160.0f; +const f32 vignetteSmoothness = 0.7f; + + @group(0) @binding(0) var input_sampler: sampler; @group(0) @binding(1) var input_texture: texture_2d<f32>; @group(0) @binding(2) var<uniform> uniforms: UniformsSequenceParams; @@ -13,11 +17,20 @@ fn fisheye(uv: vec2f, strength: f32) -> vec2f { let r2 = c * c; return uv * 1.03 * (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); + return vhard; +} + @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4f { let t = uniforms.time; // Fisheye/barrel distortion let uv = fisheye(in.uv, 0.18); + uv = vignette(uv); // Black outside screen edges if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) { |
