Please show off what crt shaders can do!

Actually that’s @MajorPainTheCactus’s own “crt-sony-megatron-aeg-CTV-4800-VT-hdr” preset, just in SDR mode and with a 1080p mask.

I’m using GDV to get a target for the Megatron CVM in SDR mode.

Here’s GDV with just a notch of bloom. It does brighten things up quite a bit. It doesn’t do anything to solve the black lines between triads problem, but maybe I’m making too big a deal out of this, since at least some aperture grilles appear to have the black lines, such as in this photo from wikipedia:

https://commons.wikimedia.org/wiki/File:CRT_Phosphors.jpg#/media/File:CRT_Phosphors.jpg

4 Likes

Is this the HDR version? Something seems off, it doesn’t look like other photos/videos I’ve seen.

2 Likes

@cyber are you sure that bloom doesn’t wash out the mask? This is with bloom at 0.50. It’s looking pretty weird here, I specifically don’t like how there’s clipping in the middle of the scanline.

I tried bloom 0.10 and the effect is barely noticeable, at 0.05 I can’t detect it in a closeup. So I think if bloom is going to be used at all it should be limited to just a notch. I’m on the fence about it though.

3 Likes

Looking good @Cyber something is wrong in the second picture down though and possibly other images in that each double set of pixels representing a phosphor should be the same length and they aren’t in your images. That’s either a bug in the shader - I do know of a problem I need to fix where I potentially sample two different source pixels for each side of the phosphor which is wrong. However the problem above seems to be a little more extreme than that would produce. So possibly something up with your display chain on top of the shader bug? It’s strange as I don’t see the problem in the blues everywhere.

Just as an example here the two green lines of pixels should be the same intensity and length same goes for the blues. Looks really wrong here:

1 Like

The phosphors don’t appear to be the same width and the scanlines are a bit weird too, the phosphor dynamics seem off.

1 Like

@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