Please show off what crt shaders can do!

@hunterk beat me to it.

I almost don’t like posting screenshots anymore because of how misleading they can be. Always better to just load the settings and fire up some games.

The first one is a bit yucky because of the pixel grid, but the second one w/a bit more blur from the camera is nice! It’s tricky finding that perfect amount of blur.

edit: I also think it really helps these things if you use integer scaling on the y axis

I think this is the best photo I’ve ever taken, the trick is to defocus it just enough that the pixel grid isn’t really visible when looking at the black lines.

This is guest-dr-venom + some custom settings from ~2 years ago on a crappy TN panel LCD. I’ve noticed that as display quality increases, some things get better and some things get worse with shaders.

3 Likes

That is a really cool image, might make it my wallpaper

Going back to this, I think something like this might actually work, albeit with a different mask and scanline profile, and if you scrapped the whole CRT border and just make it fullscreen.

I’m pretty much the king of ideas that don’t pan out, though.

@Tatsuya79 posted this on the discord channel about looking at composite vs RGB, some great examples of what composite looks like.

http://www.chrismcovell.com/gotRGB/screenshots.html#neogeo

http://www.chrismcovell.com/gotRGB/rgb_compare.html

5 Likes

crt-guest-dr-venom2-ntsc lastest version

3 Likes

The “rgb_compare” pictures are strange though.

He explained what he did at the beginning with a USB video digitizer, but if you compare the megaman pics and some other ones to those of the 'I want my RGB" page, they’re quite different and really getting into the orange tint for red / blue for green.

And the ones directly taken from a crt are overblown with brightness and blueish.
So it’s not really something to try to mimic fully imo.

2 Likes

Yeah I agree, I think a lot of the whitish areas are actually overexposed rather than the color emitted at that area if it was properly exposed.

1 Like

I’m really liking mask 8 right now. It looks really rough if you zoom in too much, but looks very nice at normal viewing distance, similar to a generic 19" slotmask TV. In this example I combined it with guest-dr-venom’s slot mask and set slot mask width to 4.00. This mask also boosts saturation a bit with the addition of the black pixels, which I like.

Looks better when running in RA.

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 = "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"
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.000000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
gamma_c = "1.000000"
brightboost = "2.499999"
brightboost1 = "2.500001"
gsl = "0.000000"
scanline1 = "10.000000"
scanline2 = "10.000000"
beam_min = "1.500004"
beam_max = "1.000000"
beam_size = "1.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.000000"
CGWG = "0.500000"
mcut = "1.150000"
mask_gamma = "2.199998"
slotmask = "0.500000"
slotwidth = "4.000000"
double_slot = "1.000000"
slotms = "1.000000"
mclip = "0.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"
4 Likes

I managed to fix the issue with the lines. Apparently my Retroarch doesn’t like 1494x1120 as a custom integer since it still gives me non-integer scaling artifacts. If I use x4 for PSX (which is 1280x960) the problems go away and the scanlines look as they should. Weird.

1 Like

Yeah that is weird, I’ve never encountered that.

Can you post a screenshot and settings?

I use crt-royale-kurozumi, and ntsc-adaptive. I disable Vsync when running a core to provide a sharper image, and a performance boost, but I leave it enabled for the menu by utilizing overrides to avoid a crash. I enable Integer Scale, I set my aspect ratio to 1:1 PAR, and I disable Crop Overscan. I leave most of the shader parameters default.

I change the Mask - Triad Size Desired to 4.00, Geometry - Mode to 1.00 for games released before 1998, and Interlacing - Toggle to 0.00 prevent issues with Vsync being disabled.

shaders = “15” textures = “mask_grille_texture_small;mask_grille_texture_large;mask_slot_texture_small;mask_slot_texture_large;mask_shadow_texture_small;mask_shadow_texture_large;SamplerLUT1;SamplerLUT2” mask_grille_texture_small = “…/crt/shaders/crt-royale/TileableLinearApertureGrille15Wide8And5d5SpacingResizeTo64.png” mask_grille_texture_large = “…/crt/shaders/crt-royale/TileableLinearApertureGrille15Wide8And5d5Spacing.png” mask_slot_texture_small = “…/crt/shaders/crt-royale/TileableLinearSlotMaskTall15Wide9And4d5Horizontal9d14VerticalSpacingResizeTo64.png” mask_slot_texture_large = “…/crt/shaders/crt-royale/TileableLinearSlotMaskTall15Wide9And4d5Horizontal9d14VerticalSpacing.png” mask_shadow_texture_small = “…/crt/shaders/crt-royale/TileableLinearShadowMaskEDPResizeTo64.png” mask_shadow_texture_large = “…/crt/shaders/crt-royale/TileableLinearShadowMaskEDP.png” mask_grille_texture_small_wrap_mode = “repeat” mask_grille_texture_large_wrap_mode = “repeat” mask_slot_texture_small_wrap_mode = “repeat” mask_slot_texture_large_wrap_mode = “repeat” mask_shadow_texture_small_wrap_mode = “repeat” mask_shadow_texture_large_wrap_mode = “repeat” mask_grille_texture_small_linear = “true” mask_grille_texture_large_linear = “true” mask_slot_texture_small_linear = “true” mask_slot_texture_large_linear = “true” mask_shadow_texture_small_linear = “true” mask_shadow_texture_large_linear = “true” mask_grille_texture_small_mipmap = “false” mask_grille_texture_large_mipmap = “true” mask_slot_texture_small_mipmap = “false” mask_slot_texture_large_mipmap = “true” mask_shadow_texture_small_mipmap = “false” mask_shadow_texture_large_mipmap = “true” SamplerLUT1 = “…/reshade/shaders/LUT/Kurozumi_64_D65_Rec601.png” SamplerLUT1_linear = true SamplerLUT2 = “…/reshade/shaders/LUT/Kurozumi_64_D93_Rec601.png” SamplerLUT2_linear = true shader0 = “…/ntsc/shaders/ntsc-adaptive/ntsc-pass1.slang” scale_type0 = source scale_x0 = 4.0 filter_linear0 = false scale_y0 = 1.0 float_framebuffer0 = true shader1 = “…/ntsc/shaders/ntsc-adaptive/ntsc-pass2.slang” scale_type1 = source scale_x1 = 0.5 scale_y1 = 1.0 filter_linear1 = false shader2 = “…/reshade/shaders/LUT/multiLUT.slang” shader3 = “…/crt/shaders/crt-royale/src/crt-royale-first-pass-linearize-crt-gamma-bob-fields.slang” alias3 = “ORIG_LINEARIZED” filter_linear3 = “false” scale_type3 = “source” scale3 = “1.0” srgb_framebuffer3 = “true” shader4 = “…/crt/shaders/crt-royale/src/crt-royale-scanlines-vertical-interlacing.slang” alias4 = “VERTICAL_SCANLINES” filter_linear4 = “true” scale_type_x4 = “source” scale_x4 = “1.0” scale_type_y4 = “viewport” scale_y4 = “1.0” #float_framebuffer4 = “true” srgb_framebuffer4 = “true” shader5 = “…/crt/shaders/crt-royale/src/crt-royale-bloom-approx.slang” alias5 = “BLOOM_APPROX” filter_linear5 = “true” scale_type5 = “absolute” scale_x5 = “320” scale_y5 = “240” srgb_framebuffer5 = “true” shader6 = “…/blurs/blur5fast-vertical.slang” filter_linear6 = “true” scale_type6 = “source” scale6 = “1.0” srgb_framebuffer6 = “true” shader7 = “…/blurs/blur5fast-horizontal.slang” alias7 = “HALATION_BLUR” filter_linear7 = “true” scale_type7 = “source” scale7 = “1.0” srgb_framebuffer7 = “true” shader8 = “…/crt/shaders/crt-royale/src/crt-royale-mask-resize-vertical.slang” filter_linear8 = “true” scale_type_x8 = “absolute” scale_x8 = “64” scale_type_y8 = “viewport” scale_y8 = “0.0625” # Safe for >= 341.334 horizontal triads at viewport size shader9 = “…/crt/shaders/crt-royale/src/crt-royale-mask-resize-horizontal.slang” alias9 = “MASK_RESIZE” filter_linear9 = “false” scale_type_x9 = “viewport” scale_x9 = “0.0625” scale_type_y9 = “source” scale_y9 = “1.0” shader10 = “…/crt/shaders/crt-royale/src/crt-royale-scanlines-horizontal-apply-mask.slang” alias10 = “MASKED_SCANLINES” filter_linear10 = “true” # This could just as easily be nearest neighbor. scale_type10 = “viewport” scale10 = “1.0” shader11 = “…/crt/shaders/crt-royale/src/crt-royale-brightpass.slang” alias11 = “BRIGHTPASS” filter_linear11 = “true” # This could just as easily be nearest neighbor. scale_type11 = “viewport” scale11 = “1.0” srgb_framebuffer11 = “true” shader12 = “…/crt/shaders/crt-royale/src/crt-royale-bloom-vertical.slang” filter_linear12 = “true” # This could just as easily be nearest neighbor. scale_type12 = “source” scale12 = “1.0” srgb_framebuffer12 = “true” shader13 = “…/crt/shaders/crt-royale/src/crt-royale-bloom-horizontal-reconstitute.slang” filter_linear13 = “true” scale_type13 = “source” scale13 = “1.0” srgb_framebuffer13 = “true” shader14 = “…/crt/shaders/crt-royale/src/crt-royale-geometry-aa-last-pass.slang” filter_linear14 = “true” scale_type14 = “viewport” mipmap_input14 = “true” texture_wrap_mode14 = “clamp_to_edge” parameters = “crt_gamma;lcd_gamma;levels_contrast;halation_weight;diffusion_weight;bloom_underestimate_levels;bloom_excess;beam_min_sigma;beam_max_sigma;beam_spot_power;beam_min_shape;beam_max_shape;beam_shape_power;beam_horiz_filter;beam_horiz_sigma;beam_horiz_linear_rgb_weight;convergence_offset_x_r;convergence_offset_x_g;convergence_offset_x_b;convergence_offset_y_r;convergence_offset_y_g;convergence_offset_y_b;mask_type;mask_sample_mode_desired;mask_specify_num_triads;mask_triad_size_desired;mask_num_triads_desired;aa_subpixel_r_offset_x_runtime;aa_subpixel_r_offset_y_runtime;aa_cubic_c;aa_gauss_sigma;geom_mode_runtime;geom_radius;geom_view_dist;geom_tilt_angle_x;geom_tilt_angle_y;geom_aspect_ratio_x;geom_aspect_ratio_y;geom_overscan_x;geom_overscan_y;border_size;border_darkness;border_compress;interlace_bff;interlace_1080i” crt_gamma = “2.400000” lcd_gamma = “2.400000” levels_contrast = “0.670000” halation_weight = “0.003700” diffusion_weight = “0.001100” bloom_underestimate_levels = “0.650000” bloom_excess = “0.020000” beam_min_sigma = “0.020000” beam_max_sigma = “0.160000” beam_spot_power = “0.380000” beam_min_shape = “2.000000” beam_max_shape = “4.000000” beam_shape_power = “0.250000” beam_horiz_filter = “1.000000” beam_horiz_sigma = “0.320000” beam_horiz_linear_rgb_weight = “1.000000” convergence_offset_x_r = “-0.050000” convergence_offset_x_g = “0.000000” convergence_offset_x_b = “0.000000” convergence_offset_y_r = “0.050000” convergence_offset_y_g = “-0.050000” convergence_offset_y_b = “0.050000” mask_type = “0.000000” mask_sample_mode_desired = “0.000000” mask_specify_num_triads = “0.000000” mask_triad_size_desired = “1.000000” mask_num_triads_desired = “900.000000” aa_subpixel_r_offset_x_runtime = “-0.333333” aa_subpixel_r_offset_y_runtime = “0.000000” aa_cubic_c = “0.500000” aa_gauss_sigma = “0.500000” geom_mode_runtime = “0.000000” geom_radius = “3.000000” geom_view_dist = “2.000000” geom_tilt_angle_x = “0.000000” geom_tilt_angle_y = “0.000000” geom_aspect_ratio_x = “432.000000” geom_aspect_ratio_y = “329.000000” geom_overscan_x = “1.000000” geom_overscan_y = “1.000000” border_size = “0.005000” border_darkness = “0.000000” border_compress = “2.500000” interlace_bff = “0.000000” interlace_1080i = “0.000000”

1 Like

Okay, cut it down to three presets and made some improvements.

Never use this screen to adjust geometry on a CRT.

2 Likes

I’ve always found that geometry on this game was really weird and I don’t understand why…

It’s an optical illusion, just bad graphics in that particular scene.

I tried posting a screenshot before in Jet Moto 2 to show the banding, but even in that image if I view it using a different display, the issue looks to be non-existent. It is strange; trying to take screenshots using Retroarch’s built-in function still crashes with the custom integer-setting. Using a multiple of it, however (such as 4x integer scaling) doesn’t crash when I take screenshots. My settings in Beetle PSX HW are at defaults with dithering disabled. The resolution would be at 1920x1080 with a 60Hz refresh rate.

Aside from that, I did make some adjustments to the mask at 1440p to see how it would look. For some reason running the CRT shader at 1440p makes the scanlines more prominent. Here are some screenshots of Tomb Raider III in 1440p with crt-guest-dr-venom. Color corrected for PAL format, scanline type set to 0.00 for thicker scanlines. My 1440p monitor uses an RGB subpixel layout so Green-Magenta masks look best on it (Masks 0, 5, and 7 looks best on this monitor). Strangely though, masks 0 and 5 flicker in bright areas or on white screens on my monitor.

This is with Mask 0

Mask 5

1 Like

I tried Mask 8 on my RGB monitor and it still looked off, so I did some in-depth research into the different masks in crt-guest-dr-venom. I was curious to see how each of the masks could be applied as far as sub-pixel layouts go and what the TVL count would be for each mask, assuming I am counting the TVL count correctly.

Both Masks 0 and 5 use a Magenta-Green Aperture Grill mask that has 540 TVL at 1080p and 720 TVL at 1440p. This probably explains why the scanlines on my 1440p monitor seem more prominent with these masks, given that at 1440p we have a much higher TVL count.

Masks 2 and 6 are also Aperture Grills but are those of the RGB variety as opposed to Magenta-Green. This results in 360 TVL at 1080p and 480 TVL at 1440p. I would say these would be ideal if you have an RGB subpixel layout and are attempting to approach a consumer CRT-TV look. Mask 1 has the same RGB arrangement as Mask 2 and 6 but is slotted and not an Aperture Grill, so you could maybe get away with it at 1080p if you are sitting quite far from the screen. It definitely looks better on 1440p though.

Mask 8 appears to be an RGBK (black) aperture grill, which really makes it unsuitable for 1080p. It would have 270 TVL at 1080p and 360 TVL at 1440p, which is why it still looks a little off at 1440p. I think it would benefit from a higher resolution such as 4K.

Mask 4 is a 2x2 pixel VGA mask and would most likely need at least 4K to look right. On my 1440p monitor Mask 4 doesn’t look right. I could get away with Mask 3 most likely since it is a 2x1 pixel VGA mask and works better, but it can be noticeable at times.

4 Likes

Haven’t had time to fully dive into your post, but here’s a fun fact:

270 TVL and 360 TVL are perfectly reasonable numbers for a consumer-grade CRT.

A 20” TV from the 1980s had about 300 TVL on average. Mask 8 is very suitable at 1080p for emulating a small CRT TV, 14-20”.

Sharpness settings may need to be adjusted depending on the mask being used.

1 Like

I’ve almost finished my preset, I still have a few adjustments to make.

I’m happy with the result obtained with these new masks.

-New masks

  1. https://ibb.co/XVdwq3r

  2. https://ibb.co/JmMfpLX

-Transparency

  1. https://ibb.co/KbNJFtV

-Normal and beam spot adjusted

  1. https://ibb.co/xqvZNNm
3 Likes