Please show off what crt shaders can do!

Speaking from experience (or my own preferences), for more cartoonish graphics (objects/backgrounds containing low details, usually just flat color surrounded by black outlines), sharp scanlines with little to no masks usually look best. Some exceptions would be those 8-bit Atari/NES/MSX/SG-1000 games for which I sometimes prefer a vintage look (stronger masks, deconvergence, bleeding, etc) to add more flavor to the otherwise very simple/primitive graphics.

For highly-detailed graphics (photo-like in some cases), they almost always look good with or without masks. However applying masks to the detailed graphics can give you really stunning results. Some games with seemingly cartoonish graphics (those CPS3 titles for example) are actually incredibly detailed. These games too will look stunning with mask on.

EDIT: I also find it difficult to make those pseudo-3d games look good. Outrunners still looks great because of those really detailed graphics I guess. On other hand, games like Rail Chase and Power Drift look like crap now. CRT shaders can’t save them. I still remember how I was wowed by these games back in the arcade. Donkey Kong Country and Vampire Saviour and lots of 2D games still wow me to this day, but I can’t find any way to make these pseudo-3d games look half as good as I remembered :sob:

1 Like

Are we talking about screenshots or playing games in fullscreen mode? The two are very different things.

Yeah screenshots can be deceiving but the perception (at least my personal perception) I mentioned generally applies to both situations.

EDIT: When I said masks looked good on detailed graphcs. I was referring to CRT-royale. Royale usually looks bright enough even with strong masks.

When I want a cleaner/PVM look with more dynamic, non-flat scanlines, guest-dr-venom would be my go to shader. Its scanline “shape” looks best if it makes sense. I also have some trouble increasing the brightness without altering the rest of the image too much. Here’s the preset if you are interested in helping me out :stuck_out_tongue:

shaders = "11"
shader0 = "shaders_slang/xbr/shaders/xbr-hybrid/2xbr-hybrid-v5-gamma.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 = "2.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
shader1 = "shaders_slang/crt/shaders/guest/lut/lut.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/crt/shaders/guest/color-profiles.slang"
filter_linear2 = "true"
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/d65-d50.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "WhitePointPass"
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/afterglow.slang"
filter_linear4 = "true"
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/avg-lum.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "true"
alias5 = "AvgLumPass"
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/linearize.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "LinearizePass"
float_framebuffer6 = "true"
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/blur_horiz.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
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/blur_vert.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = "GlowPass"
float_framebuffer8 = "true"
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/linearize_scanlines.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
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/crt-guest-dr-venom.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
WP = "-30.000000"
wp_saturation = "1.150000"
AS = "0.000000"
TAPSH = "5.000000"
OS = "0.000000"
brightboost = "2.000000"
brightboost1 = "3.000000"
gsl = "1.000000"
scanline1 = "15.000000"
scanline2 = "5.000000"
beam_min = "2.500000"
beam_max = "1.549999"
beam_size = "0.050000"
glow = "0.000000"
shadowMask = "5.000000"
vertmask = "0.160000"
mcut = "0.100000"
maskDark = "1.000000"
maskLight = "2.000000"
CGWG = "0.000000"
gamma_out = "3.000000"
spike = "0.000000"
bloom = "0.300000"
scans = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
1 Like

Sooooo… Just got done eyeball #_&#&'ing my CRT, and noticed something odd/interesting, the left and right of my screen have bigger “visually” mask strips than the center, the top and bottom doesn’t experience this warping only left and right.

Basically mask be fat to the left and right, gets skinner towards the middle. If I had a good camera I’d take pics, and this is visible regardless if the TV is on or off.

EDIT: My squinting eyeball math is saying that nearest to center section of the mask is around 1/3 - 1/4 the width of the outermost left and right mask strips.

@Nesguy @hunterk @guest.r @HyperspaceMadness

1 Like

what make/model is it? Is it a flat-front display?

1 Like

It’s a Sanyo Trinitron clone (silver), flat glass ye.

It’s kinda hard to get behind it atm, but it has a slotmask as far as I can tell.

Ok, I think I know what’s up:

As an aperture grille display, it only has curvature on the x axis, and they put thicker glass on the edges to hide that curvature behind a “flat” front. There was only a small handful of truly flat CRTs (mostly from LG, IIRC) and the rest faked it like this.

The refraction of the light in the thicker glass does a sort of magnification effect and also usually blurs it a bit.

1 Like

Just thought it was an interesting thing we hadn’t really discussed.

1 Like

It’s gotta be slotmask if it’s a Sanyo, though

2 Likes

Yeah, dunno. I assumed aperture grille when he said “trinitron clone”, but I don’t think Sanyo made any aperture grilles. Any slot/dot mask should have curvature on both axes, though.

I don’t know of any other reason why the phosphors would appear differently sized.

3 Likes

It’s still doing the same thing with the glass, so you were still right, just not about the mask style.

I meant Trinitron clone, in the sense that it’s stylistically/aesthetically the same, as the silver Trinitrons of that time. (Silver face, speaker holes to the sides of the screen, with a “flat” glass display)

Like I can see it doing it to the mask without the display even being powered, most likely when I’m able to actually run some legitimate content on it I’ll notice the vertical curvature as well, but the horizontal curvature is just much more prominent because of the glass nonsense we discussed earlier.

3 Likes

Here’s another tweak for the latest guest shader update. Last post I raised the temperature to give the picture a overall cool look giving the picture a bluish hue look, this time I defaulted it back to warm:

shaders = "10"
shader0 = "shaders_slang/crt/shaders/crtsim/composite.slang"
filter_linear0 = "true"
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/misc/grade.slang"
filter_linear1 = "true"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "PrePass"
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/avg-lum.slang"
filter_linear2 = "true"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "true"
alias2 = "AvgLumPass"
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/linearize.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "LinearizePass"
float_framebuffer3 = "true"
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/gaussian_horizontal.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "true"
srgb_framebuffer4 = "false"
scale_type_x4 = "absolute"
scale_x4 = "800"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "GlowPass"
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "absolute"
scale_x5 = "800"
scale_type_y5 = "absolute"
scale_y5 = "600"
shader6 = "shaders_slang/crt/shaders/guest/advanced/bloom_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 = "absolute"
scale_y6 = "600"
shader7 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "BloomPass"
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/crt-guest-advanced.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "false"
srgb_framebuffer8 = "false"
scale_type_x8 = "viewport"
scale_x8 = "1.000000"
scale_type_y8 = "viewport"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "viewport"
scale_x9 = "1.000000"
scale_type_y9 = "viewport"
scale_y9 = "1.000000"
Tuning_Sharp = "0.500000"
NTSCArtifactScale = "0.000000"
g_space_out = "3.000000"
g_sat = "0.400000"
g_lift = "-0.040000"
interm = "5.000000"
bloom = "0.900000"
halation = "0.500000"
gamma_c = "1.400000"
gsl = "-1.000000"
h_sharp = "2.000000"
s_sharp = "0.000000"
BLOOM = "1.000000"
csize = "0.030000"
barspeed = "200.000000"
barintensity = "0.010000"
warpX = "0.040000"
warpY = "0.050000"
c_shape = "0.600000"
shadowMask = "7.000000"
maskstr = "0.750000"
maskDark = "0.000000"
maskLight = "1.000000"
mask_gamma = "1.600001"
slotmask = "0.750000"
slotmask1 = "0.750000"
slotwidth = "1.000000"
slotms = "2.000000"
deconrr = "0.750000"
deconrb = "-0.750000"
deconrry = "1.500000"
deconrby = "-1.500000"
decons = "-2.000002"
addnoised = "-0.300000"
textures = "MaskTexture;NTSCArtifactSampler;shadowMaskSampler;SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
MaskTexture = "shaders_slang/crt/shaders/mame_hlsl/resources/aperture-grille.png"
MaskTexture_wrap_mode = "clamp_to_border"
MaskTexture_mipmap = "false"
NTSCArtifactSampler = "shaders_slang/crt/shaders/crtsim/artifacts.png"
NTSCArtifactSampler_linear = "true"
NTSCArtifactSampler_wrap_mode = "clamp_to_border"
NTSCArtifactSampler_mipmap = "false"
shadowMaskSampler = "shaders_slang/crt/shaders/crtsim/mask.png"
shadowMaskSampler_linear = "true"
shadowMaskSampler_wrap_mode = "clamp_to_border"
shadowMaskSampler_mipmap = "false"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/lut/custom_lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
6 Likes

I went to a cidercade last night and now I can’t stop thinking about masks and crts. I was especially impressed by how sharp the astro city monitor was. Wish I got some better photos, maybe next time.

Astro city

2 Likes

How does the real thing compare to the shaders or even to the15Khz crt stets? I was told that 24 khz are better since there is no haze what so ever.

Real thing looks amazing. Even with the best CRT shaders, the vast majority of digital displays still can’t accurately replicate the slot mask (not enough brightness, not enough PPI). The Astro City monitor looked very well cared for, very little color bleed and tack sharp. Nice scanlines.

Here’s an attempt to recreate the astro city monitor with guest-dr-venom-advanced. I’m still working on it. I think this is kinda the closest you can get with the mask at this resolution. Contrast and color is still a bit disappointing compared to the real thing, of course. I think this can be improved.

6 Likes

That looks nice. The new mini LED from Samsung QN90A has 26,534 : 1 contrast not as good as OLED but unlike OLED it has 1,428 cd/m² Brightness. should be really suitable for a crt effect.

4 Likes

15 kHz

2 Likes

That looks quite close to your photo. good stuff.

1 Like

The one from before is 24 kHz?

1 Like

Previous shot is my imitation of a 15kHz monitor, shot before that is my imitation of a 24kHz monitor (using the Astro City monitor as a reference).

The 15kHz imitation is based on my hazy, cider-clouded memories of the other machines.

A good imitation of a 15kHz monitor is tough, I think you need 4K to get a passable result. Even at 4K, it’s harder to get a good imitation of a 15kHz monitor than it is to imitate a 24kHz/31kHz monitor at 1080p.

1 Like