Ten years of CRT shaders

I think it’s also worth pointing out that the Lottes shadowmask and dotmask effect also don’t account for the LCD sub pixels. The only pattern I know of that takes into account the LCD sub pixels, other than those you mentioned, is magenta, green, magenta, green, etc. (edit: this is perhaps stating the obvious since this is the mask used in CRT-geom). This gives you RxBxGxRxBxGx etc, assuming a standard RGB subpixel structure), which reverses the order of the “phosphors” but results in even spacing between them. For some reason, this still appears as RGB in a close up photo:

Are there any shaders out there that try to reproduce the image of computer CRT monitors rather than TVs? I assume this is probably impossible on any LCD that’s not 8K or something like that, given that CRT monitors use resolutions up to 1200p, but still, old SVGA-only monitors (600p) would be doable?

CRT-royale can do some things like that. Most of the time, you just want small (or nonexistent) scanlines and a very high-pitch mask effect, which is where most of the resolution issues come in.

Try this shader:

Has anyone made any serious attempts at slotmask emulation at the level of the LCD subpixels? I started making some sketches and it seems like it might actually be impossible.


First, here’s one of the simplest repeating patterns we could use to represent the slotmask phosphors and black space between them. I think there are four patterns you could use here, all 12x4 pixels.


which winds up looking like this when tiled:


So far, so good.

The closest I think we can get to that with the LCD subpixels is this:


Which looks like this at the level of the LCD subpixels:


Which just doesn’t look right at all, and requires an absurdly high resolution to work. You’re also losing so much brightness that I don’t think even the new QLED TVs could compensate. You could eliminate the columns of black pixels between phosphor groups, but that still doesn’t look right.

So, it appears to be impossible(!) to replicate the shape and spacing of a slotmask CRT’s phosphors with an LCD’s subpixels. For this sort of thing, we’re limited to dotmask and aperture grille.

This one seems to work: subpixel_slotmask

looks like this blown up:


And here’s what it looks like on my crappy 720p laptop screen:


Wasn’t really a fan of slotmasks but that image has me rethinking that.

@hunterk I have a question slightly related to this tangent, how could we convert lottes/guest’s masks to use green/magenta instead of rgb?

Well, that was a fine example of me overthinking things.

Of course, that image works perfectly. It’s a simpler version of the one I posted above. However, it winds up looking like this when you zoom in to the level of the LCD subpixels (reposting from above):

This is probably as good as it gets for slotmask emulation. On an actual slotmask, the phosphors aren’t as tall/skinny, and the black space between phosphor groups isn’t as large.

This also causes a ridiculous amount of lost brightness (the LCD screen is now 75% black space). Add scanlines on top of this and it’s almost a 90% reduction in brightness. The new QLED TVs might be able to compensate.

I was mistaken earlier when I claimed that it would take absurdly high resolutions for it to look good. At 720p it’s not good (no big surprise there), but at 1080p, it’s 360 TVL, on par with the average CRT TV. Very nice! :smiley:

(TVL is number of adjacent black/white vertical lines measured horizontally over a distance equal to the height of the display. So, 1080 / 6 pixels wide = 180, but each 6 pixels shows a black and white line, so multiply 180 by 2 = 360 TVL)

EDIT: Ah, but TVL doesn’t tell you everything. With the slotmask pattern, you only have 270 phosphor groups measured vertically on a 1080p screen… and you probably need 5-10x that many to accurately represent a CRT’s slotmask. 8K is barely cutting it! :rofl:


If you’re talking about doing a lotte’s shadowmask pattern using green and magenta, I thought about that and it doesn’t really work/have the desired effect; you wind up with wacky spacing of the subpixels (which is something we’re trying to avoid as per cgwg’s point number 7 in the original post).


1 Like

That actually looks very cathodic! Can I somehow use that mask together with easymode halation?

This is similar to the mask used for crt-geom-deluxe in MAME. It uses aperture grille. Slot mask is difficult to emulate. IMO the primary benefit in using magenta + green is increased brightness.

1 Like

For slotmask emulation, you’d better have one of the new 8K QLED TVs. The slotmask reduces brightness by 75%, and the fact that you need 12 pixels per phosophor triad means that it will look absurdly low-pitch on anything but an 8K screen.

So yeah, add that to the list of reasons to get a QLED TV.

EDIT: the options for 8K QLED TVs are pretty slim, and they’re pricey. Personally, I’m not sure if slotmask emulation is worth the jump in price.

There’s also the issue of input lag at different resolutions @ 120 Hz (for black frame insertion), and Rtings.com didn’t test the 8K TV at 8K @ 120 Hz. As of right now, I don’t know of a single display that can be recommended for slotmask emulation. Give it another 5 years, lol. By the time we’re old men we should be able to do (fairly) accurate slotmask emulation on a modern TV. :joy: Of course, you would still have the weirdly elongated phosphors and excessive black spaces between them (see image here), but that’s unavoidable.

2nd EDIT: actually, you can get a perfectly acceptable result with the slotmask at 4K if you’re going for a lower dot-pitch CRT (like an arcade monitor). See the rest of the conversation below.

1 Like

Not to be a debbie downer, but screen brightness is still an insurmountable obstacle if you’re trying to do scanlines, black frame insertion @ 120 Hz, AND mask emulation. There isn’t a single TV on the market that’s bright enough to do all three without making compromises with the mask and/or scanlines.

It’s doubtful that there ever will be a modern TV that’s capable of doing all this. Hang on to your CRTs!

1 Like

This mask actually looks pretty good at 4K (using custom AR to fake 4K; looks fairly similar to the low-TVL slotmask pic you posted elsewhere):

and I don’t think the brightness issue is as bad as 75% reduction; more like a 50%-ish reduction, based on the LUT (12x black pixels vs 12x green/magenta ones).


@hunterk looks good and i’m using 4k screen :+1: , i was playing with paint and i made this mask in 2 versions,screenshots doesn’t look right on browser but here’s anyway,i think i can do better :thinking:



1 Like

That’s not a bad compromise, actually.

I should clarify that I was talking about maxing out the mask strength to 100% to get it as CRT-like as possible. Add BFI on top of that, and scanlines on top of that, and I’m not sure any modern TV is up to the task while still maintaining adequate brightness. If you’re willing to reduce the mask strength a bit, it’s a different story.

Can you post settings for this shot?

oh, right, gotcha. That shot’s just crt-caligari at 4x scale with nearest filter followed by blend_overlay with default values pointing at the green/magenta slot mask LUT.

1 Like

any changes to the params?

Nope. You can decrease the spot height to make the scanlines bleed less into the gaps, though.

1 Like

Do masks generally only work correctly with certain integer scaling ratios? Like 2x/4x/6x etc, and 3x/5x give wrong results? (Or vice versa.)