Please show off what crt shaders can do!

crt-royale shadow mask

8 Likes

That’s a strange shadow mask pattern, but looks cool nonetheless

Just found this, not sure if it’s helpful but I’d rather post the links just in case.

4 Likes

Guest-advanced, BW aperture grille, 100% strength:

Actual CRT:

7 Likes

When i created the black and white masks for crt royale, i liked the rounded effect that the bloom gave. On the other hand, removing all that makes the image lifeless in my eyes, I don’t know how to describe it. It’s just a matter of taste but I’m not a big fan of this rendering. I don’t know if this feedback is useful haha :smile:

1 Like

Well, here’s a whole lot of bloom. I don’t really see how it improves anything?

2 Likes

Well there is bloom and bloom,unfortunately all my previous screenshots have been deleted by pasteboard, but i will show what things you can do with bloom. Maybe you won’t see it on my picture without normal size. I call that the spade effect or razor :person_fencing: It makes things pop to my eyes

4 Likes

To each his own, but it just looks like certain colors are a bit oversaturated (could be other settings), and it has a bad effect on the mask detail. The mask is a very important part of the CRT experience, at least for me- I’m all about that grain. Plus you’re using 4k, which is a lot more forgiving. Still, I wonder how these settings hold up in a photo of the screen. In my experience the bloom makes things look pretty rough (as you can see in the photo I just posted). Probably not as bad at 4k, though.

3 Likes

Not sure if this is the right thread to ask, but here goes. Is it accurate to use TVOut-Tweak’s TV Color Levels parameter along with CRT shaders? From what it can tell, it basically clamps the color levels from 0-255 to 16-235, which of course results in, well, color clamping, but it also results in somewhat more vibrant colors as well, which is pretty interesting. Here’s a shot of my current favorite preset:

And here’s the same shot with TVOut-Tweaks prepended and with the TV Color Levels parameter enabled:

I no longer have a CRT, so I can’t say which one is supposed to be closer to the real thing. Perhaps someone who does can chime in?

4 Likes

It’s amazing how I can watch 360p content using Mega Bezels shaders and the image looks incredible.

What an amazing set of shaders. I’ll be using this more and more I think.

10 Likes

Koko-aio shader. No masks. Scanlines only:

7 Likes

More black and white aperture grille. I’m not obsessed, I don’t have a problem and I can stop any time I feel like it

8 Likes

Here’s another shot showing the TVOut-Tweak shader’s TV Color Levels parameter at work:

And here’s the same shot with that parameter disabled:

Notice the image appears a little bit more washed out, at least in comparison to the former. You’ll also notice the black area around the border of the image is a dark gray in the second shot, whereas it’s fully black in the former, matching the black “overscan” border areas that truly have nothing there.

Again, I would like to know if this is at all accurate to real hardware on a CRT, because it honestly looks quite nice like this, but I am fully aware that it is clamping colors, and a quick look at the 240p suite confirms it:

This is known as “limited RGB” range.

I can’t vouch for the veracity of this claim from Quora, but it sounds truthy:

This “limited range” form of RGB encoding is a holdover from the early days of digital television. In digitizing an analog video signal, some accommodation had to be made for the fact that analog video standards generally permit levels “whiter than white” (i.e., the signal is permitted to go above the established standard “white” level - for example, this can happen due to the addition of the chroma components in a composite color video signal) and also “blacker than black” (for instance, the blanking level and sync pulses were usually below the standard “black” level of the signal). So in an eight-bit system, it was common to reserve some of the upper codes (236–255, in this case) and some of the lowest codes (here 0–15) for these excursions beyond the usual “black to white” range.

Some displays will automatically switch themselves to limited RGB when they detect a YUV format signal because they know/assume this is a broadcast/cinematic signal that expects it, vs RGB where you wouldn’t expect any of the overshoot to be needed or wanted. In any event, it’s apparently just an artifact of the transition from analog to digital signals and YUV/YIQ to RGB as the norm, so I think it is indeed “accurate” to do so in the context of CRT televisions, though I think you would have the same mismatch with a real console hooked up to a CRT monitor via RGB.

Note: apparently even Blurays expect Limited RGB range and will look “bad” on a full range RGB signal path.

1 Like

I’m just even more confused now, because a CRT is capable of showing the full colorbars in 240p Test Suite.

they’re capable of showing it, sure, but i don’t know if the consoles actually sent that full range, particularly over non-RGB (i.e., YIQ/YUV) signal paths. Someone would have to test it, I guess, and it would be a tough thing to verify because a poorly calibrated TV would muddy the waters.

Someone would need to first verify that their display shows the full range over RGB, then switch over to svideo or whatever on the same display with the same console and see if they can still see the full range.

2 Likes

I wonder if this has something to do with the instructions for colorbars:

Adjust the white level first, using the “Contrast” control on your TV set. Raise it until you cannot distinguish between the blocks under “C” and “E”, and lower it slowly until you can clearly tell them apart.

It’s not “adjust white level so all color bars can be distinguished”

Looks like the clipping with TV levels starts precisely at E.

2 Likes

oh bingo. good looks.

1 Like

This is my new “work in progress” alternative to my current preset. I’m on a 1080p ~24’ panel relatively close to me, I went for a more organic look, easier on the eyes. As usual screenshot don’t tell the whole story due to the noise helping keeping things together, smoothing transitions and helping quite a bit with the organic feeling. I also have a slight variation with more sharpness but I like how this one feels in motion in a variety of games/resolutions.

shaders = "14"
feedback_pass = "0"
shader0 = "shaders_slang/misc/shaders/colorimetry.slang"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
shader1 = "shaders_slang/misc/shaders/image-adjustment.slang"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
shader2 = "shaders_slang/crt/shaders/guest/advanced/stock.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/crt/shaders/guest/advanced/stock.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "StockPass"
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/afterglow0.slang"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = "AfterglowPass"
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/pre-shaders-afterglow.slang"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "true"
alias5 = "PrePass"
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/crt/shaders/guest/advanced/avg-lum.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "true"
alias6 = "AvgLumPass"
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/linearize.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "LinearizePass"
float_framebuffer7 = "true"
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/gaussian_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 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "GlowPass"
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "absolute"
scale_x9 = "800"
scale_type_y9 = "absolute"
scale_y9 = "600"
shader10 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "absolute"
scale_x10 = "800"
scale_type_y10 = "absolute"
scale_y10 = "600"
shader11 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = "BloomPass"
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
scale_type_x11 = "source"
scale_x11 = "1.000000"
scale_type_y11 = "source"
scale_y11 = "1.000000"
shader12 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear12 = "true"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = ""
float_framebuffer12 = "true"
srgb_framebuffer12 = "false"
scale_type_x12 = "viewport"
scale_x12 = "1.000000"
scale_type_y12 = "viewport"
scale_y12 = "1.000000"
shader13 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = ""
float_framebuffer13 = "false"
srgb_framebuffer13 = "false"
scale_type_x13 = "viewport"
scale_x13 = "1.000000"
scale_type_y13 = "viewport"
scale_y13 = "1.000000"
color_mode = "2.000000"
white_point_d93 = "0.000000"
clipping_method = "2.000000"
ia_target_gamma = "2.600000"
ia_monitor_gamma = "2.400000"
ia_saturation = "0.900000"
ia_black_level = "0.010000"
ia_R = "0.950000"
ia_G = "0.950000"
ia_B = "1.050000"
AS = "0.300000"
sat = "0.450000"
CS = "1.000000"
CP = "1.000000"
WP = "25.000000"
wp_saturation = "0.800000"
contr = "0.200000"
vigstr = "0.250000"
vigdef = "1.000001"
GAMMA_INPUT = "2.500000"
gamma_out = "2.200000"
interm = "4.000000"
m_glow = "1.000000"
m_glow_cutoff = "0.350000"
SIZEH = "7.000000"
SIGMA_H = "1.500000"
SIZEV = "7.000000"
SIGMA_V = "1.500000"
SIZEHB = "6.000000"
SIGMA_HB = "0.950000"
SIZEVB = "6.000000"
SIGMA_VB = "0.900000"
glow = "0.300000"
bloom = "0.250000"
mask_bloom = "0.300000"
bloom_dist = "0.300000"
halation = "0.150000"
brightboost = "1.450000"
scanline1 = "5.500000"
scanline2 = "6.000000"
scans = "0.600000"
h_sharp = "2.000000"
s_sharp = "0.400000"
warpX = "0.030000"
warpY = "0.040000"
csize = "0.050000"
bsize1 = "0.150000"
shadowMask = "7.000000"
maskstr = "0.800000"
maskboost = "1.500000"
mshift = "2.000000"
addnoised = "0.400000"
noiseresd = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
8 Likes

Definitely gives a “organic” vibe. Nice

3 Likes