Update crt-gdv-mini.slang (#434)

* Update crt-gdv-mini.slang

1:1 (almost) with glsl
This commit is contained in:
metallic77 2023-05-23 16:19:27 +03:00 committed by GitHub
parent 8592727b47
commit 5e55a8aadb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 23 deletions

View file

@ -61,10 +61,10 @@ layout(push_constant) uniform Push
#pragma parameter scanline "Scanline Adjust" 8.0 1.0 12.0 1.0 #pragma parameter scanline "Scanline Adjust" 8.0 1.0 12.0 1.0
#define scanline params.scanline #define scanline params.scanline
#pragma parameter beam_min "Scanline Dark" 1.7 0.5 3.0 0.05 #pragma parameter beam_min "Scanline Dark" 1.35 0.5 3.0 0.05
#define beam_min params.beam_min #define beam_min params.beam_min
#pragma parameter beam_max "Scanline Bright" 2.1 0.5 3.0 0.05 #pragma parameter beam_max "Scanline Bright" 1.05 0.5 3.0 0.05
#define beam_max params.beam_max #define beam_max params.beam_max
#pragma parameter h_sharp "Horizontal Sharpness" 2.0 1.0 5.0 0.05 #pragma parameter h_sharp "Horizontal Sharpness" 2.0 1.0 5.0 0.05
@ -97,7 +97,7 @@ layout(push_constant) uniform Push
#pragma parameter vignette "Vignette On/Off" 0.0 0.0 1.0 1.0 #pragma parameter vignette "Vignette On/Off" 0.0 0.0 1.0 1.0
#define vignette params.vignette #define vignette params.vignette
#define lumweight vec3(0.22,0.7,0.08)
@ -125,13 +125,12 @@ layout(location = 1) in float maskFade;
layout(location = 0) out vec4 FragColor; layout(location = 0) out vec4 FragColor;
layout(set = 0, binding = 1) uniform sampler2D Source; layout(set = 0, binding = 1) uniform sampler2D Source;
float sw(float x, float l) float sw (float y, float l)
{ {
float d = x; float scan = mix(scanline-2.0, scanline, y);
float bm = scanline; float tmp = mix(beam_min, beam_max, l);
float b = mix(beam_min,beam_max,l); float ex = y*tmp;
d = exp2(-bm*pow(d,b)); return exp2(-scan*ex*ex);
return d;
} }
// Shadow mask (1-4 from PD CRT Lottes shader). // Shadow mask (1-4 from PD CRT Lottes shader).
@ -314,8 +313,8 @@ mat3 vign( float l )
vec2 vpos = vTexCoord; vec2 vpos = vTexCoord;
vpos *= 1.0 - vpos.xy; vpos *= 1.0 - vpos.xy;
float vig = vpos.x * vpos.y * 40.0; float vig = vpos.x * vpos.y * 45.0;
vig = min(pow(vig, 0.2), 1.0); vig = min(pow(vig, 0.15), 1.0);
if (vignette == 0.0) vig=1.0; if (vignette == 0.0) vig=1.0;
return mat3(vig, 0, 0, return mat3(vig, 0, 0,
@ -363,31 +362,29 @@ void main()
vec2 pC4 = floor(OGL2Pos) * ps + 0.5*ps; vec2 pC4 = floor(OGL2Pos) * ps + 0.5*ps;
// Reading the texels // Reading the texels
vec3 ul = texture(Source, pC4 ).xyz; ul*=ul; vec3 ul = texture(Source, pC4 ).xyz;
vec3 ur = texture(Source, pC4 + dx).xyz; ur*=ur; vec3 ur = texture(Source, pC4 + dx).xyz;
vec3 dl = texture(Source, pC4 + dy).xyz; dl*=dl; vec3 dl = texture(Source, pC4 + dy).xyz;
vec3 dr = texture(Source, pC4 + ps).xyz; dr*=dr; vec3 dr = texture(Source, pC4 + ps).xyz;
float lx = fp.x; lx = pow(lx, h_sharp); float lx = fp.x; lx = pow(lx, h_sharp);
float rx = 1.0 - fp.x; rx = pow(rx, h_sharp); float rx = 1.0 - fp.x; rx = pow(rx, h_sharp);
vec3 color1 = (ur*lx + ul*rx)/(lx+rx); vec3 color1 = (ur*lx + ul*rx)/(lx+rx);
vec3 color2 = (dr*lx + dl*rx)/(lx+rx); vec3 color2 = (dr*lx + dl*rx)/(lx+rx);
color1 *=color1; color2 *=color2;
// calculating scanlines // calculating scanlines
float f = fp.y; float f = fp.y; if (params.OriginalSize.y > 400.0) f=1.0;
float luma1 = length(color1)*0.57735; float luma1 = dot(color1,lumweight);
float luma2 = length(color2)*0.57735; float luma2 = dot(color2,lumweight);
vec3 color = color1*sw(f,luma1) + color2*sw(1.0-f,luma2); vec3 color = color1*sw(f,luma1) + color2*sw(1.0-f,luma2);
if (params.OriginalSize.y >= 400.0) {color = (color1 + color2)/2.0;}
color = min(color, 1.0);
color = color * Mask(vTexCoord * global.OutputSize.xy, color); color = color * Mask(vTexCoord * global.OutputSize.xy, color);
float lum = color.r*0.3+color.g*0.6+color.b*0.1; float lum = dot(color,lumweight);
color = pow(color, vec3(gamma_out, gamma_out, gamma_out)); color = pow(color, vec3(gamma_out));
color*= mix(1.0,brightboost,lum); color*= mix(1.0,brightboost,lum);
color = saturation(color); color = saturation(color);

33
presets/my_old_tv.slangp Normal file
View file

@ -0,0 +1,33 @@
shaders = "1"
shader0 = "../crt/shaders/crt-consumer.slang"
filter_linear0 = "true"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
scale_type_x0 = "viewport"
scale_x0 = "1.000000"
scale_type_y0 = "viewport"
scale_y0 = "1.000000"
blurx = "0.850000"
blury = "0.050000"
beamhigh = "1.200000"
preserve = "0.700000"
brightboost1 = "1.450000"
glow = "2.000000"
quality = "0.700000"
glow_str = "0.000100"
nois = "10.000000"
postbr = "1.040000"
palette_fix = "1.000000"
Shadowmask = "1.000000"
sat = "1.100000"
contrast = "1.050000"
WP = "75.000000"
rb = "0.070000"
gb = "0.055000"
br = "0.155000"
vignette = "1.000000"
vpower = "0.120000"
vstr = "48.000000"