New CRT shader from Guest + CRT Guest Advanced updates

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

I couldn’t agree more :boom:

9 Likes

Ordinary Glow

Magic Glow

Photo

9 Likes

Hi! A quick question: I’ve been using an older version of the shader and it looked perfect on basically every game. I have updated recently and now games like Tekken 3 (384x480 resolution, interlaced) are extremely blurry and no amount of tinkering makes it look good. I see there is HD version which looks sharp but it looks blurrier on standard 240p games. My preferred way was to set a single global shader for everything instead of having a different preset for every game. Is it not possible anymore? Thanks!

1 Like

Hey there!

You are right, changes were made with filtering and interlaced mode. The filtering is somewhat stronger with interlaced mode activated, so it looks similar when the game is running standard or laced, regarding the increased horizontal resolution with interlaced mode.

There are exceptions though with the games you mentioned. To increase sharpness you must simply increase the horizontal sharpness value and you are good to go. Maybe this means you can save another preset for such games, unfortunatelly there are no other workarounds unless you download and use an older version of the shader (see first post in the thread).

3 Likes

Thanks, but unfortunately increasing the horizontal sharpness value makes non-interlaced content (FMVs) too sharp. Also, some Namco games use even more non-standard resolutions (320x480) in the menus - Rage Racer, Ridge Racer Type 4, Ace Combat 2 and 3 (the latter makes you spend half of the time in the menus due to it’s visual novel style storytelling).

If I am understanding correctly, the coefficient is governed by this variable:

float fdivider = max(min(mix(prescalex.x, prescalex.y,TATE), 2.0), 1.5*float(interb));

and changing this to

float fdivider = min(mix(prescalex.x, prescalex.y,TATE), 2.0);

removes the increased filtering for the interlaced mode?

Would adding here an additional check for low horizontal resolutions be against your current goals for the shader?

2 Likes