Please show off what crt shaders can do!

@lilbud Might help if you actually say what shader that is, I imagine it’s from the bigbox forums.

It is from the big box forums, the caption just says ‘esper’ and that it’s a cg/cgp shader.

I ended up with this using the guest venom shader. It’s almost there, not quite

Zombeaver’s shaders are based on Birm’s 199X (originally posted here and his YouTube), and 199X is based on Analog Shader Pack v3.

Only when the Analog shader pack got fully moved to .slang, the rest of two are not the problems at all. Since they all are just heavy tweak with .cgp and maybe also slightly +/- originally .cg files.

Good news is solid12345 the author of Analog shaders had the promise and working; Bad one is his last post has been 3 years ago.

Analog shader pack got moved to slang? Where?

Nowhere. It’s suspended. He’s not active anymore since last post.

@BendBombBoom

I’m impressed with your screenshots. Now I’d like to see some actual photos of shaders running on a 4K screen, preferably showing the subpixels. I think it should be possible to get a good result with the BW masks or Lottes stretched shadowmask provided that you can increase the phosphor size. I think even the magenta/green slotmask will work at 4K if you want an “off the shelf crt” slotmask. Brightness might still be a problem though as it really needs 100% strength to function as intended.

image

Actually, I think maybe even 1440p is sufficient for this mask to match a high-pitch/low TVL CRT (like 2 triads per scanline).

@hunterk

did the permissions thing with github ever get sorted out?

Not yet :frowning: Dunno what the holdup is, but I haven’t really pressed it. Been working on other things.

1 Like

Some photos showing my latest “maxDR” settings for guest-dr-venom on a 1080p screen. Colors are much more vibrant in person.

2 Likes

Settings for the above.

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 = "2.000000"
brightboost1 = "2.000000"
gsl = "2.000000"
scanline1 = "1.000000"
scanline2 = "100.000000"
beam_min = "2.000000"
beam_max = "1.000000"
beam_size = "0.000000"
h_sharp = "3.000000"
s_sharp = "1.000000"
csize = "0.000000"
bsize = "600.000000"
warpX = "0.000000"
warpY = "0.000000"
glow = "0.000000"
shadowMask = "-1.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.500000"
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"

That looks absolutely wonderful, @ProfessorBraun!

1 Like

Here is a photo of my Venom Dotty with my iphone, but I find it less accurate than a screenshot as angle, lighting, and camera lens all distort it a little. I haven’t had luck with lotte’s style masks in black in white thus far.

7 Likes

Trying to clone SEGA Versus City screen,

(slightly decreased brightness and contrast to fit my LCD shot)

originally shot,

Still tweaking around, so post the configs later.

5 Likes

A photo is more accurate than a screenshot in terms of how the mask actually looks with the pixel grid. The photo isn’t in-focus enough to really see the subpixels, though. Looks good but I was curious how the mask looked with the subpixels at 4K. Is the mask BW aperture?

What game is that?

I know it’s probably a slot mask CRT but I think BW aperture grille or mask-less scanlines will actually be a closer approximation of the photos. The granularity of the slot mask on the CRT is already very close to that of the pixel grid on a 1080p display.

The currently main issue is the color space clone. There’re a lot of VC arcade machines in the arcades, each one (the tube) has their own color styles… Say one has warm colors, one has warm with magenta colors… - and one with cyannish looking. Only a few has decent colors (means they are stables with no color shifting as like the normal LCDs do).

But that is not the problem at all. Since those are just *old grandpa* issues (Those tubes are poor and getting old). The real problem is that no matter how they do the color-shifting in many different ways, they still based on their own color space - a CRT TV colors look; Which is totally not like LCD colors (digital RGB raw colors). That being said the same logic to all CRTs compared to the LCDs.

It’s pretty tricky and hard to explain, I know there’re already have shaders can handle the color space switcher, and LUT/ICC color profiles. But still none have matched IRL. Although they may have technology correct (more probably because missing a regular CRT TV ICC). So all needs to be a manually color correction with grade.slang. After over and over trial and error, I figured out that only needs to grab and get to know how their base color space work, the rest are not important anymore (since you can never get > 95% color accurate).

There’re used/now have a lot of retro old TV shaders, Analog Shader Pack, 199X and Zombeaver. But these shaders are totally go another way, they made for fancy, over colored and memoried, retro, vaporwave look, not made for IRL.

For example, in Street Fighter III, choose Ryu with default white color clothes, load these shaders, you only see Ryu with plain over colored white clothes, can’t see any fold and shadow detailed. But IRL, VC arcade CRT TV, Ryu’s white clothes look just as like in LCD’s raw colors.

TL;DR. Anyway, here’re the shots,

raw colors, crt-guest-dr-venom-kurozumi, crt-royale

1 Like

There are some accurate CRT color profiles in guest-dr-venom and grade, but I think you need a wide color gamut to really see the benefit.

Those shots look good though. Were you able to fix the clipping in Kurozumi? I created a kurozumi-like preset without clipping and expanded dynamic range. It’s lacking a mask and deconvergence but those can be added easily if desired. This is as bright as it gets without introducing clipping or reducing the strength of the scanlines, afaik. If you do wind up adding a mask, you’ll have to reduce the scanlines if you want to maintain brightness without clipping. The settings are in my previous post if you’re interested.

LCD,

SEGA-VC CRT,

Side by Side,

7 Likes

I’ll check it later. This one, right?

I was tasted of yours in the presets one before, I noticed that the scanlines (or maybe brightness) are too dark, it makes the scanlines uneven look in the 3D 240P contents (most PSX/SS 3D games).

Are you using integer scaling on the y axis? I’m not noticing any unevenness.

These settings are for 5x vertical scale. You should use the exact same custom aspect ratio that I use in my shots (1494 x 1120) or it will be sub-optimal.

It should be noted that the vertical scale can sometimes dramatically alter the appearance of scanlines; what looks good at 5x scale will be too dark at 4x scale and what looks good at 4x scale will be too bright at 5x scale, etc.

It’s also important to increase the LCD backlight to 100% when using these settings. As an alternative, one can lower “beam shape high” to around 50.00 or so.

The LCD photo is lacking contrast and bloom compared to the CRT shot, but that’s what happens when you add a mask. It’s impossible to keep the mask well-defined while having CRT-like brightness and contrast on an LCD.