New CRT shader from Guest + CRT Guest Advanced updates

Just to clarify, does this mean we should set grade’s white point to 6500K if we’re using gdv color profiles?

Also, what happens when you throw emulator color palettes into the mix (like Nestopia’s)? This color management stuff is a nightmare, lol. I assume if we’re using an emulator’s palette we want everything else to be neutral and/or set to sRGB? Is this the general principal?

2 Likes

If you display is calibrated to 6500K you don’t need to set the white point if, for example, you are not using grade. But 6500K in grade should do the trick also.

Second thoughts are correct and ‘gdv’ color part is neutral regarding core/emulator output, unless you explicitly specify other settings. It’s more or less neutral, because by default settings the XYZ to RGB matrix is an exact inverse of the RGB to XYZ matrix, which means “neutral” for any input pixel. If you use a CRT profile only, then the change is relative to sRGB though.

4 Likes

I’m starting to really appreciate scanline spike removal.

4 Likes

I’m not sure why, but I’m having a hard time downloading it from Mega :frowning:

3 Likes

Thanks for reporting this. It didn’t work for me either, probably something on mega’s side. I placed a new link above, which should work normally.

3 Likes

Perfect, that did it, Thanks!

3 Likes

I’ll take the opportunity to request an on/off comparison. Sometimes it’s difficult to understand unless there is an extreme example. Upsides, Downsides.

BTW @Nesguy, have you seen my NES preset before? There have been changes to the shader but I hope my settings still ‘take’. You are very selective but maybe you can enjoy my settings. I have a KV-13M31 (aka mom’s kitchen TV) and I tried to match it (IMO successfully)

4 Likes

Testing the new ntsc preset. It would definitely look interesting on a 4k TV, should buy one i guess. :grin:

Edit: adding an unfiltered screenie:

8 Likes

all that nice dither-shading… can you post an unfiltered shot of the same image for comparison? :smiley:

EDIT: magical!

3 Likes

High contrast edges definitely benefit from spike removal, IMO. Cleans up the edges without introducing any unpleasant artifacts. Horizontal sharpness and deconvergence settings also come into play, here. I think the last shot looks very natural.

no spike removal

spike removal 1.00

spike removal 2.00

That’s interesting, I’ll check it out. Would be great to see some reference shots from the TV, as well.

edit: playing around with your preset. I like the scanline dither, that’s a nice touch. Works very well with deconvergence.

Personally though, I’m not a fan of that palette. Here’s a video of the original commercial for SMB showing intended colors. The SMB sky should be blue. The bricks should be brown, without any red tint. The CXA2025SA palette just replicates what the decoder does, the TV would then do additional stuff to the image to alter the colors further, so CXA2025SA isn’t an accurate CRT experience IMO.

4 Likes

Well, I have a 4k TV, I would love to know how this present looks on it :wink: :wink:

2 Likes

Should already be out? So test away lol

1 Like

Here is the preset:

shaders = "16"
shader0 = "shaders_slang/crt-guest-advanced/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-guest-advanced/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-guest-advanced/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-guest-advanced/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-guest-advanced/shaders/guest/advanced/ntsc/ntsc-pass1.slang"
filter_linear4 = "true"
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-guest-advanced/shaders/guest/advanced/ntsc/ntsc-pass2.slang"
filter_linear5 = "false"
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-guest-advanced/shaders/guest/advanced/convert-ntsc.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 = "0.500000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/stock.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "true"
alias7 = "PrePass"
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-guest-advanced/shaders/guest/advanced/avg-lum-ntsc.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "true"
alias8 = "AvgLumPass"
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-guest-advanced/shaders/guest/advanced/linearize.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "LinearizePass"
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "absolute"
scale_x10 = "640"
scale_type_y10 = "source"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = "GlowPass"
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
scale_type_x11 = "absolute"
scale_x11 = "640"
scale_type_y11 = "absolute"
scale_y11 = "480"
shader12 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/bloom_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 = "640"
scale_type_y12 = "absolute"
scale_y12 = "480"
shader13 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/bloom_vertical.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = "BloomPass"
float_framebuffer13 = "true"
srgb_framebuffer13 = "false"
scale_type_x13 = "absolute"
scale_x13 = "640"
scale_type_y13 = "absolute"
scale_y13 = "480"
shader14 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/crt-guest-advanced-ntsc.slang"
filter_linear14 = "true"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
alias14 = ""
float_framebuffer14 = "false"
srgb_framebuffer14 = "false"
scale_type_x14 = "viewport"
scale_x14 = "1.000000"
scale_type_y14 = "viewport"
scale_y14 = "1.000000"
shader15 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/deconvergence.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"
CP = "5.000000"
CS = "1.000000"
bloom = "0.500000"
halation = "0.600000"
gamma_c = "1.200000"
brightboost1 = "1.400000"
gsl = "-1.000000"
scanline1 = "5.000000"
scanline2 = "9.000000"
beam_min = "1.400000"
s_sharp = "1.000000"
shadowMask = "5.000000"
maskstr = "0.800000"
slotmask = "0.800000"
slotwidth = "1.000000"
slotms = "2.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt-guest-advanced/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt-guest-advanced/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt-guest-advanced/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt-guest-advanced/shaders/guest/lut/custom_lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
3 Likes

Thanks for the unfiltered image (and all the recent updates to GDV-Advanced)!

Tried it with my ReShade VHS preset :

(Also, which version of Chaos Engine is the screenshot from?)

2 Likes

Thanks, preset looks great, but I have this issue with RF quality settings showing vertical streaks in Silent Hill

https://slow.pics/c/BQE57k9s

Screenshots exaggerate the effect somehow, you can still see it faintly in the Composite screen, but it’s only noticeable with RF setting during actually gameplay.

2 Likes

Don’t remind that I need to work on a vhs shader stack :joy:

1 Like

PSX games might require a different touch, i woudn’t use it on them either. :wink:

2 Likes

I think some of these devices can apply Scanline/CRT effects.

The novelty of handheld borders has worn off a little (I’m also on an OLED) so I tried the shader with GBA. Looks really nice. I might stick with it for all handhelds now other than Game Boy. Can’t not use the green DMG LCD grid shader for GB. Be a crime to change that.

3 Likes

@guest.r For some situations with very thin / dark scanlines the scanline spacing may get a bit unevenly spaced. Which is a known situation, only I was testing with scanline type 2 and noticed it a bit more than before.

I wondered if your separate downsampler as posted here https://forums.libretro.com/t/vertical-downsampler-for-crt-shaders-and-aa-shaders/25569 is still useful / relevant to combat that situation if a user want to spend some performance hit on it? If so, how would we need to change the guest-advanced preset to include it properly?

Edit: in case you wondered I have integer scaling ON in RA

Edit 2: the uneven spacing of dark scanlines seem to happen only when “enough” of the whole screen is dark. So for a whole image of dark grey spacing get uneven, but if only a smaller part of the screen is dark grey and the rest brighter than the uneven spacing for the dark/thin scanlines does not happen.

Sometimes this gives the impression of the brightness of the screen change in motion when it goes in and out of the situation of uneven to even spacing. At first I thought some auto brightness compensation, but on closer inspection, it’s switching between even spacing and uneven spacing of the scanlines. It’s a minor issue, but thought I’d mention it if it helps understands. As said it only happens when enough of the entire screen is dark, if that makes sense?

3 Likes