Please show off what crt shaders can do!

@BendBombBoom nice work. Yeah, that’s definitely a lot worse than your average TV from the mid 80s to the 90s. That would have to be a very small CRT that was going bad.

I think black gaps between scanlines disappear completely when you have just one triad per scanline.

Can’t really count the triads because it’s an aperture grille, but I found this interesting. The image on the left is of a 8” PVM, 250 TVL.

3 Likes

Yeah, I’m sure my memory is off. That and my OCD freaking out. I think the scanlines may have always been there. I just didn’t notice the scanlines back in the day. Back then, you had to kind of back away from the TV, so you didn’t notice these things as much. Although, the picture you got there looks kind of like a way blurrier version of what I remember.

In the mame_hlsl shader parameters, there is a setting “NTSC Color Notch Filter Width.” I have no idea what that means nor what it does. It’s default is 1.00. I set it to 4.00. Looks fine now.

It’s a filter that applies over the area where luma and chroma signals overlap (I suspect the 1.0 value represents filtering between 3 and 4 MHz). You can widen the filter at the cost of horizontal sharpness. That’s probably why you associate the effect with PVMs, since it would make sense for them to use minimal filtering to preserve detail.

I found this video interesting:

Playing around I added the NTSC adaptive passes to both Venom and Mame and found the results to just the type of ugly I remember. Here is Earth Worm Jim with Venom, Venom + NTSC, and MAME + NTSC. The blending of dithering is best outside the artificial madapt. Mame has scrolling scanlines adds to the “organic” noise.
5 Likes

And another one with Shinobi III to show transparency and rainbowing. I’m starting to get a a fun range of CRT’s that I can cycle through and watch the signal get better or worse.

3 Likes

Any particular settings you are using? This one is looking quite nice! :star_struck:

I’m tweaking a few things and than will post the setting but it’s basically Venom with both passes from the ntsc/ntscAdaptive folder.

1 Like

The key to a convincing low TVL setup in my opinion is the visibility of the phosphors; they should be as noticeable or even more noticeable than the scanlines.

With guest-dr-venom, you can do 0.00/1.00 for Lottes mask, and add bright boost and bloom and crank up the lcd backlight until the image is suitably bright (see this post using SMB as an example). This only really works on an IPS display because a TN panel doesn’t have the contrast and it looks like butt.

I’d like to keep the brightness-enhancing effect from the bloom in guest-dr venom while reducing the actual bloom (spillover from bright phosphors into darker adjacent phosphors). Does anyone know if this is even possible?

That third picture is compelling. Nice!

I’ve messing around with CRT shaders that represents various TV’s I’ve had through the years. The further you go back the worse they get. CRT 1984 has chroma smearing, rolling scanlines, composite rainbowing. It’s wonderfully bad. The first two are just for fun.

6 Likes

I’m calling this one fuzzy. I messed with a near scanline-less shader with a mask only. It also has mAdapt on top so it smooths out most dithering. I’m not into those eagle and nedi style shaders so this is the closest thing for me.

4 Likes

I like the second Sonic shot. I’ve been getting some similar results lately while playing around with BW slotmask, BW aperture and Lottes stretched shadowmask. I think it should be a bit less bloomy but it’s hard to keep things bright without the bloom.

Here’s a pretty good reference shot of an Astro City monitor, that’s kind of what I’m currently going for. Focus isn’t quite good enough to see individual triads. IRL, it would be sharper and the colors would look better. It’s hard to tell what the camera is adding, need a good macro shot to really see what’s going on.

image

1 Like

Are you putting your own masks into Venom? If so how? I can do it with Mame_hlsl because there is texture path. I’ve been thinking about playing around with other types of masks.

1 Like

Pretty sure he’s either changing lines or adding lines for the BW masks.

Havn’t posted in here in a while. Just skimmng through the posts I see you guys are still making advancments with the guest shader and I love it. Here’s my take using mask 3 adding in a little convergence from the mame hlsl shader with the composite filter added to all the 8/16 bit systems except pc engine. Not going for anything accurate just messing around.

4 Likes

@BendBombBoom

The masks I’m referring to are already in guest-dr-venom. BW aperture is mask 7, Lottes stretched is mask 3 and BW slotmask is mask -1 and adjust “slotmask strength.”

Here are my current settings for Lottes. Not trying to match the colors in the photo because the CRT doesn’t look like that IRL anyway.

All my shots will look bad unless viewed at original size at 1080p and with the backlight adjusted to 100%. I recommend actually trying the settings in RA because screenshots don’t look the same as when the shader is running fullscreen while playing a game.

Edit: I just can’t get it bright enough when using the lottes mask with full strength phosphors, so here it is with default lottes mask settings. I don’t think it really works with the default settings, the phosphors really need to be stronger in order to convey the slotmask texture, otherwise it looks like a really weird triad dot mask.

shaders = "8"
shader0 = "shaders_slang/misc/grade.slang"
filter_linear0 = "true"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = "WhitePointPass"
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/afterglow.slang"
filter_linear1 = "true"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "AfterglowPass"
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/avg-lum.slang"
filter_linear2 = "true"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "true"
alias2 = "AvgLumPass"
float_framebuffer2 = "true"
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/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/blur_horiz.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "true"
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/blur_vert.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "GlowPass"
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_scanlines.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
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/crt-guest-dr-venom.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
float_framebuffer7 = "false"
srgb_framebuffer7 = "false"
scale_type_x7 = "viewport"
scale_x7 = "1.000000"
scale_type_y7 = "viewport"
scale_y7 = "1.000000"
parameters = "g_gamma_in;g_signal_type;g_gamma_type;g_crtgamut;g_space_out;g_hue_degrees;g_I_SHIFT;g_Q_SHIFT;g_I_MUL;g_Q_MUL;g_lum_fix;g_vignette;g_vstr;g_vpower;g_lum;g_cntrst;g_mid;wp_temperature;g_sat;g_vibr;g_satr;g_satg;g_satb;g_lift;blr;blg;blb;wlr;wlg;wlb;rg;rb;gr;gb;br;bg;LUT_Size1;LUT1_toggle;LUT_Size2;LUT2_toggle;SW;AR;PR;AG;PG;AB;PB;sat;lsmooth;GAMMA_INPUT;TAPSH;GLOW_FALLOFF_H;TAPSV;GLOW_FALLOFF_V;TATE;IOS;OS;BLOOM;brightboost;brightboost1;gsl;scanline1;scanline2;beam_min;beam_max;beam_size;h_sharp;s_sharp;csize;bsize;warpX;warpY;glow;shadowMask;masksize;vertmask;slotmask;slotwidth;double_slot;slotms;mcut;maskDark;maskLight;CGWG;gamma_out;spike;inter;interm;bloom;scans"
g_gamma_in = "2.500000"
g_signal_type = "0.000000"
g_gamma_type = "1.000000"
g_crtgamut = "0.000000"
g_space_out = "0.000000"
g_hue_degrees = "0.000000"
g_I_SHIFT = "0.000000"
g_Q_SHIFT = "0.000000"
g_I_MUL = "1.000000"
g_Q_MUL = "1.000000"
g_lum_fix = "0.000000"
g_vignette = "0.000000"
g_vstr = "40.000000"
g_vpower = "0.200000"
g_lum = "-0.000000"
g_cntrst = "0.000000"
g_mid = "0.500000"
wp_temperature = "6505.000000"
g_sat = "0.000000"
g_vibr = "0.000000"
g_satr = "0.000000"
g_satg = "0.000000"
g_satb = "0.000000"
g_lift = "-0.000000"
blr = "0.000000"
blg = "0.000000"
blb = "0.000000"
wlr = "1.000000"
wlg = "1.000000"
wlb = "1.000000"
rg = "0.000000"
rb = "0.000000"
gr = "0.000000"
gb = "0.000000"
br = "0.000000"
bg = "0.000000"
LUT_Size1 = "16.000000"
LUT1_toggle = "0.000000"
LUT_Size2 = "64.000000"
LUT2_toggle = "0.000000"
SW = "1.000000"
AR = "0.070000"
PR = "0.050000"
AG = "0.070000"
PG = "0.050000"
AB = "0.070000"
PB = "0.050000"
sat = "0.100000"
lsmooth = "0.900000"
GAMMA_INPUT = "3.499997"
TAPSH = "1.000000"
GLOW_FALLOFF_H = "0.300000"
TAPSV = "1.000000"
GLOW_FALLOFF_V = "0.300000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
brightboost = "1.000002"
brightboost1 = "1.000002"
gsl = "2.000000"
scanline1 = "1.000000"
scanline2 = "50.000000"
beam_min = "1.000001"
beam_max = "1.000000"
beam_size = "0.000000"
h_sharp = "3.000000"
s_sharp = "1.000000"
csize = "0.000000"
bsize = "600.000000"
warpX = "0.000000"
warpY = "0.000000"
glow = "0.000000"
shadowMask = "3.000000"
masksize = "1.000000"
vertmask = "0.000000"
slotmask = "0.000000"
slotwidth = "2.000000"
double_slot = "1.000000"
slotms = "1.000000"
mcut = "0.250000"
maskDark = "0.500000"
maskLight = "1.500000"
CGWG = "1.000000"
gamma_out = "3.500000"
spike = "0.000000"
inter = "400.000000"
interm = "1.000000"
bloom = "0.500000"
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

IDK, I just think the pixel grid at 1080p makes it really impossible to have a convincing mask effect in an actual fullscreen use-case scenario. Pretty screenshots are one thing but everything just goes to hell once scaled to the full screen.

It’s a cycle with CRT shaders. Eventually, I just give up. Then a couple months later I think maybe there’s something else I can try, then I spend a few weeks tweaking and give up again.

I always wind up just going back to plain old scanlines at 1080p.

In theory, Lottes stretched shadowmask would work if you could keep the phosphors from disappearing over bright colors and keep the image bright at the same time.

In theory, cgwg aperture would work if you have a standard subpixel layout and the subpixels don’t freak out when you try to shut off every other subpixel, and if the backlight is capable of getting bright enough (most aren’t).

BW slotmask, upon closer examination, doesn’t really work IMO. At least not at 1080p.

I think BW aperture grille still works. This might be the best mask at 1080p.

I’m still not completely ready to give up on the Lottes mask at 1080p, but taking a break from it. It seems like there has to be a way to keep the phosphors well-defined over bright colors while keeping the image bright.

Has anyone posted shots on the new LG Oled CX in here yet? Looking to see how much more convincing shaders look over those tvs.

1 Like

I imagine that cgwg aperture won’t work on such TVs due to the addition of the white subpixel, but Lottes stretched shadowmask would benefit from the additional brightness and it doesn’t care as much about subpixels.

OLED typically has aggressive ABL which might put a serious damper on things, though.

I’d like to see some shaders on one of the recent QLEDs, too. Someone go buy a new expensive TV so we can test all of this, lol.

1 Like