New CRT shader from Guest + CRT Guest Advanced updates

@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

Hey @guest.r is it possible at all to somehow make it where so that chroma scaling 2-phase can be turned up to 4 while having the taps as low as 6 without it breaking its effect to blend dithering?

Ever since I started sharpening up my presets I can’t help but wonder if such a feature could ever be possible. From what I see you get the absolute best image with 2-phase games with that combination. For example in my presets I have the taps setting lowered to 6 with 2phase chroma scaling at 1.60. The reason I chose that number is cause once I start going higher the first thing I noticed is that vertical line blended dithering begins to start breaking so to avoid that I leave it at that safe number.

Here’s taps at 6, chroma scaling ar 1.60:

Here’s now taps at 6,chroma scaling at 4:

The image looks so much cleaner and colors pop more with a higher chroma scaling, only downside is that it breaks that red blended checkerboard dithering in the back.

Is there anyway at all to have it keep that blended dithering with taps at 6 and chroma scaling maxed out?

1 Like

It’s a some sort of contradiction to still have grid or line patterns with different chroma values blended with a very narrow chroma spread.

This basically only works if chroma values are very close (same colored) i.e. black-white-gray, darker and lighter checkerboards of the same hue…

Doesn’t work in cases where dithering alters different color types (like red-black).

The best option in this situation for crispest colors is to throw in a de-dithering pre-shader. Another alternative is to grade the colors to be a bit more vivid.

2 Likes

I kind of knew the answer would basically come down to “no” lol, I had to try though. I even thought of another bizarre idea where the “mixed phase” mode could be rearranged to where it basically goes into 3phase mode but with the chroma scaling 3phase effect deactivated and 2phase mode activated only, giving the ultimate look where you get the popful colors that only 3phase gives but then you have the checkerboard and vertical dithering effect from 2phase and this mode would only activate when 2phase content is being displayed and it strictly switches over to 3phase mode with 2phase mode completely deactivated when 3phase content is being displayed, sounds crazy right lol.

I kind of dabbed in this idea previously but it was just with trying to crank saturation up in grade, wasn’t really giving fruitful results. I haven’t tried retweaking tints and other settings though, I guess I could try exploring that method.

1 Like

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

Notable changes:

  • New functionality added with NTSC shaders to better preserve ‘edge’ colors. Use with care. :wink:
  • A bit better blending with low-taps values.

Download link:

https://mega.nz/file/MlQWWaQZ#G1kWkuJnPJJ68_jUXoa7nzXuQEMK9dgHpmeJDPN7hTQ

15 Likes

Oh man you just had to put this out soon as I stepped out for the day lol, I can’t wait to see what this update is. Glad I was also able to get you back in the lab for a bit too. Will post my findings later.

Edit:

Ok @guest.r came home and gave it a quick spin before I head out again. First thing I tested was the 2phase chroma scaling to see if anything changed there. Wanted to test vertical line dithering blending and see if blending breaks by raising that chroma scaling up and the best game and area to test is Sonic 3 right where he runs up that tree log using the air.

To show you all what I mean first here’s ntsc taps setting set to 6 with 2phase chroma scaling maxed out:

Vertical line dithering is a broken mess as guest.r explained in the above post.

Here’s my standard setting at 6 taps, chroma scaling 1.60:

For me that those settings are just about right before dithering starts breaking up.

Here’s the settings I was hoping I could use, taps 6 chroma scaling 2.00:

That combination breaks the blending as well so I just left that area alone. I think I was able to squeeze a little extra juice out by bringing taps up to 1.70 and still keep blending. I’ll test more later.

Second new feature which is the “edge color” setting, guest.r my man, you have understood the assignment! Soon as I cranked that baby up I noticed the difference INSTANTLY.

Here’s an example, Castlevania Bloodlines for Mega Drive. During the intro where Elizabeth is walking her face has a bunch of pixel edges that begin to “break” the more you shatpen ntsc up. Here’s my standard preset:

Here’s after apply the new edge color setting:

All around her face the edges now looks more smoother and not “crunchy” looking as before and it actually brings out the colors a bit more basically fullfulling a part of my request from earlier, it’s like that setting “fills in” the areas that seemed to have gotten either dulled out or the where the edges have dissapeared, it’s amazing just look at her eyes gleaming now. I admit that has always been a issue for me in the past where that would happen from trying to sharpen ntsc up, now that problem is completely gone. I didn’t get a chance to try it on any 3phase games but I’m expecting it to give the same results. I’m not sure if everyone here hasn’t noticed but that setting alone is a game changer for every single user’s ntsc presets here and I can’t thank you enough for including that setting. A new preset pack is in the making soon as I get the chance.

2 Likes

@guest.r Hi, sorry for this silly question, but is there a way to set colour gamma? I mean if it’s possible to change gamma only to the colour saturation? I know there’s mask gamma, but for colour gamma only?, is it possible or is it the same? just wondering… :thinking:

1 Like

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.

4 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