New CRT shader from Guest + CRT Guest Advanced updates

I managed to have a completely visible mask with maximum brightness for only one pixel among the six available. It may seem like a stupid idea, you might say, but the image without any zoom will not be dark (tested in 4k).

I also made an Amiga preset taking specifities from different screens and personnal tastes. Here’s a picture from John Novak if you want to see the differences.

PUAE core with 720px resolution in settings ->

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/hd/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/hd/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"
AS = "0.000000"
CP = "4.000000"
cust_artifacting = "0.000000"
cust_fringing = "0.000000"
ntsc_fields = "1.000000"
ntsc_phase = "3.000000"
ntsc_gamma = "0.625000"
ntsc_taps = "9.000000"
ntsc_cscale1 = "2.250000"
ntsc_ring = "1.000000"
CSHARPEN = "5.000000"
CCONTR = "0.000000"
DEBLUR = "7.000000"
GAMMA_INPUT = "2.800000"
gamma_out = "2.200000"
interm = "0.000000"
HSHARPNESS = "1.050000"
SIGMA_HOR = "0.725000"
S_SHARP = "0.000000"
HSHARP = "0.000000"
MAXS = "0.000000"
HARNG = "0.000000"
spike = "2.000000"
m_glow = "1.000000"
m_glow_cutoff = "0.000000"
m_glow_low = "0.500000"
m_glow_high = "0.000000"
m_glow_mask = "0.000000"
SIGMA_H = "3.200000"
SIGMA_V = "1.000000"
SIZEHB = "1.000000"
SIGMA_HB = "0.400000"
SIZEVB = "1.000000"
SIGMA_VB = "0.250000"
halation = "0.780000"
hmask1 = "1.000000"
brightboost = "1.000000"
brightboost1 = "1.000000"
gsl = "-1.000000"
scanline1 = "40.000000"
scanline2 = "28.000000"
beam_min = "1.000000"
beam_size = "0.000000"
scans = "0.000000"
scan_falloff = "0.100000"
scangamma = "1.350000"
shadowMask = "11.000000"
maskstr = "1.000000"
mcut = "2.000000"
mask_zoom = "2.000000"
maskDark = "0.000000"
maskLight = "1.000000"
mask_gamma = "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"
3 Likes

Is there any chance to get the “rolling_scan” function back?

1 Like

@guest.r While I was doing some tests, I found a way to use Magic glow high strength at 7.0 while keeping multiples of eight for brightness at the center of scanlines. I’m going to do some more testing but I already like how it looks. :mage:

4 Likes

Hey, glad you stopped by and give some nudges. :smiley:

Here is the last version featuring rolling scanlines:

The main reason this functionality was deprecated is that the effect is a side product by recording a crt tv screen with a camera, next it’s working nicely only with a limited area of parameter settings. Would require a larger chunk of code and control parameters, but this is something i try to avoid.

When you record a CRT TV with a camera, the frame rate mismatch between the TV's refresh and the camera's capture creates the **rolling scanline artifact** .

Hey! It’s very nice to see some advanced approaches. My mentions on this is that you can also try to increase Magic Glow Low / High Strength parameters, as they are also instances to control the effect strength. Otherwise i can increase the parameter range a bit, np.

4 Likes

Thanks I’m gonna try this right now ! :yum:

Edit: I had to adjust a few values ​​and I like the result, good advice :+1:

4 Likes

Thank you very much for your response. I’ve been using the latest version of MegaBezel, which includes your scanline version with the “rolling_scan” function. I’m not very familiar with the technical part you mentioned, but the effect (or defect?) it creates on the edges of each graphic and letter, and even a bit of flickering, immediately transports me to a sense of nostalgia, which is what I’m looking for and how I remember my old TV. Without that effect, I feel like my custom presets lose a lot of realism. I’ve tried using other shaders that produce scanlines and include the rolling function, but they don’t compare to yours. It’s the highest quality I’ve come across.

3 Likes

Hi, thanks for your marvelous shader. I’m newbie in tweaking and encounter a problem of halo/bloom whitch trail behind sprites . I 'm using the “crt guest advanced HD” shader. It s visible on black background like the first stage of aldynes on supergraphx for exemple. I try to tweak magic glow and bloom to mini but it s still visible. Could you please indicate me the tweak to delete this effect please? If I choose the another shader version “crt guest advanced fast (or fatest)” with default settings, this effect isn t visible. I wonder whitch setting caused this effect between the 2 versions. Thanks for your help. Regards

2 Likes

Hey! Thanks for stopping by! :smiley: Afterglow strenght parameter is to be set to 0.0, then the trails will be gone.

2 Likes

thank you so much, the glow are gone :grinning: perfect shader thank you regards

1 Like

New Release Version (2024-10-27-r1):

Notable changes:

  • After some consideration, rolling scanlines are back with a tad different implementation. Some scanline settings and mask combos might produce strange side-effects, but should work in general. Implemented in standard, NTSC and HD versions.
  • Mask Zoom parameter range increase.

Download link:

https://mega.nz/file/AsZHBAQb#hYz9VBk1G-b511vDF_slRcLBG2cnhwArr8HRvZjp4u4

13 Likes

Hi, could you please remember us what is the benefit / usage of the rolling scanlines ? Thanks

1 Like

It’s one of the less standard effects with crt shaders, but stil present. But i suggest to try it out first hand.

1 Like

Ok thanks I will try when I comeback home Regards

1 Like

Nice. This update gives me a reason to go tinker with my 4k Shadow Mask presets again.

Edit: @guest.r I think these are good Shadow Mask settings for 4k:

For this image I used the crt mask settings mask 6, size 4, zoom -6 and (transform to) Shadow Mask 1.00.

I think these are the 4k Shadow Mask settings I’ve been needing all this time. I think I’m gonna use them for my next update.

3 Likes

Yeah, 4 * 3 - 6 = 6, so an even number for mask width, which is a condition for a decent shadow mask.

Just mention it, CRT Mask Zoom Sharpen works very well with this mask settings, maybe you want to tweak this aspect also.

Also a decent setting is with mask 12, size 2, mask zoom -8. But you already got a great combo.

1 Like

Nice. Always good to have new options, I don’t think I tried that combination yet.

I’ve actually just started using a bit of that since my last pack, it seems to work the best with Shadow Mask presets. I notice that setting brings some pixel details out in backgrounds especially in darker areas.

Your shader is so customizable it’s almost insane the possibilities you can pull off. I’ll play around in the lab a bit more then start to get my new pack ready. I’m not tweaking much so this shouldn’t take too long, gonna be a small update just like yours lol.

1 Like

Higher values ​​for internal resolution combined with horizontal blur sigma at 0.10 can give good results. I did some tests on PSP games and it looks quite good.

5 Likes

I was actually playing with that very setting last night. I raised internal resolution to about 0.30 on my presets messing around, it helps smooth things out a bit more. Even .10 makes a nice subtle difference.

2 Likes

@ProfessorBraun, some nice glowing in there. :smiley:

Otherwise, the Internal Resolution parameter is really nice when the core’s internal resolution is increased. Personally i don’t use other filtering tweaks to hard, since it’s usually right on spot.

For some enhanced looks with the PPSSPP core it’s quite easy to setup anti-aliased scanlines using Internal Resolution parameter and altering some Interlacing params.

My favorites are 3x res + xbrz texture filtering. :face_with_monocle:

3 Likes

Hey thanks, yeah magic glow is very nice ! :boom: I use it on several presets.

Unfortunately when I increase the resolution in PPSSPP it immediately crashes and if I disable cropping it works for a while, than it crashes. But since I like the original resolution it’s not a problem. :grin:

I also use AF 16x on PPSSPP.

1 Like