Please show off what crt shaders can do!

@Nesguy and @MajorPainTheCactus don’t pay too much mind to those screenshots as I can’t even remember which preset is that. I lost a preset I had where I had just found that things looked somewhat nice so I basically have to start over. I don’t even remember which of @MajorPainTheCactus’s presets it was based on. On my TV there’s a lot of variance in the output (including colour and brightness) depending on which TVL is selected and also which Type of mask. Shadow Mask seems to work the best as I can do all the TVLs and the colours look most accurate to me. If I switch to Aperture Grille then I can’t do 600 or 1000TVL. They look green. Slot Mask’s colours look weird.

I’ll have to go through the presets again until I find the one that looks best on my screen. I’m really looking for a nice Aperture Grille look with proper colours (to my eyes) with enough brightness, saturation and contrast.

My TV is SDR so those pics were taken in SDR mode. When viewed in the forum post on the same TV they look a lot darker than in real life. On my phone they looked okay.

So in time, probably when I get something that looks the way I like (again) I might report back with some more empirical findings but I do see the potential in the shader!

2 Likes

I appreciate the love and you’re welcome. Feels good when someone pops in that hasn’t posted in months just to show some love to my presets and I’m glad you like them, they just give off a nice retro feel doesn’t it? I’m working on another update, the preset you have looks like this:

I posted up another preset update not too long afterwards with mask settings given to me by the man guest himself which looks like this:

That’s the intended look the first preset was suppose to look like but ended up having the scanlines pretty much taken out due to it creating a nasty moire like pattern across the screen unless you enable integer scaling and lose some of the image from the top and bottom of the screen. I don’t like integer scaling so I’m working on my next update to get the image to look like the second pic but without having to use integer scaling so that you can still see everything on the screen and with no moire, so far I’m here with it:

Once I tweak it to where it looks like or close enough to the second pic I’ll post up another update asap

5 Likes

It is supposed to look like that if you use it at full strength. Of course mask 0 will be more bright, you use more pixels then, 18 subpixels vs 12 subpixels at mask 2 (50% more bright).

Imagine using B-G-R-X, or R-G-B-X that would be like playing Doom on N64 lol

1 Like

It’d be nice if we knew whether or not light bleeds into the vertical black lines on an aperture grille that has the vertical black lines. I imagine it would but it’d be nice to have empirical evidence. If so, using some bloom (just a notch or two) might actually be more accurate when using the three color aperture grille masks.

Does anyone know?

1 Like

Here’s an example of how mask detail can improve the image. Look at the bridge of the nose, the reflection in the eyes, the lips, etc.

First, default sharpness settings in guest-dr-venom combined with some other settings which I’ll post below.

horizontal sharpness adjusted to maximum

horizontal sharpness adjusted to maximum, remove the mask

shaders = "12"
shader0 = "shaders_slang/misc/grade.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"
g_signal_type = "0.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
glow = "0.000000"
bloom = "0.050000"
brightboost = "1.000000"
brightboost1 = "1.000000"
gsl = "1.000000"
beam_min = "1.700000"
beam_max = "1.600000"
beam_size = "0.000000"
scans = "2.500000"
shadowMask = "2.000000"
maskDark = "0.000000"
maskLight = "1.000000"
mask_layout = "1.000000"
mask_gamma = "5.000000"
mclip = "0.000000"
gamma_out = "2.100000"
post_br = "1.750000"
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"
1 Like

My recommendation was to go no higher than 0.15. My masks don’t look washed out in my presets that use full strength masks and bloom at 0.15. Like the Halation setting, it may not exactly be linear especially at lower settings. You might get a noticeable jump going from 0.10 to 0.15.

@Cyber I think the bloom washes out the phosphors pretty badly, actually, and it results in the center of the beam getting washed out even further, resulting in a tangible difference in beam shape that’s noticeable at normal viewing distances even if you can’t quite put your finger on it. Here’s a closeup of a white pixel showing the center of the beam.

No Bloom

image

Bloom 0.05

image

Bloom 0.10

image

Bloom 0.15

image

1 Like

@guest.r is 0.01 the smallest increment we can use for glow, now?

2 Likes

It’s a bit reduced down further to functional 0.005. 0.01 is just a parameter increment.

It’s similar to say that decreasing mask strength washes out the phosphors. Bloom has a property to induce a more bright pixel radial influence on mask strength and brightness. Currently it’s has still a bit saturating effect on the end image using very high mask strengths.

The effect is also somewhat scanline sensitive, so scanlines should maybe be adjusted if using bloom, maybe somewhat less scanline saturation looks better.

2 Likes

Yes, I was going to add that it’s not quite as bad as reducing the mask strength.

I was also thinking that something might be done with the beam shape controls to eliminate the mid-beam clipping.

2 Likes

Bloom is designed to not diminish the scanlines too much, there is also some scanline preserving code at work which might cause the mid-beam situation. If someone starts the preset with a scanline ‘idea’ it’s quite simple to add bloom afterwards. If there is too much scanline contrast it should get solved at the ‘scanline level’.

You can try this code in the last pass:

vec3 Bloom1 = min(Bloom*(colmx+color), max(0.5*(colmx + orig1 - color),0.001*Bloom));

where ‘colmx’ replaces ‘orig1’, but then scanline saturation gets destroyed etc…

2 Likes

I won’t doubt you. Perhaps some of my other settings are offsetting that effect. It’s been a while since I’ve felt the need to scrutinize my mask settings. From memory the mask in my presets tends to be very dark. I’ll give them another look though. They definitely don’t look anything near as pale as what you have in those examples.

I’m doing some extreme things with mask gamma, post brightness and scanline saturation in addition to the mask.

shaders = "12"
shader0 = "shaders_slang/misc/grade.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"
g_signal_type = "0.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
glow = "0.000000"
brightboost = "1.000000"
brightboost1 = "1.000000"
gsl = "1.000000"
beam_min = "1.600000"
beam_max = "1.500000"
beam_size = "0.000000"
scans = "2.500000"
shadowMask = "2.000000"
maskDark = "0.000000"
maskLight = "1.000000"
mask_layout = "1.000000"
mask_gamma = "5.000000"
mclip = "0.000000"
gamma_out = "2.200000"
post_br = "1.600000"
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"
1 Like

These use Bloom at 0.15.

Be sure to view these zoomed in, full screen or original size for them to look as they should!

For the best viewing experience of these screenshots I suggest you right click on the image then click, “Open link in new tab”, “Open link in new window” or “Open image in new tab”.

Then click on the new window or tab and press the F11 key for a fullscreen view.

3 Likes

Here’s a closeup of white showing the center of the beam. The mid-beam situation looks pretty good, there’s only very slight clipping there. There is still some washout in the whites. The main thing I’m confused about is these different colors, though.

image

3 Likes

One thing I would say Cyber is that the whites all look a bit too ‘clean’. Here’s a very close up shot of my 2730QM PVM and of the Megatron. There’s quite a lot more variatio:

3 Likes

Looks very convincing.

3 Likes

Bloom also has a chromatic component, as the base for it is more or less radial gaussian distribution. Mechanisms are implemented that it doesn’t work in a de-saturating manner as it would if left untweaked.

Ofc. if someone likes the old fashioned mask strength without bloom/halation to achieve desired brightness levels on an ordinary display, then it’s also fine.

Although current bloom implementation imo contributes to a somewhat less artificial look resulting from horizontal filtering implementation.

3 Likes

Or, that was intentional. I wanted to start over from a point of perfect convergence because my initial 100% mask strength presets used a sort of random deconvergence that was probably inherited from some older presets I had used as a starting point. I had wondered why the phosphors were all over the place then and wanted something that has the triads properly aligned. Also around that time, @guest.r did a lot of work on deconvergence so I was glad that I didn’t have to rework my presets in order to compensate.

This is where things were before that overhaul:

“This is what you’ll see if you stick your nose up to the screen using my new and improved for 2022 CyberLab Composite - Sharp PVM Edition Shader Preset! Just zoom in and bask in the everglow of those RGB “phosphor” triads!”

In those examples I had tried manually align the phosphors because I wasn’t responsible for how they were before so I didn’t really know if they were where they were supposed to be and these things also affected the colour.

Also, I don’t really understand how deconvergence should be correctly applied from an accuracy perspective so other than a slight nudge here and there because I noticed it improved the colour or contrast in a certain way, I would probably leave it alone for the most part until I know what I’m doing. With that said I do have some presets with deconvergence enabled.

Lastly, my memories of going close to the TV and seeing the RGB Phosphor triads don’t include any memory of deconvergence. Especially to the extent of those examples you just posted. I grew up using a Commodore 1702 Monitor for the most part.

Besides that, those are screenshots not photos taken of the screen using a camera. Those same examples might look a little dirtier if I photographed the screen.

3 Likes

You’ll have more horizontal deconvergence normally than you would vertical. Iirc the red and blue tend to deconverge with each other opposite from the green. (So you turn red and blue to the same value and flip green to the negative or positive version of that value example; R 1.5 B 1.5 G -1.5, I usually set my vertical deconvergence to around half of my horizontal.)

2 Likes