Please show off what crt shaders can do!

Thank you. That makes things much much faster for tweaking. I wonder why the ps1 doesn’t work? Everything ends up higher resolution than it should be.

1 Like

If you’re cycling through those without adjusting the gamma and color temp then you’ll drive yourself crazy. Check the grade shader in a text editor for the region-specific settings, it’s in the header thing.

The sky in SMB isn’t supposed to be purplish, that comes from using 6500K and NTSC-J is 9300K. 6500K is fine for NTSC and PAL, but PAL needs 2.8 gamma. Alien Resurrection is going to be way too dark at 2.5. I myself find 9300K to be too cold, so I use 8000K for NTSC-J. I think many CRTs had some intentional red push, so this might be more accurate.

Just a few screenshots before bed using the recent settings.

3 Likes

Thanks for the info. Do you know what the negative values for phosphor region are? For added color saturation I’ve been setting it to -4 and then tweaking the RGB saturation to prevent clipping. (Sometimes it’s way more trouble than it’s worth.)

2 Likes

Those are all defunct standards that were never really used AFAIK, although I can’t remember what they are, specifically. Most of them have colors that are more deeply saturated than what CRTs could produce. The settings higher than 0 are based on CRT phosphor primaries that were actually in use, 0 is just sRGB.

@dogway what are the negative values for CRT phosphor?

3 Likes
-4 NTSC_FCC: The first NTSC standard (1953) that was never actually used
-3 Conrac: Phosphor gamut for the Conrac 7211N19 CRTs from which SMPTE-C was based
-2 Sony20_20: Sony Trinitron KV-20M20 NTSC-J CRT Gamut
-1 SMPTE: SMPTE-C standard phosphor
 1 P22: SMPTE-C measured average Phosphor
 2 NTSC_J: NTSC-J standard phosphor
 3 EBU: EBU Tech.3213 PAL standard phosphor. Similar to sRGB

1-3 are the actual recommended for the presets. The reason I opted for P22 instead of SMPTE-C standard was IIRC a green tint that I disliked and stood out from the other two presets. Negative values are there for reference and comparison, I’m open to add more though.

By the way, the 9300K temperature of NTSC-J was more for studio monitors, the correlated temperature to D illuminant for home systems was more about 8942K for NTSC-J.

7 Likes

Thank you for the detailed explanation. The color temp debate is fun to research and here are a summation of the Internet’s arguments I found:

-“Japanese developed on 9300k so Mario’s sky was blue to them.”

-“Miyamoto said in an interview he picked a purple color for the sky in Mario.”

-“I doubt monitors where calibrated back than and they didn’t care about American color temps. It’s blue.”

-“Why is Mario’s and Link to the Past the only games with a purple sky? Everything else is blue so it must have been intentional for it to be purple.”

Anyways, here is my new black and white old tv preset.

4 Likes

This is beautiful. Where should I put the contents of that file to use it myself?

1 Like

At the base of your shaders folder iirc, so you should see shaders_slang, shaders_glsl, etc in the folder you place that slangp file in.

1 Like

The quote from Miyamato is weird and confusing, because here’s a planning sheet showing a decidedly blue sky.

1 Like

I agree. Perhaps he got used to seeing it purpilish because his development monitors were at colder temps than consumer tvs and thought that was how he originally designed it. Memories are often fuzzy and inaccurate. Maybe he changed it’s hue from the design sheet once he saw it running on screen?

Some games look great to me at warmer temps and others look better with cooler ones.

2 Likes

@jelbo

You can improve it even further by raising beam_min and lowering beam_max, but doing so can cause artifacts on some displays I’ve tested. This can be due to a variety of factors. Here’s an example of some settings that cause artifacts on my plasma TV. This is just taking the previous settings and increasing beam_min to 2.10 and lowering beam_max to 0.80. This improves the image, but it’s more than what the display can handle. Obviously, raising beam_min/lowering beam_max even further makes the artifacts worse. I have to set beam_min to 2.00 and beam_max to 1.00 to completely eliminate artifacts on this particular display.

TLDR: beam_min and beam_max settings are display-dependent and should be adjusted using the usual test patterns in Test Suite; lowering beam_max and raising beam_min as much as possible without causing clipping will increase the dynamic range.

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 = "2.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 = "8005.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.499996"
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.000015"
brightboost1 = "2.349999"
gsl = "0.000000"
scanline1 = "1.000000"
scanline2 = "23.000000"
beam_min = "2.100001"
beam_max = "0.800000"
beam_size = "0.000000"
h_sharp = "5.000000"
s_sharp = "0.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 = "0.500000"
gamma_out = "3.500000"
spike = "0.000000"
inter = "400.000000"
interm = "1.000000"
bloom = "0.000000"
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

I liked @Puxirepublic’s shot from Apocalypse Now, so here’s another one with the above settings. Feels a bit like a 19" CRT and I think it gives the image a film-like quality. I think the BW aperture grille or magenta/green aperture grille would also be good for 1080p movies. I read somewhere (on Lottes’s blog I think) that there are almost no details that are 1px wide in a 1080p movie, so either of the aforementioned aperture grille masks should preserve virtually all the detail while adding some CRT-like texture.

2 Likes

Stop trying to get me to watch anime with a shader XD

1 Like

4 Likes

I love the look of Venom’s 1 slot but I dislike that saw-tooth pattern in the brights where the mask is blown out. It’s unavoidable if you want a bright image but it still bugs me.

1 Like

I played around with the higher gamma settings and got the Venom shader to be even dottier. I’m not saying it’s ideal, but it’s a fun experiment to push.

5 Likes

I really like that. Very nice.

1 Like

You can reduce the sawtooth pattern in brights by reducing the visibility of the phosphors over bright colors. This can be accomplished with the bloom setting but that’s less accurate to how CRTs looked/worked. Mask 1 is better for screenshots IMO, while Mask 3 looks more natural when actually in use.

Nice screenshot! I think the higher gamma setting really unlocks the shader’s potential. The higher resolution does a lot for the beam dynamics, too. I use 3.50/3.50 for gamma in GDV as it’s the brightest it can go without clipping blacks, giving you maximum headroom for scanlines/masks.

Edit: I think maybe we were referring to different things. The sine-wave looking pattern with bright scanlines is accurate to how slotmask CRTs looked. Only way to avoid that is to reduce the bright beam width to the point where it sucks all the brightness out of highlights. (Or basically what you already said)

1 Like

I hooked my laptop up to a 4k oled and it’s interesting how slot 1 does not hold up as well when viewed closely. Slot 1 and 7 also show slight banding across the screen horizontally on pure colors like Super Mario’s sky. Clearly it’s beyond ridiculous to critique a 240p image on a 60 inch screen at close range but I found it interesting.

2 Likes

Loving your shader work Nesguy and BendBombBoom. Nesguy, I would personally prefer some more bloom and dottyness, like BendBombBoom’s going for. I’ll try to play around with some parameters, but any help would be welcome, this is totally new for me.

1 Like