New CRT shader from Guest + CRT Guest Advanced updates

I apologize for not bringing this up earlier, but the “Glow/Bloom Pass Settings” in the NTSC version have been without their header for while now, lumping them in with the “Interlacing Options”.

With that out of the way, any plans for more masks? I find that the specific mask (and its size), when at max strength, greatly affects how the brightness settings affect the colors.

Also, I’ve been withholding an idea for while on the grounds that it might be crazy. But I shouldn’t withhold ideas like that.

Could the curvature settings theoretically be set to negative for a concave curve? I don’t know anything about slang code, but it seems simple on the surface. Or is the simplicity deceptive? Would it cause more problems than it’s worth? Would it give @HyperspaceMadness a headache?

I know it’s not accurate to real CRT displays. But I imagine the effect on side-scrollers could be amazing… at least for those of us without curved monitors.

Great work as always by the way. I’m sorry If I may come off as unreasonably discontent or crazy. It’s just that it’s not my nature to be content, and I’m the sort of fellow who tried to play an ARPG with a HOTAS setup.

Good catch. :slightly_smiling_face: Fixed now.

You can/should use bloom/halation to handle this situation. Masks at full strength don’t look that well with ordinary displays/SDR.

It would require a special function to handle this situation. And would complicate the situation indeed. I’m in general not a fan of making the code more messy as it already is. :grin:

Anyways, thanks for the feedback, helps a lot.

Back to the shader, deconvergence pass should be complete now. Some specific handling is required since masks get smeared etc., think a good compromise is implemented together with some new feature and fixes.

New Release Version (31.01.2021-r4):

Download link:

https://mega.nz/file/Mw4DCCzS#l0t8sqRS5gJYgTKXN-9MNsW3nLA99eaq3aZwSDlWtAQ

10 Likes

You can/should use bloom/halation to handle this situation. Masks at full strength don’t look that well with ordinary displays/SDR.

I’ve been fiddling with bloom, halation, and bright boost long enough to know they are the biggest culprits when it comes to decimated skin tones and other less saturated colors. And reducing mask strength can actually make this worse because It increases brightness/lightness after the lack thereof has already been compensated for. This really just confirms to me that I need to more subtle all around if I want the best image.

However, it’s worth mentioning my monitor is in fact hdr capable; it’s just that whenever I have RetroArch in fullscreen Windows turns hdr mode off. I sometimes bring my laptop to other screens, however, so I still need to tone things down regardless.

2 Likes

I don’t think RetroArch has proper hdr support which is the issue.

2 Likes

It’s going to be a while…

1 Like

Sounds about right. Makes complete sense.

:point_up_2: TO THE DEVELOPMENT SUGGESTIONS! classic Batman noises

Edit: Come to think of it, this silly post might be too excessive of a digression.

3 Likes

Having a slight issue trying to get a border working with the shader. I have added another shader pass to the process, but when I apply the border to that empty pass it doesn’t show, and settings for the main shader revert. Not sure what I am doing wrong.

It’s mainly for use with my Sinden lightgun. I don’t like the issues that arise when using the border options in the guns dedicated software. It also wants borderless fullscreen to be in use which I despise lol.

1 Like

Can you just use an overlay instead? that’d be easier than a shader in this case.

2 Likes

Overlay in RA, completely forgot that was even an option. Cheers.

1 Like

Speaking of shader passes. Is it possible to add a pass of FXAA before the rest of the shader kicks in ?

Would go nicely for Dreamcast and Gamecube cores as I don’t like to increase internal resolutions as it tends to break some graphical effects and 2D elements in games.

1 Like

You should be able to replace the first stock pass with fxaa. Scaling should be OK, but you might want to set the filtering type to linear.

1 Like

That worked a treat :+1:

@guest.r, what is deconvergence for?

To simulate an arcade monitor, I liked the sharpness reduction when I increased red, green, blue range to 1.00 and the simulation seemed more realistic.

I did the test on MK1. Could it be a reference to arcade monitors from the 90s?

1 Like

For more accurate simulation. It’s nice if you add a little. Too much and it looks like an art project.

2 Likes

It also comes down that CRT displays represent a reasonable implementation of the ‘illuminated phosphors’ technology, which means emphasis for large x-y size while trying to reduce the depth of the displays while still producing an uniform image.

Long story short for best convergence of the RGB electron guns they must have a quite narrow focus, which is hard to achieve over the entire screen surface without additional helping technology and precise calibration. If this focus is dulled with usage, bad factory calibration etc. you can observe the RGB shifts like emulated in the shader.

There is commonly also a constant barely notable color shift effect on image edges due to RGB phosphors distribution and spacing and not to forget the glass factor combined with viewing angles.

4 Likes

Adding FXAA to the spare stock pass worked as intended, but it creates some artifacting around text and other 2D edges (a fault of FXAA). Is it possible to have 3 extra passes so that I can use SMAA instead ?

1 Like

It’s possible, but requires 3 pre-passes instead on 1. You must also shift the numbers on passes by the increment of 2 in all other shader entries in the preset, not to forget to increase the total number of shaders in the preset by 2 also. It’s like a some of minutes of work though.

Indeed, 3 passes. I did try to edit the slang file in notepad but it failed to load the shader when I did so. It may look like it is pointing to the wrong location for SMAA, but it is not. I added a copy of that shader folder to guest, as I like to keep it in one place where it can’t be messed with via RA.

Edit I did in notepad;

shaders = 10

shader0 = shaders/guest/smaa/smaa-edge-detection.slang filter_linear0 = true scale_type0 = source scale0 = 1.0

shader1 = shaders/guest/smaa/smaa-blend-weight-calculation.slang filter_linear1 = true scale_type1 = source scale1 = 1.0

shader2 = shaders/guest/smaa/smaa-neighborhood-blending.slang filter_linear2 = true

textures = “areaTex;searchTex” areaTex = shaders/guest/smaa/AreaTex.png searchTex = shaders/guest/smaa/SearchTex.png

shader3 = shaders/guest/crt-gdv-new/afterglow0.slang filter_linear1 = false scale_type1 = source scale1 = 1.0 alias1 = AfterglowPass

shader4 = shaders/guest/crt-gdv-new/pre-shaders-afterglow.slang filter_linear2 = false scale_type2 = source scale2 = 1.0 alias2 = PrePass

textures = “SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4” SamplerLUT1 = shaders/guest/lut/sony_trinitron1.png SamplerLUT1_linear = true SamplerLUT2 = shaders/guest/lut/sony_trinitron2.png SamplerLUT2_linear = true SamplerLUT3 = shaders/guest/lut/other1.png SamplerLUT3_linear = true SamplerLUT4 = shaders/guest/lut/custom_lut.png SamplerLUT4_linear = true

shader5 = shaders/guest/crt-gdv-new/avg-lum.slang filter_linear3 = true scale_type3 = source scale3 = 1.0 mipmap_input3 = true alias3 = AvgLumPass

shader6 = shaders/guest/crt-gdv-new/linearize.slang filter_linear4 = true scale_type4 = source scale4 = 1.0 alias4 = LinearizePass float_framebuffer4 = true # comment this line for max precision

shader7 = shaders/guest/crt-gdv-new/gaussian_horizontal.slang filter_linear5 = true scale_type_x5 = viewport scale_x5 = 0.5 scale_type_y5 = source scale_y5 = 1.0

shader8 = shaders/guest/crt-gdv-new/gaussian_vertical.slang filter_linear6 = true scale_type_x6 = viewport scale_x6 = 0.5 scale_type_y6 = viewport scale_y6 = 0.5 alias6 = GlowPass

shader9 = shaders/guest/crt-gdv-new/crt-guest-dr-venom2.slang filter_linear7 = true scale_type7 = viewport scale_x7 = 1.0 scale_y7 = 1.0

1 Like

@guest.r

I think we talked about the scanline shape, which is about perfect, and I think you already said it’s about as good as it gets. So disregard below if this was already answered. Just want to make sure whether it would be possible to have one aspect of the scanline dynamics better configurable. (If not maybe if ever for GDV3 :smiley: )

See picture below of the four scanline types in your shader (from your default preset with increased bright scanline beam at “0”).

It seems the most distuingishing difference between scanline types -1, 0, 1 and 2 is the (perceptual) “ratio” in scanline thickness/height of bright versus dark parts? I.e. how much thicker/higher is the bright part of a scanline versus how much thinner is the dark scanline part?

gaussianprofile-thick-thin

If so, would it be possible to make that ratio configurable?

For example a setting of “0” would mean the bright part scanline thickness would be equal to dark part scanline thickness and a setting of 1 would mean maximum difference in scanline thickness for bright versus dark parts.

On real CRT it probably depends on tv and monitor model (specs, aging, maintenance etc.) how much bright scanline grows over dark scanline in height, and I would really love to have that little bit more control over this ratio.

1 Like

It’s some more correcting required, basically all the numbers below the shaders names and paths too (example for pass 5):

shader5 = shaders/guest/crt-gdv-new/avg-lum.slang

filter_linear5 = true

scale_type5 = source

scale5 = 1.0

mipmap_input5 = true

alias5 = AvgLumPass

It should be already configurable. You can get about ‘even’ scanlines by making Scanline Shape Dark Pixels and Scanline Shape Bright Pixels about the same value with scanline types -1.0 and 0.0. Types 1.0 and 2.0 are more difference oriented for narrower beams with darker pixels.

Values for ‘Dark Pixles’ can also be lower than for bright pixels.

2 Likes