From d114c416864c85a8928abd2d7c42d8269f87fdce Mon Sep 17 00:00:00 2001 From: metallic77 <43163462+metallic77@users.noreply.github.com> Date: Mon, 1 May 2023 16:27:13 +0300 Subject: [PATCH] add night-mode (#414) * Update crt-consumer.slang Removed NTSC as it conflicts with saturation/hue, and can be used as a separate pass anyway. Fixed some mistakes. Massive speed-up from 120 fps to 450 fps on Intel HD630. * Update crt-gdv-mini-ultra.slang Removed NTSC, some corrections too. * Update zfast_crt_composite.slang * Update fake-crt-geom.slang * Add files via upload * add night_mode * Update lanczos16.slang fix minor artifacts * Brightness fix scanline.slang Permanent Brightness fix. No need to adjust "SCANLINE_BASE_BRIGHTNESS. * fix scanlines misalignment --- misc/night-mode.slangp | 4 +++ misc/shaders/night_mode.slang | 60 ++++++++++++++++++++++++++++++++ scanlines/shaders/scanline.slang | 11 ++---- windowed/shaders/lanczos16.slang | 4 +-- 4 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 misc/night-mode.slangp create mode 100644 misc/shaders/night_mode.slang diff --git a/misc/night-mode.slangp b/misc/night-mode.slangp new file mode 100644 index 0000000..ea98949 --- /dev/null +++ b/misc/night-mode.slangp @@ -0,0 +1,4 @@ +shaders = 1 + +shader0 = shaders/night_mode.slang +scale_type0 = source diff --git a/misc/shaders/night_mode.slang b/misc/shaders/night_mode.slang new file mode 100644 index 0000000..af84fa5 --- /dev/null +++ b/misc/shaders/night_mode.slang @@ -0,0 +1,60 @@ +#version 450 + +/* + 2023 + Night mode (!) by DariusG + +*/ + + +layout(push_constant) uniform Push +{ + vec4 SourceSize; + vec4 OriginalSize; + vec4 OutputSize; + float WP; + float strength; + +} params; +#pragma parameter WP "Color Temperature" 0.1 0.0 0.25 0.01 +#pragma parameter strength "Night mode Strength" 0.8 0.5 1.0 0.05 + +#define WP params.WP +#define strength params.strength + + +layout(std140, set = 0, binding = 0) uniform UBO +{ + mat4 MVP; + vec4 FinalViewportSize; + vec4 OutputSize; +} global; + +#pragma stage vertex +layout(location = 0) in vec4 Position; +layout(location = 1) in vec2 TexCoord; +layout(location = 0) out vec2 vTexCoord; + +void main() +{ + gl_Position = global.MVP * Position; + vTexCoord = TexCoord; + +} + +#pragma stage fragment +layout(location = 0) in vec2 vTexCoord; +layout(location = 0) out vec4 FragColor; +layout(set = 0, binding = 1) uniform sampler2D Source; + + +void main() +{ + vec3 color = texture(Source, vTexCoord).rgb; + + color *= vec3(strength); + color = vec3(color.r+WP, color.g, color.b-WP); + + + FragColor = vec4(color,1.0); +} diff --git a/scanlines/shaders/scanline.slang b/scanlines/shaders/scanline.slang index a0fbf4f..35faab0 100644 --- a/scanlines/shaders/scanline.slang +++ b/scanlines/shaders/scanline.slang @@ -6,16 +6,13 @@ layout(push_constant) uniform Push vec4 OriginalSize; vec4 OutputSize; uint FrameCount; - float SCANLINE_BASE_BRIGHTNESS; float SCANLINE_SINE_COMP_A; float SCANLINE_SINE_COMP_B; } params; -#pragma parameter SCANLINE_BASE_BRIGHTNESS "Scanline Base Brightness" 0.95 0.0 1.0 0.01 #pragma parameter SCANLINE_SINE_COMP_A "Scanline Sine Comp A" 0.0 0.0 0.10 0.01 #pragma parameter SCANLINE_SINE_COMP_B "Scanline Sine Comp B" 0.15 0.0 1.0 0.05 -#define SCANLINE_BASE_BRIGHTNESS params.SCANLINE_BASE_BRIGHTNESS #define SCANLINE_SINE_COMP_A params.SCANLINE_SINE_COMP_A #define SCANLINE_SINE_COMP_B params.SCANLINE_SINE_COMP_B @@ -36,8 +33,7 @@ void main() { gl_Position = global.MVP * Position; vTexCoord = TexCoord*1.0001; - - omega = vec2(pi * params.OutputSize.x, 2.0 * pi * params.SourceSize.y); + omega = vec2(pi * params.OutputSize.x, 1.999 * pi * params.SourceSize.y); } #pragma stage fragment @@ -50,7 +46,6 @@ void main() { vec2 sine_comp = vec2(SCANLINE_SINE_COMP_A, SCANLINE_SINE_COMP_B); vec3 res = texture(Source, vTexCoord).xyz; - vec3 scanline = res * (SCANLINE_BASE_BRIGHTNESS + dot(sine_comp * sin(vTexCoord * omega), vec2(1.0, 1.0))); - FragColor = vec4(scanline.x, scanline.y, scanline.z, 1.0); + vec3 scanline = res * ((1.0-SCANLINE_SINE_COMP_B*0.5) + dot(sine_comp * sin(vTexCoord * omega), vec2(1.0, 1.0))); + FragColor = vec4(scanline, 1.0); } - diff --git a/windowed/shaders/lanczos16.slang b/windowed/shaders/lanczos16.slang index 7320452..dad2749 100644 --- a/windowed/shaders/lanczos16.slang +++ b/windowed/shaders/lanczos16.slang @@ -60,7 +60,7 @@ layout(location = 4) out vec4 t4; void main() { gl_Position = global.MVP * Position; - vTexCoord = TexCoord * 1.000001; + vTexCoord = TexCoord * 1.0001; vec2 ps = params.SourceSize.zw; float dx = ps.x; float dy = ps.y; @@ -118,4 +118,4 @@ void main() // final sum and weight normalization FragColor = vec4(((pix * pqrs))/((dot(abcd, vec4(1.0))*dot(pqrs, vec4(1.0)))-2*(abcd.x+abcd.w)*(pqrs.x+pqrs.w)),1); -} \ No newline at end of file +}