New CRT shader from Guest + CRT Guest Advanced updates

With mask 4 you can increase the ‘Lottes maskDark’ and/or lower the ‘Lottes maskLight’ parameter to get a subtler imprint.

IMO you are quite fine without integer scaling, unless you really want some specific scanline stuff, like one pixel thickness etc. In a really odd case of uneven scanlines i would recommend normal integer scaling, without overscan.

2 Likes

I see. Imma play a bit with those settings then thank you!! :+1:

2 Likes

Here’s what I have at the moment.

I’m very satisfied. (except for the fact that over course of making this very post, I checked F-Zero GX and realized I had to tone down the deconvergence)

shaders = "17"
shader0 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
scale_type_x0 = "source"
scale_x0 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
shader1 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "StockPass"
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "shaders_slang/crt/shaders/guest/advanced/afterglow0.slang"
filter_linear2 = "true"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "AfterglowPass"
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "shaders_slang/crt/shaders/guest/advanced/pre-shaders-afterglow.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "PrePass0"
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "shaders_slang/crt/shaders/guest/advanced/ntsc/ntsc-pass1.slang"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
frame_count_mod4 = "2"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "true"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "4.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/ntsc/ntsc-pass2.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "0.500000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/custom-fast-sharpen.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "NtscPass"
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "1.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/convert-ntsc.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
float_framebuffer7 = "false"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "0.500000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "true"
alias8 = "PrePass"
float_framebuffer8 = "false"
srgb_framebuffer8 = "false"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/advanced/avg-lum-ntsc.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "true"
alias9 = "AvgLumPass"
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/advanced/linearize-ntsc.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = "LinearizePass"
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "source"
scale_x10 = "1.000000"
scale_type_y10 = "source"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
scale_type_x11 = "absolute"
scale_x11 = "640"
scale_type_y11 = "source"
scale_y11 = "1.000000"
shader12 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear12 = "true"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = "GlowPass"
float_framebuffer12 = "true"
srgb_framebuffer12 = "false"
scale_type_x12 = "absolute"
scale_x12 = "640"
scale_type_y12 = "absolute"
scale_y12 = "480"
shader13 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = ""
float_framebuffer13 = "true"
srgb_framebuffer13 = "false"
scale_type_x13 = "absolute"
scale_x13 = "640"
scale_type_y13 = "absolute"
scale_y13 = "480"
shader14 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear14 = "true"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
alias14 = "BloomPass"
float_framebuffer14 = "true"
srgb_framebuffer14 = "false"
scale_type_x14 = "absolute"
scale_x14 = "640"
scale_type_y14 = "absolute"
scale_y14 = "480"
shader15 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced-ntsc.slang"
filter_linear15 = "true"
wrap_mode15 = "clamp_to_border"
mipmap_input15 = "false"
alias15 = ""
float_framebuffer15 = "false"
srgb_framebuffer15 = "false"
scale_type_x15 = "viewport"
scale_x15 = "1.000000"
scale_type_y15 = "viewport"
scale_y15 = "1.000000"
shader16 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear16 = "true"
wrap_mode16 = "clamp_to_border"
mipmap_input16 = "false"
alias16 = ""
float_framebuffer16 = "false"
srgb_framebuffer16 = "false"
scale_type_x16 = "viewport"
scale_x16 = "1.000000"
scale_type_y16 = "viewport"
scale_y16 = "1.000000"
PR = "0.120000"
PG = "0.120000"
PB = "0.120000"
AS = "0.020000"
sat = "1.000000"
WP = "-20.000000"
pre_bb = "1.020000"
vigstr = "0.150000"
vigdef = "15.000000"
quality = "-1.000000"
ntsc_scale = "0.800000"
cust_fringing = "0.200000"
cust_artifacting = "0.200000"
SHARPEN = "2.000000"
CONTR = "0.250000"
DETAILS = "0.000000"
blendMode = "2.000000"
GAMMA_INPUT = "2.150000"
interm = "4.000000"
SIZEH = "50.000000"
SIGMA_H = "2.999999"
SIZEV = "50.000000"
SIGMA_V = "2.999999"
glow = "0.300000"
gamma_c = "1.300000"
brightboost = "1.000000"
brightboost1 = "1.225000"
gsl = "2.000000"
scans = "0.000000"
spike = "0.000000"
scangamma = "0.750001"
h_sharp = "1.400000"
s_sharp = "0.000000"
OS = "0.000000"
barspeed = "7.000000"
barintensity = "0.020000"
warpX = "0.030000"
warpY = "0.040000"
shadowMask = "8.000000"
maskstr = "0.500000"
mcut = "0.500000"
masksize = "2.000000"
mask_gamma = "5.000000"
mclip = "0.000000"
dctypex = "0.050000"
dctypey = "0.050000"
deconrr = "3.000000"
deconrb = "-3.000000"
deconrgy = "3.000000"
decons = "4.000000"
deconsmooth = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
6 Likes

The screenshots are nice but how does it look IRL?

2 Likes

Even more amazing. I set the hum bar settings to give it a faint flicker. The preset may be my most lossless (color closest to raw) to date. It’s sharp as glass (partly thanks to Glow ironically creating the illusion of a darker black level) and sometimes too bright (hurt my eyes a bit playing Iridion 3D). The preset seem content to be worn by the game instead of the other way around, and I find myself compelled to appreciate the spritework instead of the pixels. To top it all off the image is true to my memory.

Copy it to a txt and rename it to a slang file. Give it a whirl, it’s not like you have anything to lose. (EDIT: actually it’s designed for 4k, so if that’s not your res you might want to set mask size to 1 and maybe cut deconvergence in half.)

In my current setup, however, differs in that I have the deconvergenceses set 4.50, -4.50, 4.50. The above preset is has those set to 3,-3,3.

Once I’m confident I everything where I want it I’ll try to make an equivalent in the regular version and post both to the “show off” thread.

I’m considering switching from mask 8 to 9 or -1. Do you guys have any opinion on that?

2 Likes

I just noticed that I was working with an outdated version of the NTSC shader (even though I knew the newer version existed). And that NTSC resolution was set 0.80 held over from experiments with its relation to artifacts.

I’ve ported over my setup to the newer NTSC shader… And noticed that I have to recalibrate the gamma again to achieve “lossless”.

Which so far seems to surprisingly amount to resetting a few things back to default. nice job @guest.r.

EDIT: Resetting a few things… then changing a bunch of others. End result seems to bring the “losslessness” of the above preset to shame.

EDIT AGAIN: Scratch that! Oh boy, this might take a while. Sorry, normally when I get good results in the [cough] “chicken-neckwear” [cough] image I use to calibrate skin tones and interlacing it translates very well into everything else. Not this time.

3 Likes

Would it be possible to get the NTSC Fast version of this in gl so i can run it on the switch?

It’s been flawless on my PC and im just curious if there’s a way to get it on switch.

1 Like

The best way would be to use an existing GLSL preset, newer versions can’t be trivially ported from slang to GLSL, mostly because of power of 2 texture sizes.

1 Like

@guest.r

I don’t think the latest download version includes the preset for NTSC. Thanks for the updates!

2 Likes

Yes, the shaders in the ‘crt’ folder need also to be updated and the preset from ‘presets’ used to use this one.

3 Likes

Hi everyone, I’ve been experimenting for a while with the vanilla advanced version (great work, guest!). 1440p, integer scale off. I’m aiming for a somewhat morbid and glowy look (but not composite/s-video NTSC), but it’s still a WIP. Here’s some screenshots, I’ve pimped glow (0.20), bloom (0.10) and halation (0.10), reduced horizontal sharpness (2.0, with substractive sharpness set to 1.0) and choose mask 8 (not that I particularly understand the differences between the Trinitrons, please someone explain). No interlacing. I’ve also adjusted the darkness of both light and dark scanlines, but just a tad (like 0.10 more). It still seems something’s off, I’m open to every advice.

5 Likes

Ok, I have a question: is it possibile to add the three settings of glow, bloom and halation of crt-guest-advanced to another shader by adding a specific pass, or are they included elsewhere, like in the code or God knows where (I’m not a master in stacking shaders, forgive me if the question sounds weird)?

2 Likes

The different components are typically interwoven in such a way that you can’t add them purely through pass/preset mojo. That is, the passes themselves will work but they store the blurred result in a framebuffer that gets added back into the main CRT effect in its code.

7 Likes

Crystal clear, thank you!

5 Likes

The artifacts option brings something similar to the Mega Drive rainbow effect. I thought it was wonderful! However, I wonder if it’s possible to omit this horizontal artifact and just use the rainbow effect?

3 Likes

It’s possible if you use the ‘custom’ ntsc mode, in which you set fringing to 0.0. Ofc. custom artifacting should be increaed to a greater value.

5 Likes

We can now do our own HDR tonemapping, just FYI: https://github.com/libretro/RetroArch/commit/9151326b73d7bf0be7eccfbdd8513dc1f34719aa

8 Likes

I got the time and opportunity to try it out and it really works great, simplifying the HDR concept a lot. Tested it with some games and presets and it became a preferred experience. Since HDR implementation really varies from display to display (mine is like 430 sdr / 520 hdr nits) i added a brightness variable in the last pass to better customize the experience.

New Release Version (2022-01-07-r1):

Notable changes:

  • added a brightness control variable to better adjust the HDR effect.
  • finer tuning of rolling scanlines
  • ntsc preset included again along with other presets

Download link:

https://mega.nz/file/094UgbBR#ZAxqX4HUdO8WviF4f-rSFjfUgCxbbqir1ugGNL8Wcv0

13 Likes

@guest.r @HyperspaceMadness If I apply the new Guest version, will it break the MegaBezel? (I have the latest version 01/05 Rev2)
Thank you

3 Likes

The Mega Bezel uses an internally adapted version of Guest’s shader, it does not reference his stand-alone.

I will assume that, after some testing, HSM will update the internal version.

(He and I both have HDR displays, albeit HDR10.)

4 Likes