Ten years of CRT shaders

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.

image

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.

image

which winds up looking like this when tiled:

image

So far, so good.

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

image

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

image

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.

1 Like

This one seems to work: subpixel_slotmask

looks like this blown up:

subpixel_slotmask-big

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

7 Likes

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:

5 Likes

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).

image

2 Likes

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.

2 Likes

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!

2 Likes

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).

4 Likes

@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.https://pasteboard.co/IKuOJ1i.png

2.https://pasteboard.co/IKuO0Zc.png

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?

1 Like

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.

2 Likes

any changes to the params?

1 Like

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

2 Likes

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.)

Aperture grille will work fine at any ratio, for dotmask you need a minimum of 4x and for slotmask the minimum is probably 8x to produce anything close to a realistic result. Otherwise it will be a lower dot pitch than even the lowest-pitch CRTs. 8x with the slotmask should produce something very close to what a typical arcade CRT looked like.

You can sometimes get weird-looking results with certain combinations of mask/scanlines/scaling ratios. The cgwg dotmask at 5x scale makes the scanlines look weird/unevenly scaled (at least to me); that’s just an effect of the pattern and not due to incorrect scaling.

Scaling ratios are more of an issue with scanlines; you always want to be using interger scale with scanlines or they will come out badly scaled and inconsistent.

2 Likes

I just realized that the magenta/green masks will NOT work properly with the mask_size parameter. If you increase the mask size with these masks then they will no longer map to the LCD subpixels correctly.

So, how do we bring down the TVL on a 4K display? If you use the magenta/green masks you get 1080 TVL- fine if you’re trying to emulate a BVM or a FW900, but not so great if going for a regular arcade monitor or a PVM.

The solution is to use one of these two masks cgwg described in the initial post:

Red, Green, Blue, Black

OR

Red, Yellow, Cyan, Blue

Both of these will lower the TVL to 540 on a 4K display, right around where you want it to be if trying to emulate a PVM.

For an 8K display… the TVL is 1080 with these two masks, which is fine if you’re trying to emulate a BVM or FW900; not so great if going for a PVM or arcade monitor. For 8K, we can use:

Red, Black, Green, Black, Blue, Black, Black

which lowers TVL to around 617.

However, the amount of lost brightness with this mask is insane at 8K - you have 3 active subpixels out of 21!

Even at 4K, the first mask above would result in a 75% reduction in brightness, too much to compensate for even with HDR.

The second mask, however, is only a 50% reduction in brightness (6 active subpixels out of 12); this is the one you want to use at 4K! (Red, Yellow, Cyan, Blue).

2 Likes