Please show off what crt shaders can do!

Damnit, you trying to make me work on stuff aren’t you!? Rofl

Also why are you running kawase1 twice? I don’t have any experience with the kawase blues.

it’s just the way the algo works. The shaders we have are based on the shadertoy mentioned in the source, and he says 0,1,2,2,3 is the “official” order, but that 0,1,1,2,3 has fewer artifacts. I feel like I tested it myself when I first made the shaders, but that’s been quite a while now.

Here’s a list of the “official” kernels for various gaussian equivalents (as you can see, even the 5-pass represents a very computationally prohibitive size for gaussian): https://gist.github.com/pkonecki/4f80114b192e60dead65e2897fd1bc0d

and here’s further reading about it, in general:

5 Likes

I’ll read the article in a bit, thanks for the response lol.

Wooo new toys for me to play with, thanks @hunterk!

3 Likes

How do you adjust the glow size using the kawase blurs?

@trnzaddict

Until I can figure this glow stuff out, I’d recommend just setting

glow = “0.000000”

Plasma TVs use the same phosphors as CRTs, so you don’t really need the glow effect anyway.

1 Like

I tried HunterK’s modded dr. venom shader. I really like the look of the kawase blur on the glow, looks a little more natural.

1 Like

It’s still really exaggerated, lmk if you figure out how to adjust the glow size/strength, I’ll work on it some later.

Edit: actually, I think I have it more or less figured out. Glow threshold determines the glow size, higher numbers = less glow.

Editedit: I just edited the adjustment increment for glow threshold to 0.001, so now the fun begins.

1 Like

This should be the least amount of glow possible w/the kawase blurs. Glow threshold at 99.9, glow strength 0.001. Second image is glow strength at 0.003. At these levels it looks realistic and not cartoonish.

1 Like

Looks good to me tbh

1 Like

I’m pretty happy with this, haven’t really tested it with any games yet, though. I think it looks good with glow threshold at 99.9 and glow strength 0.001 - 0.003. Might be able to go a bit higher with it but I need to see what it looks like with some games first.

1 Like

Drop some settings with some screens soon XD

eh, need to work on it some more, digital clipping is killing the glow at this level. Anyway this is probably display-dependent.

I can wait, no big hurry, but hurry lol

It’s very difficult if not impossible to judge this in a screenshot because certain kinds of interpolation will make the glow disappear.

Also hard to judge this on a plasma, since it already has CRT-like glow.

edit: okay I just looked at it up close in GIMP and there’s really no discernible glow in the screenshots I just posted (now removed). I’m just seeing actual phoshpor glow, lol. Just need to keep lowing glow threshold until something happens, I’ve got glow strength at the lowest setting (0.001).

(screenshots removed, going to bed)

shaders = "12"
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/misc/glass.slang"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
shader2 = "shaders_slang/crt/shaders/guest/afterglow.slang"
filter_linear2 = "true"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "AfterglowPass"
float_framebuffer2 = "false"
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/avg-lum.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "AvgLumPass"
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/linearize.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = "LinearizePass"
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/blurs/kawase/kawase0.slang"
filter_linear5 = "true"
wrap_mode5 = "mirrored_repeat"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "true"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/blurs/kawase/kawase1.slang"
filter_linear6 = "true"
wrap_mode6 = "mirrored_repeat"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "false"
srgb_framebuffer6 = "true"
scale_type_x6 = "source"
scale_x6 = "1.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/blurs/kawase/kawase1.slang"
filter_linear7 = "true"
wrap_mode7 = "mirrored_repeat"
mipmap_input7 = "false"
alias7 = ""
float_framebuffer7 = "false"
srgb_framebuffer7 = "true"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/blurs/kawase/kawase2.slang"
filter_linear8 = "true"
wrap_mode8 = "mirrored_repeat"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "false"
srgb_framebuffer8 = "true"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/blurs/kawase/kawase3.slang"
filter_linear9 = "true"
wrap_mode9 = "mirrored_repeat"
mipmap_input9 = "false"
alias9 = "GlowPass"
float_framebuffer9 = "false"
srgb_framebuffer9 = "true"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/linearize_scanlines.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "source"
scale_x10 = "1.000000"
scale_type_y10 = "source"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/crt-guest-dr-venom.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "false"
srgb_framebuffer11 = "false"
scale_type_x11 = "viewport"
scale_x11 = "1.000000"
scale_type_y11 = "viewport"
scale_y11 = "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;g_csize;g_bsize;g_flicker;g_shaker;g_refltog;g_reflgrain;g_reflstr;g_fresnel;g_reflblur;gz;gx;gy;gzr;gzg;gzb;goxr;goyr;goxg;goyg;goxb;goyb;TO;PH;PER;ASAT;temperature;luma_preserve;wp_red;wp_green;wp_blue;SW;AR;PR;AG;PG;AB;PB;sat;lsmooth;GAMMA_INPUT;bloom_threshold;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 = "8004.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"
g_csize = "0.000000"
g_bsize = "2000.000000"
g_flicker = "0.000000"
g_shaker = "0.000000"
g_refltog = "1.000000"
g_reflgrain = "0.000000"
g_reflstr = "0.000000"
g_fresnel = "0.000000"
g_reflblur = "0.000000"
gz = "1.000000"
gx = "1.000000"
gy = "1.000000"
gzr = "1.000000"
gzg = "1.000000"
gzb = "1.000000"
goxr = "0.020000"
goyr = "0.000000"
goxg = "0.000000"
goyg = "0.020000"
goxb = "0.000000"
goyb = "0.000000"
TO = "0.000000"
PH = "2.000000"
PER = "0.750000"
ASAT = "0.200000"
temperature = "6500.000000"
luma_preserve = "1.000000"
wp_red = "-0.000001"
wp_green = "-0.000001"
wp_blue = "-0.000001"
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.499999"
bloom_threshold = "0.895000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
brightboost = "1.000003"
brightboost1 = "3.999999"
gsl = "0.000000"
scanline1 = "1.000000"
scanline2 = "23.000000"
beam_min = "2.500000"
beam_max = "1.000000"
beam_size = "0.000000"
h_sharp = "4.000000"
s_sharp = "0.000000"
csize = "0.000000"
bsize = "600.000000"
warpX = "0.000000"
warpY = "0.000000"
glow = "0.001000"
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.000000"
gamma_out = "3.499999"
spike = "1.000000"
inter = "400.000000"
interm = "1.000000"
bloom = "0.000000"
scans = "0.500000"
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

ha, yeah, i didn’t see anything in the screenshots and figured “must just be my shitty laptop monitor”. The threshold should control when glow actually appears (based on luminance; it’s a threshold, so there’s a fair chance it’ll have a nasty 0-100% effect wherever you set it) and the glow strength parameter in GDV will control how visible it is. There’s no parameter for the size of the glow, which is generally controlled by the number of passes in kawase. 0,1,1,2 would be a good next step down if you want to try smaller glow.

If you don’t want to deal with a bajillion kawase passes, there’s also the blur-43-fast h and v passes in the ‘blurs’ directory. They’re not as fast as kawase, but not as slow as one might expect based on the huge kernel and they will drop right into GDV’s preset.

2 Likes

Okay, I just confirmed that there IS glow in these screenshots. It may or may not be useful depending on the display and may not be visible in a screenshot.

You can confirm this by loading the settings and looking at the black edge of the colorbars image; if there’s glow then you’ll be able to see the edge of the pillarbox.

glow strength 0.001 and glow threshold 0.95. I haven’t tested 0.95-1.00.

1 Like

Isnt the threshold just adjust the darkest pixels that should trigger the glow? Or the bloom, because it is just another way of saying bloom, right?

I think bloom is kinda hard to use on crt shaders. Its easy to make it screw things up. What maybe would be cool though is if it were possible to add bloom/glow BEFORE the crt. I have never seen that.

1 Like

From experience I find exponential glow to look better than gaussian glow. I read on the paper that kawase tries to approximate to a gaussian, so maybe adjusting the values/passes we can turn it into an exponential. 0, 1, 1, 2, 3 is a fibonacci sequence, the below example is a tribonacci.

Blur1: Blur0
Blur2: Blur0 + Blur1
Blur3: Blur0 + Blur1 + Blur2
Blur4: Blur1 + Blur2 + Blur3
Blur5: Blur2 + Blur3 + Blur4
2 Likes

Glow and bloom aren’t the same thing, but the terms are sometimes used interchangeably so it gets confusing.

Yes, threshold controls the cutoff, glow strength controls how visible it is. To be realistic the threshold should be 0, I guess.

What would the shader chain for this look like using kawase blurs?