Please show off what crt shaders can do!

Yeah I’m getting similar results. I think if you’re using an sRGB display you need to use sRGB gamma, or POW for some games. The gamma correction works wonders though; I was able to significantly increase the beam width variation after adding grade to guest-dr-venom.

Thanks :slight_smile:

I’m pretty happy with these colors, actually. My biggest gripe when using a cooler temp is that it looks under-saturated. Adjusting the scanlines to be as dynamic as possible also corrected the colors, so that’s pretty cool.

1 Like

I split the saturation into separate RGB channels, and am increasing the saturation at different levels to compensate for this lol. I’m also using 9300k.

The new gamma correction he added, not the mode? I was getting some interesting results with it, haven’t really tried to dial anything in with it yet.

1 Like

I was just talking about the sRGB gamma mode; it definitely improved things in my configuration, at least. Maybe the shader is doing something else to improve the dynamic range, just kinda assumed it was related to gamma.

1 Like

Ohh I thought you were also referring to the crt gamut correction thing he also added, but yeah the sRGB mode is great.

This is what I was thinking about, for some reason, lol.

#pragma parameter g_crtgamut "CRT gamut" 1.0 0.0 1.0 1.0

When you said this.

1 Like

TBH I didn’t even notice that, yet, lol. I’m afraid it’ll be another thing that needs a wider color gamut than sRGB though.

2 Likes

From what I could tell in my limited testing, it was messing with the greens (seems to be adding blue to them or unsaturating them or something, 🤷). It may also be influencing other colors I’d have to ask @Dogway to know for sure, though I imagine it’s messing with the whole color gamut, I just noticed the greens more as I was testing with Super Mario World.

The setting is either ON or OFF, and it’s defaulted to ON.

1 Like

@Nesguy - those screens are beau-ti-ful. I don’t see any of the clipping that you mentioned before. Very pleasant levels of brightness, contrast and blur. Gamma is spot on. Perfect scanlines, and their variability. Fantastic colours. I’m only missing a mask that provides that pixie dust depth we were talking about and you are set. Outstanding, seriously :smiley: Would love to try it, may I ask that you post the preset?

2 Likes

Thanks! I’m glad you like it. :smiley: Colors look just a tad desaturated on my iPhone screen, but that could be due to the slightly cooler temp of the phone screen compared to the TV I’m using. Anyway, if someone finds the colors desaturated they can probably just lower the color temp a bit in the parameter settings.

I think it can be tweaked further; I’m experimenting with raising the beam_min parameter a bit more.

I’ll caution that these settings are display-dependent because the point at which your display starts clipping also determines how thin you can make the scanlines. Check out the guide I made here.

I’m working on revising the steps for maximizing beam variation; thinking of coming up with some kind of scanline test pattern and have the user raise beam_min “until this line is barely visible” or something like that.

And yeah, the mask is a tough one… I’d definitely have to reduce the beam variation by quite a bit since I’m using all the brightness just for scanlines right now.

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_out;g_gamma_in;g_gamma_type;g_vignette;g_vstr;g_vpower;g_csize;g_bsize;g_crtgamut;wp_temperature;g_sat;g_vibr;g_lum;g_cntrst;g_mid;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_out = "2.200000"
g_gamma_in = "2.400000"
g_gamma_type = "1.000000"
g_vignette = "0.000000"
g_vstr = "40.000000"
g_vpower = "0.200000"
g_csize = "0.000000"
g_bsize = "600.000000"
g_crtgamut = "1.000000"
wp_temperature = "9311.000000"
g_sat = "0.000000"
g_vibr = "-0.000000"
g_lum = "0.000000"
g_cntrst = "0.000000"
g_mid = "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 = "2.200000"
TAPSH = "4.000000"
GLOW_FALLOFF_H = "0.000000"
TAPSV = "4.000000"
GLOW_FALLOFF_V = "0.000000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
brightboost = "1.000000"
brightboost1 = "1.000000"
gsl = "2.000000"
scanline1 = "15.000000"
scanline2 = "15.000000"
beam_min = "1.000001"
beam_max = "0.700000"
beam_size = "0.000000"
h_sharp = "4.500000"
s_sharp = "0.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.000000"
maskDark = "0.500000"
maskLight = "1.500000"
CGWG = "0.000000"
gamma_out = "2.200000"
spike = "1.000000"
inter = "400.000000"
interm = "1.000000"
bloom = "0.000000"
scans = "0.000000"
textures = "SamplerLUT1;SamplerLUT2"
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"
3 Likes

Here are some shots with an aperture grille effect (50%). Followed the same steps to maximize the beam variation after applying the mask. Not sure the mask is adding much at this low of a setting, though. Tried to get gamma/colors/contrast/etc as close to the previous shots as I could. Again, I’m aiming for adequate brightness with a normal calibration, but cranking up the backlight still helps.

Changes from previous settings:

bright boost dark pixels - 1.25
beam shape low - 13.00
beam shape high - 13.00
crt mask - 0.00
mask 0&7 mask strength: 0.50
3 Likes

The CRT gamut option is scaled down to sRGB gamut so no need for WCG. I was looking for the primaries of CRT phosphors and reached to the P22 ones. I thought this sounds familiar, yes crt-guest-dr-venom had this done already so I borrowed the code.

Two things I miss in crt-guest-dr-venom are convergence and inner glass reflection. I don’t think they belong to grade but I can add them to the preset. For glass reflection I used mgba reflection shader ags001-light.glsl, I had to mod it to avoid clipping, I will also add a toggle, I’m a fan of those. For convergence I will look into royale’s code. I also want to add afterglow and persistence to royale.

4 Likes

Reflection sounds cool.

1 Like

I had to change the blending mode from mix to screen to avoid the opposite side effect of darkening.

Original

Glass Reflection

1 Like

Could you show a screen with more black? As right now it’s just looking like it’s brightening the screen imo.

I’m not really getting any reflection vibes from that screen.

1 Like

You can increase reflection brightness but there’s a point you will find it distracting, I like to keep things subtle and additive to the overall feel. I’m going to upload my mod now so you can tinker with settings. Just a thing, place it before all the scanline work.

3 Likes

I understand needing it be subtle, but like I said it just looks like it’s currently just brightening the screen.

Well, anyway, I’ll play around with it some. Thanks, lol.

1 Like

Here’s exaggerated, I will try to normalize to avoid brightening too much:

2 Likes

I figured out how to increase the beam width variation in guest-dr-venom even further! I think the beam width at 5x scale might be even more dynamic than the consumer-grade Trinitron, now. :smiley: PVM-like beam dynamics should be possible at 5x scale.

As before, these should look good on a normally-calibrated display, but crank up the backlight for some additional punch.

These settings should work fine on just about any display unless it’s a really bad old LCD. These settings should look good on most displays as-is, but they can be tweaked further; “scanline bright” might need to be raised/lowered a couple notches to avoid clipping, depending on the display. If you want to make the scanlines even more BVM/PVM-like, you can raise “scanline dark” all the way to 2.50, but be warned that this will result in a significant reduction in brightness. “Horizontal sharpness” can be raised/lowered a couple notches, depending on preference, viewing distance and display size. 1080p and 5x scale is recommended; no idea how these settings would look at higher/lower resolutions.

9300K fans, please forgive the slightly warm temperature; went for 7900K this time :slight_smile:

Must be viewed at original size!

)

For this preset you’ll need to place grade.slang in /shaders_slang/misc/

You can get grade.slang here:

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_out;g_gamma_in;g_gamma_type;g_vignette;g_vstr;g_vpower;g_csize;g_bsize;g_crtgamut;wp_temperature;g_sat;g_vibr;g_lum;g_cntrst;g_mid;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_out = "2.200000"
g_gamma_in = "2.400000"
g_gamma_type = "1.000000"
g_vignette = "0.000000"
g_vstr = "40.000000"
g_vpower = "0.200000"
g_csize = "0.000000"
g_bsize = "600.000000"
g_crtgamut = "1.000000"
wp_temperature = "7871.000000"
g_sat = "0.000000"
g_vibr = "-0.000000"
g_lum = "0.000000"
g_cntrst = "0.000000"
g_mid = "0.500000"
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 = "2.200000"
TAPSH = "4.000000"
GLOW_FALLOFF_H = "0.000000"
TAPSV = "4.000000"
GLOW_FALLOFF_V = "0.000000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
brightboost = "1.000000"
brightboost1 = "1.000000"
gsl = "2.000000"
scanline1 = "15.000000"
scanline2 = "5.000000"
beam_min = "1.000001"
beam_max = "0.850000"
beam_size = "0.000000"
h_sharp = "4.500000"
s_sharp = "0.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.000000"
maskDark = "0.500000"
maskLight = "1.500000"
CGWG = "0.000000"
gamma_out = "2.200000"
spike = "1.000000"
inter = "400.000000"
interm = "1.000000"
bloom = "0.000000"
scans = "0.500000"
textures = "SamplerLUT1;SamplerLUT2"
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"
4 Likes

I will accept the 7900k, lol.

Looking nice, so far.

3 Likes

I tried to use your preset but I can’t get it to work. Is there a directory Where I am supposed to place it? Are you using shaders not included by default?

1 Like

Yeah, I don’t think grade.slang is part of the repo.

@Dogway has a thread for it, as it’s his shader.

And the preset needs to be placed at the base of your shaders folder, so you should be able to see shader_slang and stuff in the same folder.

Grade needs to be placed in the misc folder.

1 Like