From f1a19d871ef8cd74557dc724e0b1b01989423ff1 Mon Sep 17 00:00:00 2001 From: metallic77 <43163462+metallic77@users.noreply.github.com> Date: Mon, 19 Jun 2023 10:43:11 +0300 Subject: [PATCH] Update zfast_crt_composite.slang 1:1 with glsl --- .../zfast_crt/zfast_crt_composite.slang | 71 +++++++++++-------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/crt/shaders/zfast_crt/zfast_crt_composite.slang b/crt/shaders/zfast_crt/zfast_crt_composite.slang index 5d62c8c..6e59006 100644 --- a/crt/shaders/zfast_crt/zfast_crt_composite.slang +++ b/crt/shaders/zfast_crt/zfast_crt_composite.slang @@ -19,16 +19,17 @@ layout(push_constant) uniform Push vec4 OriginalSize; vec4 OutputSize; uint FrameCount; -float pi, blurx, blury, HIGHSCANAMOUNT1, HIGHSCANAMOUNT2, MASK_DARK, MASK_FADE, sat; +float pi, blurx, blury, HIGHSCANAMOUNT1, HIGHSCANAMOUNT2, MASK_DARK, MASK_FADE, sat, FLICK; } params; #pragma parameter blurx "Convergence X-Axis" 0.45 -1.0 2.0 0.05 #pragma parameter blury "Convergence Y-Axis" -0.25 -1.0 1.0 0.05 -#pragma parameter HIGHSCANAMOUNT1 "Scanline Amount (Low)" 0.3 0.0 1.0 0.05 -#pragma parameter HIGHSCANAMOUNT2 "Scanline Amount (High)" 0.2 0.0 1.0 0.05 -#pragma parameter MASK_DARK "Mask Effect Amount" 0.25 0.0 1.0 0.05 -#pragma parameter MASK_FADE "Mask/Scanline Fade" 0.8 0.0 1.0 0.05 -#pragma parameter sat "Saturation" 1.1 0.0 3.0 0.05 +#pragma parameter HIGHSCANAMOUNT1 "Scanline Amount (Low)" 0.4 0.0 1.0 0.05 +#pragma parameter HIGHSCANAMOUNT2 "Scanline Amount (High)" 0.3 0.0 1.0 0.05 +#pragma parameter MASK_DARK "Mask Effect Amount" 0.3 0.0 1.0 0.05 +#pragma parameter MASK_FADE "Mask/Scanline Fade" 0.7 0.0 1.0 0.05 +#pragma parameter sat "Saturation" 1.0 0.0 3.0 0.05 +#pragma parameter FLICK "Flicker" 10.0 0.0 50.0 1.0 #define pi 3.14159 #define blurx params.blurx @@ -39,6 +40,10 @@ float pi, blurx, blury, HIGHSCANAMOUNT1, HIGHSCANAMOUNT2, MASK_DARK, MASK_FADE, #define MASK_DARK params.MASK_DARK #define MASK_FADE params.MASK_FADE #define sat params.sat +#define FLICK params.FLICK +#define SourceSize params.SourceSize +#define OriginalSize params.OriginalSize +#define OutputSize params.OutputSize layout(std140, set = 0, binding = 0) uniform UBO { @@ -65,35 +70,43 @@ layout(location = 1) in float maskFade; layout(location = 0) out vec4 FragColor; layout(set = 0, binding = 2) uniform sampler2D Source; +#define blur_y blury/(SourceSize.y*2.0) +#define blur_x blurx/(SourceSize.x*2.0) +#define iTimer (float(params.FrameCount)*2.0) +#define flicker FLICK/1000.0 + + void main() { - vec2 pos = vTexCoord.xy; + vec2 pos = vTexCoord; + float cent = floor(vTexCoord.y*SourceSize.y)+0.5; + float ycoord = cent*SourceSize.w; + pos = vec2(vTexCoord.x,ycoord); + vec3 sample1 = sin(iTimer)*flicker + texture(Source,vec2(pos.x + blur_x, pos.y - blur_y)).rgb; + vec3 sample2 = 0.5*texture(Source,pos).rgb; + vec3 sample3 = sin(iTimer)*flicker + texture(Source,vec2(pos.x - blur_x, pos.y + blur_y)).rgb; - vec3 sample1 = texture(Source,vec2(pos.x + blurx/1000.0, pos.y - blury/1000.0)).rgb; - vec3 sample2 = texture(Source,pos).rgb; - vec3 sample3 = texture(Source,vec2(pos.x - blurx/1000.0, pos.y + blury/1000.0)).rgb; + vec3 colour = vec3 (sample1.r*0.5 + sample2.r, + sample1.g*0.25 + sample2.g + sample3.g*0.25, + sample2.b + sample3.b*0.5); - vec3 colour = vec3 (sample1.r*0.5+sample2.r*0.5, sample1.g*0.25 + sample2.g*0.5 + sample3.g*0.25, sample2.b*0.5 + sample3.b*0.5); - float lum = colour.r*0.4 + colour.g*0.4 + colour.b*0.2; - - vec3 lumweight=vec3(0.3,0.6,0.1); - float gray = dot(colour,lumweight); - vec3 graycolour = vec3(gray); + vec3 lumweight=vec3(0.22,0.71,0.07); + float lum = dot(colour,lumweight); + + vec3 graycolour = vec3(lum); + colour = vec3(mix(graycolour,colour.rgb,sat)); - //Gamma-like - colour*=mix(0.4,1.0,lum); + float SCANAMOUNT = mix(HIGHSCANAMOUNT1,HIGHSCANAMOUNT2,max(max(colour.r,colour.g),colour.b)); - float SCANAMOUNT = mix(HIGHSCANAMOUNT1,HIGHSCANAMOUNT2,lum); - float scanLine = SCANAMOUNT * sin(2.0*pi*pos.y*params.SourceSize.y); - - float whichmask = fract((pos.x*params.OutputSize.x)*0.4999); - float mask = 1.0 + float(whichmask < 0.5) * -MASK_DARK; + float scanLine = SCANAMOUNT * sin(fract(vTexCoord.y*SourceSize.y)*3.14159)+1.0-SCANAMOUNT; + + if (OriginalSize.y > 400.0) scanLine = 1.0; - //Gamma-like - colour*=mix(1.5,1.0,lum); - - colour = vec3(mix(graycolour,colour,sat)); + float whichmask = fract(vTexCoord.x*OutputSize.x*0.4999); + float mask = 1.0 + float(whichmask < 0.5) * -MASK_DARK; - colour.rgb *= mix(mask*(1.0-scanLine), 1.0-scanLine, dot(colour,vec3(maskFade))); + colour *= colour; + colour.rgb *= mix(mask*scanLine, scanLine, dot(colour.rgb,vec3(maskFade))); + colour = sqrt(colour); FragColor.rgb = colour.rgb; -} +}