Please show off what crt shaders can do!

Kind of reminds my smooth brain on how the original code for the sonic mania shaders were coded but again I’m smooth brained.

1 Like

Holy colors man, love it! What shader were you using?

Lately I’ve been playing around with the newpixie shader. I kinda like it but there’s an option for crawling scanlines which I don’t know what to think of it. Is this effect something that was noticeable on a crt or is it just a cosmetic effect of the author?

1 Like

Not something noticeable on a CRT unless it’s going bad.

That’s guest-dr-venom-advanced :slightly_smiling_face:

2 Likes

Here’s what I came up with after some fiddling with the new guest advanced shader. I think this will replace CRT Royale for me - It captures the right mix of clarity, blur, and bloom, while largely being resolution agnostic (not running at integer scale and can’t see any artifacting) which you can’t do with Royale while also being a lot less taxing to run

#reference "shaders_slang/crt/crt-guest-advanced.slangp"
PR = "0.100000"
PG = "0.100000"
PB = "0.100000"
AS = "0.150000"
sat = "0.100000"
halation = "0.149999"
gsl = "0.000000"
beam_min = "1.600000"
beam_max = "0.900000"
beam_size = "1.000000"
h_sharp = "3.600001"
shadowMask = "2.000000"
slotmask = "0.350000"
slotmask1 = "0.350000"

Nuts, I had a ton of pictures but I’m only allowed to include one per post

6 Likes

looks great! If you want to share more pics, it’s usually easier just to make a gallery on imgur and then share a link instead of uploading each pic directly.

3 Likes

I’ve done just that if anyone is interested

8 Likes

Someone put a PR in to add HDR support for d3d12 driver:

Looks like it won’t do much for us at the moment other than unlocking peak brightness, but that could be good enough.

9 Likes

Just showing off what crt shaders can do!

Pictures won’t tell the whole story as there’s a bit of subtle movement going on in there so feel free to try them out.

I recommend using Arcade - Sharp for arcade games, Composite - Pure for NES and similar systems and Composite - Sharp for the 16-bit era systems and everything else.

With that said, for the best viewing experience of these screenshots I suggest you right click on the image then click, “Open link in new tab”, “Open link in new window” or “Open image in new tab”.

Then click on the new window or tab and press the F11 key for a fullscreen view.

This also works when viewing the albums on imgur.

[Updated 1/11/21]

Presets are updated. Screenshots and video clips are not.

CyberLab Mega Bezel Death To Pixels (Composite - Sharp)

Note: Please download and loop video clips when playing for optimal viewing quality and experience.

CyberLab Mega Bezel Death To Pixels Composite Sharp.slangp

#reference ":/shaders/shaders_slang/bezel/Mega_Bezel/Presets/Base_CRT_Presets/MBZ__2__STD__GDV.slangp"


g_cntrst = "0.500000"
GDV_AFTERGLOW_THRESHOLD = "7.5"
// BP = "16"
glow = "0.050000"
SIZEH = "7.000000"
SIGMA_H = "2.300000"
halation = "0.250000"
h_sharp = "1.000003"
shadowMask = "6.000000"
maskstr = "0.4"
maskDark = "1.000000"
GDV_DECONVERGENCE_ON = "1.000000"
deconrr = "1.000000"
deconrb = "-1.000000"
deconrry = "1.000000"
deconrby = "-1.000000"
beam_min = "1.000000"
beam_size = "0.000000"
vertmask = "1.000000"
HSM_INTERLACE_TRIGGER_RES = "600.000000"
HSM_FAKE_SCANLINE_RES = "240.000000"
MDAPT_MODE = "2.00000"
HSM_CURVATURE_MODE = "-1.000000"
HSM_FAKE_SCANLINE_OPACITY = "0.000000"
HSM_FAKE_SCANLINE_ROLL = "0.000000"
HSM_CORE_RES_SAMPLING_MULT_SCANLINE_DIR = "1600.000000"
HSM_DOWNSAMPLE_BLUR_SCANLINE_DIR = "70.000000"
HSM_DOWNSAMPLE_BLUR_OPPOSITE_DIR = "60.000000"
g_crtgamut = "1.000000"
g_hue_degrees = "0.000000"
HSM_SCALEFX_ON = "1.000000"
SHARPEN_ON = "1.000000"
SHARPEN = "0.250000"
CONTR = "0.090000"
g_sat = "0.000000"
GTU_ON = "1.000000"
compositeConnection = "1.000000"
signalResolutionI = "304.000000"
signalResolutionQ = "261.000000"
spike = "2.000000"
gamma_c = "1.640000"
deconsmooth = "1.000000"
addnoised = "0.140000"

Note: If you’re using Higan or BSNES, the resolution setting in the core options can influence how your final image looks in terms of sharpness and softness. In games that you might prefer a crisper, sharper look for example Super Mario World and Super Mario Kart, you can try switching it to 512 x 224. Conversely in games that use dithering to create extra colours for example U.N. Squadron and TMNT: Turtles In Time and Final Fight, 256 x 224 might be the better choice. You can save your choice in Quick Menu…Options…Manage Core Options and save per game.

The following 2 video clips show my CyberLab Mega Bezel Death To Pixels (Composite - Sharp) preset combined with the built-in Blargg NTSC Composite filter in the Genesis Plus GX core.

https://mega.nz/file/kYxySCKI#szeKGsQbg5YWFIJMooKw7WG5t-85uBhWxnQQUjNnoCo

https://mega.nz/file/ZUwUhAqL#G7JGAiWbhItVWvsU41peplF6ND-HIkMgswHo3n-BozA

This next one’s for the CRT purists like @Nesguy, @Brainbin74, @Duimon and even myself sometimes when I’m feeling for that extra bit of nostalgia.

Note: This preset needs the “CyberLab Mega Bezel Death To Pixels Composite Sharp.slangp” preset to be in the same “…\Retroarch\Shaders” folder for it to work.

CyberLab Mega Bezel Death To Pixels (Composite - Pure)

Note: Please download and loop video clip for optimal viewing quality and experience.

CyberLab Mega Bezel Death To Pixels Composite Pure.slangp

#reference "CyberLab Mega Bezel Death To Pixels Composite Sharp.slangp"
halation = "0.150000"
h_sharp = "5.000000"
HSM_SCALEFX_ON = "0.000000"
HSM_DOWNSAMPLE_BLUR_SCANLINE_DIR = "0.000000"
HSM_DOWNSAMPLE_BLUR_OPPOSITE_DIR = "0.000000"
g_hue_degrees = "4.000000"
signalResolutionI = "83.000000"
signalResolutionQ = "145.000000"
g_sat = "0.050000"
addnoised = "0.200000"

If you’re also looking for the infamous " Rainbow effect" you can use my presets above and also enable Blargg’s NTSC Composite filter in the Genesis Plus GX Core Options. It might even work with my Composite - Pure preset as well but I haven’t tested it yet.

What I’ve noticed is that once the Blargg NTSC Composite Filter is enabled and used in conjunction with my Composite - Sharp preset, dithering based transparencies also work fine, whereas without the Blargg filter set to composite that particular preset didn’t do the transparency effects properly. So I went back to the drawing board and came up with this next preset. It’s not a one size fits all solution as it can cause some artifacts due to false positives in certain games but when it works, it works beautifully!

CyberLab Mega Bezel Death To Pixels (Blending and Transparency Edition)

CyberLab Mega Bezel Death To Pixels Blending and Transparency Edition.slangp

#reference "CyberLab Mega Bezel Death To Pixels Composite Sharp.slangp"
MDAPT_MODE = "3.000000"

Note: This preset needs the “CyberLab Mega Bezel Death To Pixels Composite Sharp.slangp” preset to be in the same “…\Retroarch\Shaders” folder for it to work.

So now you can get the best of both worlds. Extra colours, transparency effects and the rainbow effect without blurry graphics as if Vaseline was smeared all over the screen.

My next mission is to test this combination out with my Composite - Pure preset and also to test it with the global Blargg NTSC Filter in the main RetroArch settings to see if it works the same way!

CyberLab Mega Bezel Death To Pixels (Arcade - Sharp)

CyberLab Mega Bezel Death To Pixels Arcade Sharp.slangp

#reference ":/shaders/shaders_slang/bezel/Mega_Bezel/Presets/Base_CRT_Presets/MBZ__2__STD__GDV.slangp"


g_cntrst = "0.500000"
GDV_AFTERGLOW_THRESHOLD = "7.5"
// BP = "16"
glow = "0.050000"
SIZEH = "7.000000"
SIGMA_H = "2.300000"
halation = "0.200000"
h_sharp = "3.000001"
shadowMask = "6.000000"
maskstr = "0.4"
maskDark = "1.000000"
GDV_DECONVERGENCE_ON = "1.000000"
deconrr = "1.000000"
deconrb = "-1.000000"
deconrry = "1.000000"
deconrby = "-1.000000"
beam_min = "1.000000"
beam_size = "0.000000"
vertmask = "1.000000"
HSM_INTERLACE_TRIGGER_RES = "600.000000"
HSM_FAKE_SCANLINE_RES = "240.000000"
MDAPT_MODE = "2.00000"
HSM_SCALEFX_ON = "1.000000"
HSM_CURVATURE_MODE = "-1.000000"
HSM_FAKE_SCANLINE_OPACITY = "0.000000"
HSM_FAKE_SCANLINE_ROLL = "0.000000"
HSM_CORE_RES_SAMPLING_MULT_SCANLINE_DIR = "1600.000000"
HSM_DOWNSAMPLE_BLUR_SCANLINE_DIR = "100.000000"
HSM_DOWNSAMPLE_BLUR_OPPOSITE_DIR = "100.000000"
g_hue_degrees = "4.000000"
spike = "2.000000"
gamma_c = "1.460000"
deconsmooth = "1.000000"
addnoised = "0.120000"

For lower end systems, you can replace the Base CRT Preset reference shader line with this:

#reference ":/shaders/shaders_slang/bezel/Mega_Bezel/Presets/Base_CRT_Presets/MBZ__3__BASIC-EXTRA-PASSES__GDV.slangp"

Thanks again to all who made this possible!

Click the link below to download

CyberLab Mega Bezel Death To Pixels Shader Preset Pack 31-10-21.zip

2 Likes

Emulating a 360TVL CRT on a 4K (3840 by 2160) LCD. On a 27" screen, it’s Intended for viewing an arms length away. Needs the backlight cranked up.

I’m quite happy with the results. From an arms length away, things look as perfect as they can from that distance. There are no discernable “pixels” as there shouldn’t be. The result is you want to lean in and inspect the details, but when you do, it looks like an ambiguous mess of little lights, which is how I remember CRTs to be.

Here are my settings:

#reference "shaders_slang/crt/crt-guest-advanced.slangp"

// COLOR TWEAKS
CS = "1.000000"
CP = "1.000000"
vigstr = "0.030000"
vigdef = "6.000000"

// INTERLACING
interm = "0.000000"

// BRIGHTNESS
glow = "0.010000"
bloom = "0.030000"
halation = "0.030000"
brightboost = "2.000000"
brightboost1 = "2.000000"

// SCANLINE
gsl = "2.000000"
scanline1 = "12.000000"
scanline2 = "14.000000"

// FILTERING
h_sharp = "2.000000"
s_sharp = "0.000000"

// CRT MASK
shadowMask = "6.000000"
maskstr = "0.750000"
masksize = "2.000000"

// DECONVERGENCE
deconrr = "0.100000"
deconrb = "-0.100000"
deconrry = "-0.500000"
deconrgy = "0.500000"
deconrby = "-0.500000"
decons = "0.750000"

// SCREEN
warpX = "0.030000"
warpY = "0.040000"
csize = "0.050000"
bsize = "170.000000"

Some justification and things I’ve learned.

  1. 360TVL@4:3 is 480 distinct pixels. For a 320 by 240 source, this means you have 1.5 masks per source sample. I haven’t analyzed this very deeply, but the resulting darkening seems to correspond to the negative lobes on a sinc function i.e. the mask itself provides perfect sharpening given you’re far enough for the mask itself not to be discernable.

  2. As a result you can crank other sharpness functions provided by the shader way down.

  3. 5 bits per color channel only yield 32 shades of grey. So while you initially might think it’s best to leave multiplicative brightness adjustments like brightboost at 1.0 in fear of mapping 2 input colors to the same output, it’s actually not much of a concern. There’s other factors involved here e.g. the whole emulated phosphor’s perceived color due to scan line shape i.e. even though the center of a scanline for two different shades of grey might get clipped to white, the overall shape of one of them might not be as tall.

  4. Deconvergence affects the colors, but it’s probably an effect artists (even unknowingly) would have compensated if not consciously made use of. Doesn’t make sense with subpixel masks.

  5. If you’re warping, a vignette emulates reduced brightness due to light being shot away from the viewer (this should have been obvious but I always thought vignettes were there for other reasons). I don’t know what the exact mathematical relationship between the vignette parameter and the warping parameters are, but it seems like there should be one and the shader could provide that for you e.g. auto vignette on warp.

  6. This one was obvious to me, but might not be to others: if you’re warping, subpixel masks (which rely on LCD grid alignment) no longer make sense. IMO abandoning grid alignment is something you can only afford on 4K or at least 1440p LCDs where masks can be several pixels wide. The extra whole image softness resulting from warping is a really cool use of having multiple LCD pixels per phosphor mask element.

7 Likes

This looks amazing on my OLED. First time I’ve been able to really see the individual rgb subpixels by getting up close to the screen rather than seeing the pixels and it’s even more pronounced if you push the mask strength up to 1.0 (though obviously dynamic range is massively reduced due to that).

2 Likes

can someone tell me what is the cheapest gpu I can get that run all crt shaders in 4k either nvidia or amd?

You’re going to need a decent cpu and gpu, there’s a few CRT shaders that are pretty heavy tbh.

1 Like

could a rx 580 be enough or gtx 1060?

For most things probably, but tbh the upper end is really dumb afaik with CRT shaders at 4k (so if you’re wanting to run all CRT shaders at 4k then the answer is no.

I was afraid of that I did not wanted to spent too much on a card. I have gtx1080 on my desktop and that runs all my crt shaders at 4k without any problems. I thought I could get something cheaper. So I guess it has to be gtx 1080 or better. How about cpu the laptop I am getting has a i7-8565U is that good enough?. I am planning in hooking up the laptop with an egpu with thunderbolt 3.

Sorry if this is a dumb question, but how do I use/apply your settings?

3 Likes

For extreme_tiger’s presets you need the below shader installed properly, which is part of the Guest shader package.

For mine, you need HSM Mega Bezel Reflection Shader.

Once the packages are installed, you just copy the text from the preset and save it in your RetroArch/Shaders folder as a *.slangp file and you then open a game and choose Quick Menu, Shaders, Load then load up your new preset.

You’ll find the presets below.

3 Likes

Some “dirty” screenshot crops of the CyberLab Mega Bezel Death To Pixels (Arcade - Sharp) preset in action!

4 Likes

Cool! Can you share it?

1 Like