New CRT shader from Guest + CRT Guest Advanced updates

If you run higher resolution content, you might want to have ordinary “lores” scanlines. Some emulators work with increased internal resolution and you can set the “internal resolution” parameter to match.

Sure. NTSC preset is to be used, here are the parameters for the newest version in this thread:

wp_saturation = "1.250000"
ntsc_scale = "1.999999"
m_glow = "1.000000"
m_glow_cutoff = "0.150000"
m_glow_low = "0.600000"
m_glow_high = "4.100001"
m_glow_dist = "0.500000"
m_glow_mask = "0.775000"
SIGMA_H = "0.700000"
SIGMA_V = "0.700000"
glow = "0.600000"
bloom = "0.250000"
halation = "0.200000"
gamma_c = "1.300000"
brightboost = "1.600000"
brightboost1 = "1.000000"
warpX = "0.040000"
warpY = "0.050000"
csize = "0.080000"
bsize1 = "0.090000"
shadowMask = "10.000000"
maskstr = "1.000000"
maskboost = "1.200000"
mshift = "2.500000"
slotwidth = "3.000000"
double_slot = "2.000000"
mclip = "0.750000"
smoothmask = "1.000000"
deconrr = "1.000000"
deconrb = "-1.000000"
deconrry = "1.000000"
deconrby = "-1.000000"
decons = "1.500000"
addnoised = "-0.240000"
3 Likes

With the “Magic Glow mask strength” parameter you can really scale down bloom, you could even turn it off with a bright monitor. Here’s what I achieved with a quick experiment.

#reference ":/shaders/shaders_slang/crt/crt-guest-advanced-ntsc.slangp"
WP = "-20.000000"
S_SHARP = "1.000000"
HSHARP = "2.000000"
m_glow = "1.000000"
m_glow_dist = "0.800000"
m_glow_mask = "0.800000"
SIGMA_VB = "0.750000"
glow = "0.200000"
bloom = "-0.200000"
halation = "0.100000"
warpX = "0.030000"
warpY = "0.040000"
csize = "0.010000"
bsize1 = "0.100000"
shadowMask = "11.000000"
maskstr = "1.000000"
slotmask = "1.000000"
slotmask1 = "1.000000"
slotwidth = "4.000000"
double_slot = "2.000000"
smoothmask = "1.000000"
post_br = "1.100000"
5 Likes

New Release Version (2023-02-16-r1):

Notable changes:

  • Magic Glow wide glow improvements. The overall image is cleaner and less de-saturated. Existing presets which use magic glow for better contrast (lower sigma values) shouldn’t be affected.

Download link:

https://mega.nz/file/B8hxmLJS#ZJSSa39CEdFJHPzlmLL740xjxf2KPw5D0vNZZ4PyDdU

17 Likes

Glad I caught this before anything, I plan on putting my new pack out today. I don’t think this update will change anything (I got the magic glow sigmas turned all the way down) but I’ll take a look at it anyway. Thanks again for keeping this shader fresh.

7 Likes

Currently playing around with setting by stupidly high values just to understand how they affect an image. And the new Magic Glow effect is just wonderful. Tried to capture in small sized images, but the effect is a bit subtle. One has to play the games in motion and full sized picture to see it’s full potential. Here are comparison between Magic Glow on and off for the crt-guest-advanced.slangp: That’s the only change, just enable vs disable.

m_glow = "1.000000"

Panzer Dragoon Saga on Saturn (crop from 1440p):

Sengoku Blade on Saturn (crop from 1440p):

3 Likes

Hey @guest.r I’m trying to create my first Shadow Mask preset, I tweaked these settings here but would like your opinion. Is this a accurate representation of RGB Shadow Mask with these settings for 1080p?

shaders = "12"
shader0 = "shaders_slang/crt/shaders/guest/advanced/stock.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 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
shader1 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "StockPass"
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/afterglow0.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "AfterglowPass"
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/grade/pre-shaders-afterglow-grade.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "PrePass"
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/avg-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
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/linearize.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "LinearizePass"
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/advanced/gaussian_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 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "absolute"
scale_x7 = "800"
scale_type_y7 = "absolute"
scale_y7 = "600"
shader8 = "shaders_slang/crt/shaders/guest/advanced/bloom_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 = "absolute"
scale_y8 = "600"
shader9 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "BloomPass"
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/advanced/crt-guest-advanced.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "false"
srgb_framebuffer11 = "false"
scale_type_x11 = "viewport"
scale_x11 = "1.000000"
scale_type_y11 = "viewport"
scale_y11 = "1.000000"
g_signal_type = "0.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
g_cntrst = "-0.500000"
g_lift = "-0.050000"
m_glow = "1.000000"
m_glow_cutoff = "0.010000"
m_glow_low = "1.000000"
m_glow_high = "1.000000"
m_glow_mask = "0.900000"
SIGMA_H = "0.200000"
SIGMA_V = "0.200000"
SIGMA_HB = "0.250000"
SIGMA_VB = "0.250000"
glow = "0.400000"
bloom = "-0.800000"
bloom_dist = "1.000000"
halation = "-0.075000"
gamma_c = "1.599999"
brightboost = "1.000000"
brightboost1 = "1.000000"
gsl = "2.000000"
scanline1 = "20.000000"
scanline2 = "20.000000"
beam_min = "1.000000"
beam_size = "0.000000"
scans = "0.200000"
scan_falloff = "0.650000"
spike = "1.500000"
scangamma = "7.000000"
h_sharp = "10.999985"
s_sharp = "1.000000"
smart_ei = "0.020000"
sth = "0.000000"
warpX = "0.050000"
warpY = "0.070000"
csize = "0.040000"
shadowMask = "6.000000"
maskstr = "1.000000"
masksize = "2.000000"
mshift = "-4.000000"
mask_gamma = "1.800001"
smoothmask = "1.000000"
deconrry = "1.000000"
deconrby = "-1.000000"
post_br = "1.130000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"

I’m using mask 6, mask size 2 and mask stagger -4

I’m also using the pics here as a reference.

2 Likes

I’ve been away for quite awhile. This “magic glow” peaks my interest.

2 Likes

Magic glow is the best thing invented after bread and butter. Awesome stuff, I love it when bullets and explosions get all glowy :smiley:

2 Likes

It’s a fun fact that mask shift/stagger likes “even wide” masks a bit better. Mask size of 2.0 makes all masks even width though. :smiley:

You should definitely try mask 10 (width 4.0) with shift of 2.0 or 2.5 also. 10.0 / 2.0 should be very nice for 1080p.

1 Like

Mask 10 huh. Never considered that as a possibility as I’ve always associated the different rgb masks with different resolutions. Mask 6 for 1080p, 10 for 1440p and 12 for 4k. I’ll definitely be giving this a try when I get home later, thank you for the tip.

I also realized in that Shadow Mask preset I posted up above is that although I got the mask right, I found out I got the alignment of the phosphors wrong since I came across this image here of how Shadow Mask phosphors are suppose to look. I assume shift 2.0 or 2.5 does that look there.

1 Like

Wider masks, when shifted, become suitable for lower display resolutions, it’s a nice feature. :smiley:

The most proper representation of a shadow mask is IMO lottes mask 4 or mask 6 / size 2 / shift 3.0, but it’s a bit coarse even for 1440p.

The relevance of shadow masks for emulating a crt tv’s is not this clear to me yet, since apreture and slotmask designs seemed to dominate the ‘golden era’ TV segment.

More expensive pieces like NEC multisync monitors should have shadow mask technology implemented, like for example mentioned in this clip:

4 Likes

Interesting information here.

I’ll try those settings out, if that gives me the same look and alignment of the phosphors as in the pic I linked then I’m good to go.

I understand, I personally can’t remember if I owned a shadow mask tv in the early 90’s, I do remember being stuck with an aperture grille tv from the mid 90’s pretty much up to when it died in the early 2010’s lol. I’ve always heard good things about NEC XM29, would love to try gaming on it one day

1 Like

So I just tried those settings out using mask 6, size 2 and stagger 3 and you pretty much hit the nail on the head, the phosphors align just like it does in the pic I linked.

For this test I turned off all brightness settings so that it’s dark and you can focus more on the phosphors:

Best area to see it clearest is right where Trevor’s cloak is on the upper left side where it’s brightest.

Now that I know the settings to use I can now start making Shadow Mask presets.

My next curiosity with this mask is, is it possible to make the phosphors appear more like dots or circles? I notice it looks more like squares when you really get up close and look at the phosphors. Maybe that’s the way it’s suppose to look I don’t know, just something I noticed.

2 Likes

You really need resolution for this, i would say at least 6k. Then you can even begin to shape the “phosphors” in a somewhat crude manner, like:

XRX
RRR
XRX

With “size 2” masks you can’t do a symmetric shaping by adding black pixels unfortunatelly:

RR
RR

Ofc. it could look a bit different with 8k:

XRRX
RRRR
RRRR
XRRX

Anyway, resolution is a major issue here.

4 Likes

The old TV used as a reference is from the end of the 60’s, slot mask began to take off in the 70’s. Dot shadow mask was used at least used in TVs throughout the decade. I was earlier inquiring about lowest TVL with that mask here. Although I had monitors in mind because I thought TVs with the design had become obsolete before gaming was a thing, hunterk pointed out that Zenith did continue development based on that mask design in the 70’s. I find this quite interesting now, because it’s not clear when low-TVL sets with masks like that ceased entirely to exist. There’s a couple of interesting articles in the US Popular Science mag regarding TV (mask) developments from that time.

E.g. here, Nov. 1973 issue:

Who’s using the slot-mask tubes? They’re so new only a small percentage of the '74 models have them. RCA uses their tube, the AccuLine, in some 15-, 17-, and 19-inch all- solid-state models. Magnavox, re- vamping their entire line, puts RCA’s tube in 17- and 19-inch 100-percent solid-state models. Sears, Admiral, G.E., Teledyne Packard Bell, Sharp, and Toshiba also use slot-mask tubes

The page after that describes a test comparing new high voltage tubes with the other designs:

Zenith has boosted 17-, 19-, 23-, and 25-inch- set chassis by several thousand volts. Other set makers have increased the voltage on some models, too. How do the new high-voltage tubes compare with the slot-masks in picture quality? It’s a standoff. The Zenith (high- voltage) and RCA (slot-mask) 17-inchers I’ve been testing produce crisp, equally bright pictures. Zenith’s boosted-voltage 19- inch Chromacolor set compares equally with Magnavox’s 19-inch slot-mask receiver. Tops in picture quality was the 17-inch Sony (model 1722) I also tested. Its slim cabinet houses a 114-degree Trinitron tube. ( Most pic- ture tubes flare 90 degrees from their necks.) Sony’s single-lens focusing of in-line beams and the flatter tube, which reduces electron-beam diver- gence, provide amazingly sharp im- ages.

So, videogaming was clearly a thing with these when it took off, but normally, you’d likely only have a RF connection. :grin:

6 Likes

Finding evidence that the design persisted in the 80’s in TVs via the grandiose German https://www.hifi-archiv.info/

This JVC advert is supposed to be from ca. 1980, marketing their “Super-Matrix” tube:

6 Likes

Had a feeling it would come down to that. There’s only so much you can do with 1080p, I’m still surprised at what I’m able to pull off now with your shader at that resolution. It’s still cool that I’m able to pull off so many types of masks regardless, your shader can pull off the 3 common masks Aperture, Slot and Shadow and those are the 3 I plan to have all in my pack eventually. Thank you for the detailed answer.

2 Likes

You know CRT Shaders intended for 4K displays actually look good on lower resolution displays using nVIDIA DSR or AMD VSR. Maybe that’s something you can explore or experiment with. It may not be ideal from a creation standpoint but might bring some interesting results from a consumption standpoint.

2 Likes

New Release Version (2023-02-20-r1):

Notable changes:

  • Magic Glow wide glow improvements. The overall image is cleaner and less de-saturated.
  • Special effects of bullets, explosions… are better pronounced.
  • Better integration of magic glow with scanlines.
  • Existing presets which use magic glow for better contrast (lower sigma values) shouldn’t be affected.

Download link:

https://mega.nz/file/E4gzjTCL#yGENFxn_4I4kcdQMj-aZZAS0r_wkOXqkrHwAIHEg0rA

19 Likes

You just keep making this shader better and better. I already got a new update coming just for this update. Good stuff man.

3 Likes