Please show off what crt shaders can do!

If you like what you see, I will upload today the settings. :grin:

2 Likes
5 Likes

There you go, just save it in a txt editor as .slangp and place it in the main shaders directory.

Let me know if it’s any good on your monitor!

shaders = "18"
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"
mipmap_input4 = "false"
alias4 = "NPass1"
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 = "true"
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/ntsc/ntsc-pass3.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
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/custom-fast-sharpen.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "NtscPass"
float_framebuffer7 = "false"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
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/crt-guest-advanced-ntsc-pass1.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = "Pass1"
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
scale_type_x11 = "viewport"
scale_x11 = "1.000000"
scale_type_y11 = "source"
scale_y11 = "1.000000"
shader12 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear12 = "true"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = ""
float_framebuffer12 = "true"
srgb_framebuffer12 = "false"
scale_type_x12 = "absolute"
scale_x12 = "800"
scale_type_y12 = "source"
scale_y12 = "1.000000"
shader13 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = "GlowPass"
float_framebuffer13 = "true"
srgb_framebuffer13 = "false"
scale_type_x13 = "absolute"
scale_x13 = "800"
scale_type_y13 = "absolute"
scale_y13 = "600"
shader14 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear14 = "true"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
alias14 = ""
float_framebuffer14 = "true"
srgb_framebuffer14 = "false"
scale_type_x14 = "absolute"
scale_x14 = "800"
scale_type_y14 = "absolute"
scale_y14 = "600"
shader15 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear15 = "true"
wrap_mode15 = "clamp_to_border"
mipmap_input15 = "false"
alias15 = "BloomPass"
float_framebuffer15 = "true"
srgb_framebuffer15 = "false"
scale_type_x15 = "absolute"
scale_x15 = "800"
scale_type_y15 = "absolute"
scale_y15 = "600"
shader16 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced-ntsc-pass2.slang"
filter_linear16 = "true"
wrap_mode16 = "clamp_to_border"
mipmap_input16 = "false"
alias16 = ""
float_framebuffer16 = "true"
srgb_framebuffer16 = "false"
scale_type_x16 = "viewport"
scale_x16 = "1.000000"
scale_type_y16 = "viewport"
scale_y16 = "1.000000"
shader17 = "shaders_slang/crt/shaders/guest/advanced/deconvergence-ntsc.slang"
filter_linear17 = "true"
wrap_mode17 = "clamp_to_border"
mipmap_input17 = "false"
alias17 = ""
float_framebuffer17 = "false"
srgb_framebuffer17 = "false"
scale_type_x17 = "viewport"
scale_x17 = "1.000000"
scale_type_y17 = "viewport"
scale_y17 = "1.000000"
wp_saturation = "1.200000"
pre_bb = "1.020000"
BP = "-15.000000"
quality = "-1.000000"
ntsc_scale = "1.025000"
ntsc_cscale = "2.100000"
ntsc_sat = "0.950000"
ntsc_bright = "1.010000"
ntsc_ring = "1.000000"
ntsc_sharp = "-1.500000"
CSHARPEN = "0.800000"
CCONTR = "0.070000"
CDETAILS = "0.150000"
m_glow = "1.000000"
glow = "0.120000"
bloom = "0.200000"
mask_bloom = "0.200000"
bloom_dist = "0.200000"
halation = "-0.050000"
gamma_c = "0.950000"
gsl = "1.000000"
scanline1 = "15.000000"
scan_falloff = "1.500000"
scangamma = "3.099999"
warpX = "0.040000"
warpY = "0.060000"
csize = "0.080000"
bsize1 = "0.150000"
shadowMask = "6.000000"
maskstr = "0.850000"
mcut = "1.250000"
maskboost = "1.100000"
smoothmask = "1.000000"
deconrr = "0.500000"
deconrb = "-0.500000"
deconrry = "0.500000"
deconrby = "-0.500000"
decons = "1.400000"
addnoised = "0.280000"
noiseresd = "1.000000"
post_br = "1.220000"
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"

3 Likes

I tried the LUT flipping. It didn’t work. The phosphor sizes looked a little improved but I was still getting some weirdness like yellow phosphors and stuff like that. Wasn’t able to get any to align properly with my LG OLED TV’s funky subpixel layout.

Maybe it’s supposed to look the same everywhere but I doubt what I’m seeing with on my OLED with funky subpixels using the normal LUTs is what someone with a regular RGB or BGR LED TV might see.

Maybe things might have looked better if I could have converted the phosphor colour order to RBG instead of BGR. RBG seems to work best for LG OLED TV funky subpixel layouts.

So what I see with the normal LUTs is a big Red, big Green and a very thin Blue phosphor.

This doesn’t affect normal viewing distances though. It’s only if one goes close to the screen that you can see a problem.

Guys, I now have an LG C2 65" OLED 4K TV and wanted suggestions on what 4K shaders to use playing old 16-bit console games (mainly SNES and Genesis) in Retroarch. Needless to say, these old games look terrible on such a huge display (I sit about 10’ away) with just the raw pixels. I’ve previously been using CRT-EasyMode on my old 1080p displays because I liked it’s more subtle scanlines look but wanted something updated to complement my new 2160p TV. Any recommendations?

1 Like
4 Likes

New update for Super Nintendo, and added a single file for the Mega Drive, Neo Geo, Saturn and PS1. My recommendation for the Mega Drive is to use Genesis GX, and inside the core options in video options, on Border options select top and bottom option, and the option Master system Hide left border only. If You don’t use this, It won’t look the same. For Neo Geo use Final Burn Neo. For the saturn, use Bettle Saturn, for the Snes use BSNES (NOT BSNES HD), on this emulator the shaders look stronger and sharper than Snes9X. For BSNES, in core options choose video options, and set crop to off.

This is an example of how Mega Drive Looks with those core options activated:

And BSNES with crop options off.

Enjoy !!!

7 Likes

Shaders in Action on the Sega Saturn:

3 Likes

hello I have a question about the possibility of creating a crt Geom for the blooming process. Do you think this would be possible?

Are you telling about using the same “bloom” in Royale’s? Your best option would be using crt-geom-deluxe.

Generally not a fan of CRT Royale-based shaders (the scanlines are far too intense and obvious for my tastes) but have previously used and liked CRT-EasyMode and CRT-Geom in some of my configurations. I used CRT-Geom in a DOSBox build and was extremely pleased with how much it seemed to properly simulate VGA from my old VGA monitors (SVGA was a little less convincing however). If I were to go back to EasyMode or Geom, do I need to find special 4K versions or configure them or do they automatically scale properly to 2160p?

Did you see my post above? I provided you with 7 different options. All modern. All suited to your 4K HDR OLED Display.

The intensity of the scanlines in a shader depends on how the shader is configured. There’s no one look, instead there are almost infinite possibilities.

Just load crt-consumer (GLSL at the moment) remove the last pass “crt-consumer” and append “crt-Geom”. Adjust crt-Geom gamma in (set it to 1.0). I think it’s called “Target Gamma”

2 Likes

Long time no see, but i’m playing (messing) randomly with unsorted things in a local git repo; i’ll have to sort thing out soon or later!

Btw:

  • Experimenting dumb box blur with a tail of unsharp mask versus lanczos filtetring, and the results in terms of sharpness and roundness (scanline weight) are very good and lower than lanczos on resource usage.

  • I’m also playing with tight haloing to achieve better colors

  • Also, work for allowing the blur to act like a dilation or erosion filter

Eroded:

Neutral:

Dilation:

I think dilation may better represent the real crt behaviour, but erosion may come handy to achieve better sense of sharpness and sexyness; since the code is the same, i’ll keep it both (or none, lol!)

Tweaked for content:

5 Likes

I only tried the Death To Pixels pack and didn’t like them. I’ll try some of the other packs. I’ve been away from the scene for several years (since Hyperspin lost it’s popularity) and just came back now that I have a 65" 4K OLED. Are there any special settings I need to configure in RA to get these shaders looking like the screen shots? For some reason, the scanlines look bigger on my display (LG C2 65") and that’s not the effect I want. I kind of like the subtle, less blury bilinear filter (?) of MAME but was never able to get my emulators to look like that.

Latest ‘ntsc-simple’ with ‘zfast-crt-composite’ on an old 2016 phone, full speed ofc

1 Like

This is a picture of my OLED tv:

I just lovethis consumer-crt shader :sweat_smile:

4 Likes

2 Likes

Playing with deconvergence settings, testing a different way that I was used to. I like these settings better.

3 Likes

shaders = "7"
feedback_pass = "0"
shader0 = "shaders_glsl/interpolation/shaders/wide_pixels_AA.glsl"
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_glsl/interpolation/shaders/pixel_art_AA.glsl"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "shaders_glsl/ntsc/shaders/ntsc-simple/ntsc-simple.glsl"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "shaders_glsl/crt/shaders/crt-consumer/linearize.glsl"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = ""
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
shader4 = "shaders_glsl/crt/shaders/crt-consumer/glow_x.glsl"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
shader5 = "shaders_glsl/crt/shaders/crt-consumer/glow_y.glsl"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
shader6 = "shaders_glsl/crt/shaders/crt-consumer/crt-consumer.glsl"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
Shadowmask = "7.000000"
2 Likes