Please show off what crt shaders can do!

I have been spending some time increasing my DOS library using the DOSBox-Pure core.

I also just purchased a new Thrustmaster T.16000M joystick and have been using it to play one of my all time favorite DOS games.

Here is a shot of the game (Magic Carpet Plus) using one of my new Mega Bezel multiple reference presets.

Using built-in tools I have changed the base preset to Guest ADV NTSC, applied a graphics override to change the look of the bezel (And scale of the screen), and converted one of @ProfessorBraun’s recently posted presets to an internal shader override.

I don’t think the game has ever looked better. :grin:

6 Likes

Thank you! I have configured retroarch to use one global shader combination, you know, one shader to rule them all (consoles), instead of saving one for each. Kinda like back in the 90s, we only had one CRT to plug all consoles, so they all had the same look.

3 Likes

Hi Baelog, I really like what you have made and what I see, please can I ask if you can share your preset? Thank you with all my heart.

Unfortunately it doesn’t work like that because there are substantial differences in the way that different consoles output their video signals.

Having one shader to rule them all would only account for the TV input and output side of things, while completely ignoring the differences in characteristics among the various consoles outputs which shaders also seek to emulate.

Well, I’m sure some folks did have fancy tvs with more inputs, but we had one tv with an rf adapter to the antena of the tv. All consoles from the NES to the N64 looked fine with that input alone. I know there are different cables and each console had more outputs, but back then we also had adapters to use the composite, s-video or RGB signals interchangeably. That is what I am trying to replicate with this one shader:

Ps: not sure how to upload a .slangp file :sweat_smile:

EDIT: These settings should work for all consoles up to the 5th gen (pre 2000 era); plus it is lightweight on resources. Save it to a .slangp file and it should load in retroarch. For android devices is a bit more tricky to set it up :upside_down_face:

shaders = "10"
shader0 = "shaders_slang/blurs/shaders/sharpsmoother.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = "LinearGamma"
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
shader1 = "shaders_slang/dithering/shaders/sgenpt-mix/linearize.slang"
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_slang/dithering/shaders/sgenpt-mix/sgenpt-mix-pass1.slang"
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_slang/dithering/shaders/sgenpt-mix/sgenpt-mix-pass2.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "CB_Output"
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/dithering/shaders/sgenpt-mix/sgenpt-mix-pass3.slang"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/dithering/shaders/sgenpt-mix/sgenpt-mix-pass4.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 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/dithering/shaders/sgenpt-mix/sgenpt-mix-pass5.slang"
filter_linear6 = "false"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
shader7 = "shaders_slang/misc/shaders/image-adjustment.slang"
filter_linear7 = "false"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
float_framebuffer7 = "false"
srgb_framebuffer7 = "false"
shader8 = "shaders_slang/sharpen/shaders/fast-sharpen.slang"
filter_linear8 = "false"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "false"
srgb_framebuffer8 = "false"
shader9 = "shaders_slang/crt/shaders/crt-consumer.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
min_w = "0.020000"
smoot = "0.400000"
lumad = "3.499999"
mtric = "1.500000"
UseGamma = "0.000000"
CB_MITIG_NEIGHBRS = "2.000000"
VL_BLEND_LEVEL = "0.900000"
VL_MITIG_NEIGHBRS = "4.000000"
ia_saturation = "1.100000"
ia_contrast = "0.700000"
ia_black_level = "0.170000"
ia_bright_boost = "0.050000"
ia_R = "1.150000"
ia_G = "1.150000"
ia_B = "1.150000"
SHARPEN = "0.250000"
CONTR = "0.250000"
warpx = "0.020000"
warpy = "0.030000"
corner = "0.040000"
smoothness = "100.000000"
beamlow = "1.500000"
beamhigh = "1.400000"
brightboost1 = "0.700000"
brightboost2 = "0.700000"
MaskDark = "0.300000"
MaskLight = "1.300000"
slotmask = "0.300000"
slotwidth = "1.000000"
GAMMA_IN = "2.200000"
GAMMA_OUT = "2.600000"
glow = "0.150000"
Size = "1.500000"
sat = "1.300000"
contrast = "1.150000"
vpower = "0.300000"
vstr = "30.000000"
3 Likes

I’m not really talking about the different output standards, cables and connectors that the consoles supported. I was referring to something a little deeper which are the differences in output signal generated by the consoles due to differences in the way they processed their respective video signals and due to differences in video encoding chips used before the signal reached it’s final analog output port/cable i.e. RF/Composite/S-Video/RGB/Component.

You can take a read here if you’re curious.

I’m not saying that what you are trying to achieve is wrong though, just saying that technically the shaders do more than simulate what the TV is doing.

You can zip it and host it somewhere and post the link or copy and paste the contents and put it in Preformatted text single quotes.

Thanks! I figured it was the way to go :sweat_smile:

1 Like

8 Likes

Video:

Download: https://github.com/frankschoeman/kyubus-shader

6 Likes

Just continuing to showing off what CRT Shaders can do! Here are a two new presets I’ve been working on. One is a Shadow Mask preset and the other is a new Composite Slot Mask NTSC preset. Enjoy!

By the way, I haven’t seen nor heard @Nesguy around these parts in a while. I hope all is well with him.

1 Like

You mind sharing your settings used to get that shadow mask? I wanna try taking a stab at it.

I don’t mind but I was planning to reveal these as well as other settings as part of my next CyberLab Mega Bezel Death To Pixels Shader Preset Pack release. It’s been a while since my last release, so what you’re seeing now is really a sort of teaser/sneak peek preview of my work in progress and a build up to the next release.

I’m actually hoping that things will actually look the same (or at least very similar) whenever the next HSM Mega Bezel Reflection Shader version that resolves issues with the NTSC Filtering settings is released.

The setting that gives the Shadow Mask effect is just regular Mask 6 with a stagger/rotation/offset to match my resolution and viewport scale. What I’ve realized is that it doesn’t seem to be scalable so if the viewport scale is changed the mask may not look the same and the offset might need to be adjusted to suit.

It was also affected by the recent alignment change to the BGR Mask Layout (which was subsequently reverted) so you should probably get close to the screen and adjust the offset until you get the type of results you’re looking for. It’s not too difficult, as you adjust the Mask Stagger you’ll just see the phosphors shift or rotate and you stop adjusting when it looks the way you want.

You can take a look at this post here for an example.

Other than that, you can probably play around with the Mask Size to get the TVL you’re looking for.

Those screenshots actually show 2 different mask types by the way, Shadow Mask as well as Slot Mask.

1 Like

That’s precious information right there, at least I know that since it uses mask 6 which is pretty much for 1080p, whichever preset I come up with I can then make 1440p and 4k versions using mask 10 and mask 12 respectively. That link you posted use mask 5 in the settings and the screenshot there looks nothing like the shadow mask shots you’re using up above but I get the idea.

I just wanted your mask settings really not anything else, looks like you’re saving it all for a release though and that’s cool. Least I know the few settings I have to play with are mask shift/stagger and the crt mask size setting so I should be able to come up with something. In any case thanks for the feedback.

I think there might be more value in teaching someone how to fish. Lol. Especially one with your talents, potential and capabilities.

You might say that that link looks nothing like the Shadow Mask settings I’m using above but not too far below that post, you’ll see my very first released attempts at using the Mask Stagger to create a Shadow Mask. I’ve seen it posted about before and it’s something that I’ve always wanted to try.

Mask 5 is just a B&W version of Mask 6 as far as I can tell. I knew I didn’t want that, I wanted RGB so I used Mask 6 instead.

Then it was pretty obvious that size 1 wasn’t going to cut it because I was trying to match the reference photo in the post.

Yeah, I kinda wanted to present things in a fun and exciting way. I’ve recently hit my 1,000th post so that might be something to make a little fuss and blow a kazoo over.

Usually this would be available already in my pack for all to see but as it is now, not many would be able to apply my exact settings and get those results because of the version of CRT-GUEST-ADVANCE that the current version of HSM Mega Bezel Reflection Shader is using. I understand you’re only interested in the Mask Settings so I guess that aspect may not apply to you as you have access to the latest CRT-GUEST-ADVANCE, in which case the Mask Settings would look the same provided that your Integer/Non-Integer Scale and Viewport Scale settings also match because remember the Mask Stagger looks different even if you change the Integer Scale Offset by 1 for example. At least that’s what I’ve observed so far in my limited testing using different versions of the Shaders, each with their own bugs and kinks to work out.

Only yesterday, I kinda patched together a hybrid version of HSM Mega Bezel Reflection Shader using different parts of different versions and modified shader passes in order to get what you’re seeing there. When I release something I want it to be something that actually works and looks as intended on an actual release version of HSM Mega Bezel Reflection Shader.

I kinda care about these things, that’s why I put in my disclaimer about using my Shader Preset Pack with the version of HSM Mega Bezel Reflection Shader that it was designed and tested for to ensure quality and fidelity.

I’ve only just put together all of my settings in my first few presets today because they’re usually spread across many different files as I iterate when I’m tweaking something. I’m actually still consolidating my new NTSC Slot Mask preset that I’m also using in my most recent screenshot posts into useable and packageable presets.

When you look at the Mask Size settings, there are only 4 available I believe. As for the Mask Stagger Settings, there are only 16 positive and 16 negative increments (of course you can also enter additional values manually). You really have to look at the results in real-time on your particular screen as certain settings can give unwanted artifacts.

So feel free to ask if you would like any additional information on how to match the reference photo in the post or even my screenshots and I’ll be happy to assist.

1 Like

Yeah I’ve seen it around a few times myself and have now also become interested in it

I did a quick tweak eyeballing your pics and ended up using mask size 2 and mask shift 4:

I don’t think that matches up but it’s a start.

Thank you. I’ll more than likely end up going to guest to get some advice from him as well.

1 Like

This is what I’m talking about. If you tried 4, then how does 4.5 look or 3.5? Also, don’t forget the negative values as well. Negative values seem to rotate the Phosphors around a central axis.

I’m sure you’ll get it exactly the way you like it after you play around some more. Besides playing games, isn’t that where the real fun lies?

After you get a setting that you like, be sure to check your graphics for any strangeness that doesn’t look quite right or looks misaligned then you might have to tweak some more.

One thing I’ve recently noticed is that vertical resolution plays a very important role in avoiding all sorts of anomalies with scanlines and masks.

I also prefer this approach because when I retire, it would be better if you knew and understood the why, instead of just the what.

1 Like

-4 seems like the one that’s used in your pics, that’s the next number I ended up trying. In any case I’ll see what guest has to say. I’m also loving how gritty this mask makes the pixels look:

I can definitely see this and aperture grille presets becoming a part of my shader pack easily to complete the mask triangle with slot mask.

1 Like

Here’s a simple preset I put together in about 5 minutes, which is all I have patience for these days. It’s nice to move on from tweaking shaders and get on with playing some games for a change. Both are using mask strength 100%. The first shot is with no bloom, the second shot is with bloom. But is the bloom even really necessary? IMO the first shot is plenty bright and the colors are nice and vibrant. I hate what the bloom does to the mask detail with the whites, it irritates my OCD brain, but it does make the colors pop a bit more. It’s a trade-off, at best.

1:

shaders = "12"
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 = "false"
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 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "PrePass"
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/avg-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/linearize.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "LinearizePass"
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "absolute"
scale_x6 = "800"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "absolute"
scale_x7 = "800"
scale_type_y7 = "absolute"
scale_y7 = "600"
shader8 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "absolute"
scale_x8 = "800"
scale_type_y8 = "absolute"
scale_y8 = "600"
shader9 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "BloomPass"
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/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "false"
srgb_framebuffer11 = "false"
scale_type_x11 = "viewport"
scale_x11 = "1.000000"
scale_type_y11 = "viewport"
scale_y11 = "1.000000"
PR = "0.000000"
PG = "0.000000"
PB = "0.000000"
AS = "0.000000"
sat = "0.000000"
glow = "-0.000000"
brightboost = "2.500000"
brightboost1 = "2.000000"
gsl = "2.000000"
scanline1 = "5.000000"
scanline2 = "20.000000"
beam_min = "1.200000"
beam_max = "1.100000"
scans = "1.000000"
maskstr = "1.000000"
mclip = "0.000000"
gamma_out = "2.200001"
post_br = "1.100000"
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"

2:

shaders = "12"
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 = "false"
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 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "PrePass"
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/avg-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/linearize.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "LinearizePass"
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "absolute"
scale_x6 = "800"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "absolute"
scale_x7 = "800"
scale_type_y7 = "absolute"
scale_y7 = "600"
shader8 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "absolute"
scale_x8 = "800"
scale_type_y8 = "absolute"
scale_y8 = "600"
shader9 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "BloomPass"
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/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "false"
srgb_framebuffer11 = "false"
scale_type_x11 = "viewport"
scale_x11 = "1.000000"
scale_type_y11 = "viewport"
scale_y11 = "1.000000"
PR = "0.000000"
PG = "0.000000"
PB = "0.000000"
AS = "0.000000"
sat = "0.000000"
glow = "-0.000000"
bloom = "0.300000"
brightboost = "2.300000"
brightboost1 = "2.000000"
gsl = "2.000000"
scanline1 = "5.000000"
scanline2 = "20.000000"
beam_min = "1.200000"
beam_max = "1.100000"
scans = "1.000000"
maskstr = "1.000000"
mclip = "0.000000"
gamma_out = "2.200001"
post_br = "1.100000"
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

This part might depend a lot on how one’s display is configured, for example if it’s calibrated for maximum brightness and being used as a dedicated emulation display or if it’s calibrated and being used for more general use.

I can understand this but do know you can adjust Mask Gamma to compensate for this and there’s a shiny new toy we have been fiddling a bit with recently called magic bloom.

I’m not one who likes to jump on the bandwagon as soon as there’s something new, especially when I’m satisfied with my presets as they are but based on how it works and the fact that I recently raised some similar concerns about the way traditional bloom and glow produced a very general halo that didn’t appear to emanate from the individual phosphors, I gave it a try and have since switched to using negative values for bloom as well as glow.

If you read recent posts in @guest.r’s thread you’ll see users raging over it and some examples of how it works. Some of the examples seem a bit exaggerated for my taste but with subtle use, I think it might be a significant improvement over what we had before.

@guest.r explained that the regular bloom is a relatively simpler implementation. I observed that it applies the glow using “phosphors” and not on top of the mask or around the sprites, graphics or text like traditional glow and bloom are applied. So that might put some of your frustrations at ease.

Give them a try and definitely have a look at the NTSC Filtering settings, which don’t seem to always work in a linear manner. Remember anything that you leave at defaults can potentially offset the sharpness that you’re looking for.

Sharpness and NTSC resolution seem to go hand in hand, sometimes you need less resolution to help with artifacts or dedithering but then you might need to make up for the blur using sharpness and horizontal filtering, (which can also work against your attempts at blending dithering).

It’s good to take a break and also not do too much of anything at the expense of others in your life.

I’m glad to know that all is well with you and that you finally got back to playing games.

2 Likes

Bloom is just a mask mitigation technique i like to use to keep the brightness and contrast in good shape. When the equation darkens with a mask with lesser brightness, slotmask and optionaly BFI, then at least on most desktop displays a mask mitigation approach is a must or brightness and maybe saturation don’t provide a nice or authentic experience.

I used a slotmask TV for a long time as a main TV and these were never an issue. Also when comparing my old 2.0m crt viewing distance with my current 0.5m looks, i like mask mitigation even more.

But it’s purely optional and very helpfull for getting brightness, saturation and the contrast right if needed.

If i would develop the shader with testing on an expensive, bright and large TV it could go a different direction. But i guess i’ll more or less stay a desktop guy.

3 Likes