Please show off what crt shaders can do!

Do you mean the awful moire artifacts? That’s unfortunately very common with curvature added after a scanline pass. You can use a heavily anti-aliased curvature, like the one from royale’s last pass (expects linear gamma) or the ewa-curvature shader (very demanding, unfortunately), or you can use noise to compensate (small amounts will just replace the lines with noise but larger amounts will hide it).

I went with the noise when I added curvature to crtglow :slight_smile:

2 Likes

Looks great. Here are some recent settings for the new version of guest-dr-venom, LMK what you think. For the second shot I just switched to mask 0 and increased mask strength to 70%.

Looks brighter in-game than in a scaled screenshot.

shaders = "7"
shader0 = "shaders_slang/misc/grade.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = "StockPass"
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/crt-gdv-new/afterglow0.slang"
filter_linear1 = "false"
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/crt-gdv-new/pre-shaders-afterglow.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "LinearizePass"
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/crt-gdv-new/avg-lum.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "AvgLumPass"
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/crt-gdv-new/blur_horiz2.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "absolute"
scale_x4 = "800"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/crt-gdv-new/blur_vert2.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "GlowPass"
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "absolute"
scale_x5 = "800"
scale_type_y5 = "absolute"
scale_y5 = "600"
shader6 = "shaders_slang/crt/shaders/guest/crt-gdv-new/crt-guest-dr-venom2.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "viewport"
scale_x6 = "1.000000"
scale_type_y6 = "viewport"
scale_y6 = "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;PR;PG;PB;AS;sat;TNTC;CP;CS;WP;wp_saturation;GAMMA_INPUT;lsmooth;SIZEH;GLOW_FALLOFF_H;SIZEV;GLOW_FALLOFF_V;glow;bloom;TATE;IOS;OS;BLOOM;gamma_c;brightboost;brightboost1;gsl;scanline1;scanline2;beam_min;beam_max;beam_size;vertmask;scans;spike;h_sharp;s_sharp;csize;bsize;warpX;warpY;shadowMask;masksize;maskDark;maskLight;CGWG;mcut;mask_gamma;slotmask;slotwidth;double_slot;slotms;mclip;inter;interm;gamma_out"
g_gamma_in = "2.400000"
g_signal_type = "1.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 = "7005.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"
PR = "0.140000"
PG = "0.140000"
PB = "0.140000"
AS = "0.080000"
sat = "0.100000"
TNTC = "0.000000"
CP = "0.000000"
CS = "0.000000"
WP = "0.000000"
wp_saturation = "1.000000"
GAMMA_INPUT = "2.400000"
lsmooth = "0.900000"
SIZEH = "4.000000"
GLOW_FALLOFF_H = "0.300000"
SIZEV = "4.000000"
GLOW_FALLOFF_V = "0.300000"
glow = "0.000000"
bloom = "0.100000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
gamma_c = "1.140000"
brightboost = "1.000000"
brightboost1 = "1.100000"
gsl = "2.000000"
scanline1 = "8.000000"
scanline2 = "12.000000"
beam_min = "1.500000"
beam_max = "1.000000"
beam_size = "0.000000"
vertmask = "0.000000"
scans = "1.000000"
spike = "0.000000"
h_sharp = "3.000001"
s_sharp = "1.000000"
csize = "0.000000"
bsize = "600.000000"
warpX = "0.000000"
warpY = "0.000000"
shadowMask = "8.000000"
masksize = "1.000000"
maskDark = "0.500000"
maskLight = "1.500000"
CGWG = "0.600000"
mcut = "1.150000"
mask_gamma = "2.400000"
slotmask = "0.000000"
slotwidth = "2.000000"
double_slot = "1.000000"
slotms = "1.000000"
mclip = "1.000000"
inter = "350.000000"
interm = "1.000000"
gamma_out = "2.200000"
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"
2 Likes

I tested both of the settings out, and I personally like the settings in the second screenshot more. Mask #8 for the first screenshot was quite intense on my side. If I tone down the mask strength for mask #8 to .40 or .30 it isn’t as intense, and it doesn’t look as much like a hashy filter on the screen. This is while playing 3D PS1 games. Come to think of it though I did feel similarly with using mask #2 on Wipeout XL earlier.

Here are two screens of the Tomb Raider II title screen using your settings, the second one with mask #0 and mask strength at .70. This time I am using integer scaling for these screenshots.

Toning down the mask strength to something like .40 looks like this, which I find to be easier on the eyes for me.

If it helps, I did try to look into what the sub-pixel layout of my LED TV would be. According to lagom.nl, it would be the V-BGR subpixel layout, which is interesting because my TV is displaying in landscape mode and not portrait mode lol.

1 Like

So, the solution is just to take out curvature from the last pass shader. Those artifacts are unbearable.

1 Like

The reason Tomb Raider looks dark with those settings (most likely) is because it was developed using the PAL standard, which calls for a gamma of 2.8 and temperature of 6500k.

Personally, I prefer the two color masks because the horizontal phosphor blooming with three color masks looks pretty unnatural and distracting IMO. It could work on a much brighter display if you maxed out the mask strength to kill the bloom.

Here’s a crt-hyllian-gaussian-sinc experimental shader for your tests.

We have a family of windows for digital filters which we can choose from: https://en.wikipedia.org/wiki/Window_function

:grinning:

5 Likes

I’m currently going through my grungy/shitty looking VHS + Vaporwave phase :

4 Likes

Yeah, I think in general, the best idea is to make sure there are no scaling/passes after scanlines/mask, which means the resolve stuff (i.e., mixing in the blurred “bloom” passes, re-curving gamma, etc.) usually needs to happen right there in the same pass as the CRT stuff.

Here’s what your new shader looks like with the last pass from royale:

my potato laptop only goes up to 720p, so it’ll look better at 1080p or 4K, of course, but you can see that the antialiasing really obscures the mask quite a bit, but at least there’s no moire :slight_smile:

EDIT: ewa-curvature preserves the mask, for the most part, but still looks a little funky:

1 Like

Thanks a lot mate , your sinc shader is great with details. I took the liberty of modifying it a bit to produce bright colors .

1 Like

That makes sense, especially considering that Core Design was based in the UK. I will have to adjust the gamma-out and the color-temp and see if that produces better results.

I also wonder if my TV being a V-BGR subpixel layout could also affect how the mask looks. The images with mask 8 look better on my OLED phone than they do on my TV. My 1440p monitor also runs full range RGB and these masks look better on there as well. I’ll experiment and come back with my findings.

I very often use crtglow_gauss_ntsc with curve=on+noise=2.5+mask=3. And pretty happy with results. Something like RF style of NES via CRT.

1 Like

Heh, yeah, looks good. I think it’s important for people looking at screenshots to know that the noise looks much more natural and unobtrusive in motion.

2 Likes

Mask 8 requires a very good display to look right IMO. You’re probably better off sticking to the two color masks.

Are you sure your display uses vertical BGR? I’m not sure that particular test screen is working correctly, it didn’t properly identify the layout on one of my displays.

For a regular BGR layout, the yellow-blue aperture grille works, but I don’t think that one is included in guest-dr-venom.

Very nice results. But is it possible to make NTSC version too? like crtglow_gauss & crtglow_gauss_ntsc presets?

I’m trying to add parameters from crtglow_gauss_ntsc (NTSC parts like ntsc-pass1-composite-3phase.slang, ntsc-pass2-3phase-linear.slang) to new crt-hyllian-glow but fail. Because it have nice NTSC pixel blending for my taste.

crtglow_gauss_ntsc.slangp (curve+noise+mask3)

crt-hyllian-glow_new.slangp (Curve=1+Noise=2.5+BP=6+PL=4+Glow=0.30)

PS. NOISE in motion looks much better than you might be think, just try it =)

1 Like

Yes, I think gaussian-sinc is definitely an improvement at least as far as vertical detail is concerned. Dark lines no longer shrink when adjacent to bright lines, the bright lines properly bloom into the adjacent space, etc. Very nice work.

I didn’t do much to the settings but here’s an example. Looks brighter in-game, ofc.

2 Likes

I am positive it is vertical BGR. Here is a closeup image that shows the subpixel layout for my TV.

My 1440p monitor on the other hand is full range RGB so I can use different masks with it.

Nice screenshots. I didn’t know you can combine any crt shader with Royale passes. Do you see any gains in doing this? Royale is a bit too heavy for me, so I just use it to “play” png. :stuck_out_tongue:

I think only the bloom pass should stay on resolve as it speeds things up tremendously. If I did that bloom effect in one pass, it would be very slow.

Yeah you’re going to have a really hard time getting masks to look right with that subpixel layout, unfortunately. Honestly not sure what would look best, here. Maybe the black and white aperture grille that just blacks out every other column of pixels? That’s a tricky one. But hey, free deconvergence effect!

Your pixels are very processed there. Kkk

What are you combining it with?

I’ll look into the glow passes to see if it’s easy to just swap the crt pass. Though I doubt it’ll look too much different based on the amount of noise and ntsc artifacts added to the screen.