New CRT shader from Guest + CRT Guest Advanced updates

There are two viable options:

  • lower output gamma only, if contrast is to great, compensate with gamma correction parameter
  • if contrast is already as it should look, you can simply increase saturation, there is a parameter with all guest-advanced shaders + a bonus parameter with ntsc version

Standard saturation adjustment works the same way as “color gamma”, to mention it.

3 Likes

Hi

Don’t know if this the right topic/thread but will be PAL support? if it done then “ntsc adaptive” should renamed to “analog tv adaptive” or something that will work like a real multi system TV depending on the content (I think it needs to pass some information from the core about whatever it PAL or NTSC since there are PAL 60)

2 Likes

So I noticed my first “hiccup” with the new “edge colors” setting. Had Trouble Shooter for the Mega Drive playing in attract mode then it showed this particular stage and I noticed something with the dithering, one layer of the dark blue sky looks slightly de-dithered.

Here’s a raw image first:

For reference, the area between the two red lines is the area I’m talking about.

This image is with the edges color setting on 10.00, the value I’m currently using on my presets:

If you look at that same blue area that layer of the sky the blended dithering looks slightly broken.

Here’s with the setting brought down to 5.00:

That area is starting to look more blended there.

And finally here’s with the edges color setting turned off:

That area is now completely blended again.

What throws me off about this whole thing is that every other dithered area in that image looks to be fully blended with the value at 10, both vertical line and checkerboard dithering except that one layer of the blue sky. Also out of all the other Mega Drive games I’ve been playing things seem to be good with various other games as well.

@guest.r is there a reason why that one layer of the sky is looking that way compared to everything else that looks fully blended? It’s almost barely noticeable but it’s something that caught me off guard. Maybe that’s what you meant by “use with care” lol. I need that setting maxed out no matter what, I’ve been trying to get a clean vivid composite image for a long time and this edge colors setting finally took me there.

1 Like

This is a preset for Sega Genesis, I did some tests with ntsc coloring/rainbow at 2.00 and some sharpness values ​​pushed to max.

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"
internal_res = "5.100000"
cust_artifacting = "0.000000"
cust_fringing = "0.000000"
ntsc_fields = "1.000000"
ntsc_phase = "3.000000"
ntsc_scale = "0.750000"
ntsc_rainbow1 = "2.000000"
ntsc_taps = "8.000000"
ntsc_cscale1 = "2.250000"
ntsc_ring = "0.000000"
ntsc_sharp = "-10.000000"
ntsc_shape = "0.500000"
ntsc_charp = "10.000000"
CSHARPEN = "5.000000"
CCONTR = "0.000000"
GAMMA_INPUT = "2.500000"
gamma_out = "2.200000"
interm = "0.000000"
HSHARPNESS = "1.000000"
SIGMA_HOR = "0.100000"
S_SHARP = "0.000000"
HSHARP = "0.000000"
MAXS = "0.000000"
HARNG = "0.000000"
spike = "0.000000"
m_glow = "1.000000"
m_glow_cutoff = "0.000000"
m_glow_low = "0.500000"
m_glow_high = "7.000000"
m_glow_dist = "4.000000"
m_glow_mask = "0.000000"
SIGMA_H = "1.400000"
SIGMA_V = "1.050000"
SIZEHB = "1.000000"
SIGMA_HB = "0.250000"
SIZEVB = "1.000000"
SIGMA_VB = "0.250000"
halation = "0.626000"
hmask1 = "0.000000"
brightboost = "1.000000"
brightboost1 = "1.000000"
scanline1 = "40.000000"
scanline2 = "70.000000"
beam_min = "0.250000"
beam_max = "0.600000"
beam_size = "0.000000"
scans = "0.000000"
scan_falloff = "0.100000"
scangamma = "1.500000"
shadowMask = "6.000000"
maskstr = "1.000000"
mcut = "2.000000"
mask_zoom = "3.000000"
mzoom_sh = "1.000000"
maskDark = "0.000000"
maskLight = "1.000000"
mask_gamma = "1.000000"
slotmask = "1.000000"
slotmask1 = "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

I love how you just randomly pop up and shower us with a little magic every now and then lol. Did you grab guest.r’s latest shader update? There’s a brand new setting called “edge colors” that you need to take a tweak at. I’ll just let you see for yourself what I’m talking about, it’s an amazing new setting for the ntsc shader.

2 Likes

Some checkerboards seem not to fully blend even with default ntsc settings, it’s more pronounced with cranking up the chroma and luma sharpness settings. It’s one of these color vs. black checkerboard situations.

I noticed it also in Streets of Rage 2 bar scene with the checkerboard under the lights. But most of my test cases work satisfactory.

One of possible solutions is also to increae the Internal Resolution setting by a notch, but probably this is only a situational solution, working against the majority of different situations.

@ProfessorBraun:

Very nice colors and mask mitigation! It’s one of these situations where 4k really makes a difference.

Maybe you can achieve some better results with negative adaptive sharpness,

2 Likes

I see. In that case I will go forward looking at that as something that’s just suppose to be that way. I thought at first maybe it was a bug but your response says otherwise.

Oh yeah? To me the SOR2 bar lights look perfect:

I don’t notice any kind of weirdness with blended dithering there unless my eyes are fooling me. Even with the rainbows it looks good to me:

I guess since you mentioned above that things are meant to look that way I’ll just leave everything as is.

I love that new edge color setting you added in so much you have no idea. I can never go back to the way things were pre that setting, it changed my composite presets forever. I wonder what else is in store for the “guest-advanced” shader going forward, guess time will tell.

2 Likes

Yes, I’ve done some quick testing with this setting, but not in depth yet. :wrench:

Thanks ! Yeah, higher resolution helps a lot.

It’s already negative :yum:, I will show the differences between negative and positive values.

Edit:

3 Likes

You got to try it with vanilla settings and an eagle eye! :wink: But in the end this situation you are mentioning is neiter a feature, not a bug. Really can’t do much here without making the filter blurrier in general. Blue is also known for it’s very low luma values, combine it with black (zero) luma and stress the filter to max., it’s an oddity it can occour.

1 Like

Ah ok, yeah I’ve never tried it with vanilla settings.

No no no don’t you change that setting and blur it up, I like her just the way she is lol. I’m good with what it offers oddities and all. That situation I mentioned is so small that the pros outweighs anything else at this point. Composite Shadow Mask on Mega Drive games look so so vibrant and clean now:

Definitely taking this new look into the new year and into the future with that edge colors setting maxed out full speed ahead.

2 Likes

Hmmm…there is one more thing. You could disable gpu screenshots temporarily and post this image, maybe it’s worth to take a look, nevertheless:

Original resolution sources are pretty cool for testing…

1 Like

Hi @Guest.r - first of all thanks for your work with your shaders - I kindly needed some advice from you, who are the creator. I wanted to try to get a decent SlotMask on my 1080p monitor (even if I know that it is difficult to get it with this resolution). I made many attempts playing with the “Slot Mask strength bright/dark pixel” command and with “Mitigate SlotMask interaction” also taking inspiration from some works done by artists in the community. But if I wanted to create something without touching too much with the settings (the default ones with the 0 mask are the best I found for my screen) and if I wanted to create something very realistic (I would not like to use Lottes because its SlotMask although good does not exist in any CRT monitor) and maintain a high TVL (with the basic plug and play settings I have a TVL of about 520), although strongly conditioned by my resolution, what and with which values ​​do you recommend I act without touching too much the various values? In particular, do you know of any values to enter that I can consider good? Thank you so much for your help.

1 Like

You can get nice slotmask effect with hight TVL 1080p mask 0 or mask 5. But i also suggest to try mask 9. It’s better if you lower the slotmask height by 1.0. I remember having some really nice slotmask presets with my 1080p display.

Next you can use scanline mode -1.0 and integer scaling (shader has this option) with overscale.

Mask strengths are a personal preference, i can’t really help here at this point.

If you want to increase slotmask height to 2.0 at 1080p then i advise no-scanline mode for best results.

Edit: oops, when mentioning “width” i actually meant “height”, my bad.

2 Likes

Thank you very much, you are very kind - I will do some tests and share them to kindly have your authoritative opinion - thank you very much

Update:

I opted for mask 0, increased the SlotMask values to 1 for the “dark” and “bright” entries, activated the “SlotMask in bright scanline” but did not change the width to 1, leaving it in “auto” mode because I had the feeling that it had no effect and I did not like the result. I am aware of your advice and I did all the tests to apply it, even using mask 9 or using the mode without scanline, but this seemed to me to be the best result. Very honestly, what do you think? Should the image be considered wrong? @Guest.r

1 Like

Like this?

Trouble Shooter (USA)-241220-074306

This shot was taken with the “gpu screenshot” setting turned off.

1 Like

New Release Version (2024-12-20-r1):

Notable changes:

  • Old: new functionality added with NTSC shaders to better preserve ‘edge’ colors.
  • New: fine-tuning of the new functionality for some specific cases.

Download link:

https://mega.nz/file/kkBGFQgb#wsoBqy8dE29893pc6MCHuR-GKDoHbQclfjAQ34ppiMQ

7 Likes

Well damn that was fast lol. I think you already know the first game I’m about to test with this. I’ll be back with my results soon.

1 Like

I’m sorry, @ROBMARK85, i accidentally mentioned “slotmask width” when i meant “slotmask height”. Width is best on auto indeed.

With bezel and 1080p you are best with height 1.0, maybe 2.0 with no-scanline mode, you can also re-read the above post for more info.

But it’s definitelly paying of to do some tweaking once you got the base masks working.

Well damn that was fast lol. I think you already know the first game I’m about to test with this. I’ll be back with my results soon.

Yes, some more testing is good, the “hack” is pretty close on this situation, hopefully it works in general on similar cases.

4 Likes

And BOOM just like that the issue is gone:

You came through once again with your legendary wizardry, that small area that looked slightly de-dithered is now fully blended like all the other blue sky layers. I don’t know how you keep improving this shader but I’m gonna be on the front lines for this ride as one of the ambassadors for this shader until the end of time, thank you man.

I will test things out with other games throughout the day and report back if anything comes up, in the meantime I’ll go ahead and swap out the previous link for your new shader update in my thread.

Edit:

Another test. Previously on the last update I also noticed the blood in the background for Streets of Rage 3 at the title select screen was also slightly de-dithered but didn’t speak on it, this new update fixed that as well. It’s now also fully blended again:

I can’t believe I’m at a point where I can achieve a crisp composite image and still get the benefits of full blended dithering, this has been a dream of mines since I first discovered the guest ntsc shader. I think this update should be pushed upstream soon.

3 Likes

No problem, in fact thank you very much for your kindness and availability. As soon as I get home I will do other tests with the correction you gave me. Thank you very much.

Update: in the “experimental” folder inside the “Mega_Bezel” presets there are several examples of your Slot Masks (they are in fact called Guest Slot Masks) which together with other effects are masterpieces! The first two screens are related to the second Slot Mask (I only removed the reference to an overlay to leave it empty) and the third screen refers to the third Slot Mask. Found by chance and are a fantastic surprise, there is also a nice example of a modified Aperture Grill. A lot of stuff! @Guest.r

PS. Since Mega Bezel relies heavily on your work, I hope that in the future we could have plug and play presets not only with Aperture Grill but also with Slot Mask, maybe with various variations. I’m fantasizing and I understand that it’s difficult to manage over time being updated, but it would be majestic to see the results of the presets inside the experimental folder.

2 Likes