Please show off what crt shaders can do!

An update to crt-super-xbr. It now uses crt-hyllian-multipass and became much faster. Other than that, there’s a glow version (first release). I’ve managed to fix some weird artifacts from old versions, it’s now much lighter (it uses linear gamma since first pass now).

crt-super-xbr and glow + crt-hyllian-multipass (slang)

Some screens from crt-super-xbr-glow:

9 Likes

Hi Hyllian,Thanks for the efforts. Link isn’t working for me , would you please upload on another site?

Sure! --> alternative link

Someone that goes by ‘WolfWings’ submitted a nice new mask in a comment on my blog:

 {green, magenta, green, magenta},
 {black, blue, green, red},
 {green, magenta, green, magenta},
 {green, red, black, blue}

it ends up with slotmask triads that are taller than they are wide, which threw me at first, until I realized that it makes a perfect simulation of TATE mode :slight_smile:

11 Likes

Oooh, this one looks really cool! @guest.r any interest in trying this one out? :wink:

3 Likes

Small fix to crt-super-xbr that was causing some tiny artifacts when scaling at nPOT scale factors:

crt-super-xbr - 21-01-22 (slang)

7 Likes

Yeah I loaded this up on my 4K monitor and it is pretty convincing. :grinning:

It might end up needing a bit of boost of the brightness because of the black pixel.

1 Like

It would be really nice if Hyllian’s updated shaders could be uploaded to the official shaders repo !

they have been, about at week ago.

3 Likes

Looks like now I know why I shouldn’t forget to enable the preset param ‘srgb_framebuffer’ when making precise computations and saving it to framebuffer to be used among passes. (LOL).

This fix will preserve some subtle color transitions from becoming harsh transitions.

Thanks to @Tatsuya79 I found it was necessary to use that param in crt-super-xbr. So, here’s a new release with that fix:

crt-super-xbr (slang) (21-01-22)

Screenshots of crt-super-xbr-glow:

5 Likes

Do you know exactly what using the srgb_framebuffer does? It seems like the gamma function used to get srgb to linear is not a straight gamma application.

I know that using it, the colors don’t loose precision. And the results of using gamma in and gamma out in different passes now are identical to using both in only one pass.

1 Like

It is kinda hard to show how a preset look on a certain tv, but I habe tried with this image. Still not correct, but close.

1 Like

Been a while since I posted, thought I’d give the new guest shader a spin.

And here’s a few shots with just the slot mask:

shaders = "11"
shader0 = "shaders_slang/stock.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/reshade/shaders/FilmGrain.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/misc/grade.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "PrePass"
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/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/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/crt/shaders/guest/crt-gdv-new/gaussian_horizontal.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "viewport"
scale_x5 = "0.500000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/crt-gdv-new/gaussian_vertical.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "GlowPass"
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "viewport"
scale_x6 = "0.500000"
scale_type_y6 = "viewport"
scale_y6 = "0.500000"
shader7 = "shaders_slang/crt/shaders/guest/crt-gdv-new/bloom_horizontal.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
float_framebuffer7 = "false"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/crt-gdv-new/bloom_vertical.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = "BloomPass"
float_framebuffer8 = "false"
srgb_framebuffer8 = "false"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/crt-gdv-new/crt-guest-dr-venom2.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "viewport"
scale_x9 = "1.000000"
scale_type_y9 = "viewport"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/crt-gdv-new/deconvergence.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
Intensity = "0.250000"
g_vignette = "0.000000"
wp_temperature = "8004.000000"
g_sat = "0.400000"
GAMMA_INPUT = "3.499999"
interm = "5.000000"
bloom = "0.900000"
halation = "0.075000"
gamma_c = "1.500000"
brightboost = "2.000000"
brightboost1 = "3.000000"
scanline1 = "15.000000"
scanline2 = "5.000000"
beam_min = "2.499999"
beam_size = "0.700000"
s_sharp = "1.000000"
BLOOM = "1.000000"
csize = "0.010000"
warpX = "0.030000"
warpY = "0.040000"
shadowMask = "7.000000"
maskstr = "1.000000"
mask_gamma = "3.499999"
gamma_out = "3.499999"
deconr = "-1.000000"
decons = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
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"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/lut/custom_lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"

Slot Mask settings

shaders = "11"
shader0 = "shaders_slang/stock.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/reshade/shaders/FilmGrain.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/misc/grade.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "PrePass"
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/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/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/crt/shaders/guest/crt-gdv-new/gaussian_horizontal.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "viewport"
scale_x5 = "0.500000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/crt-gdv-new/gaussian_vertical.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "GlowPass"
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "viewport"
scale_x6 = "0.500000"
scale_type_y6 = "viewport"
scale_y6 = "0.500000"
shader7 = "shaders_slang/crt/shaders/guest/crt-gdv-new/bloom_horizontal.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
float_framebuffer7 = "false"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/crt-gdv-new/bloom_vertical.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = "BloomPass"
float_framebuffer8 = "false"
srgb_framebuffer8 = "false"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/crt-gdv-new/crt-guest-dr-venom2.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "viewport"
scale_x9 = "1.000000"
scale_type_y9 = "viewport"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/crt-gdv-new/deconvergence.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
Intensity = "0.250000"
g_vignette = "0.000000"
wp_temperature = "8004.000000"
g_sat = "0.400000"
GAMMA_INPUT = "3.499999"
interm = "5.000000"
bloom = "0.900000"
halation = "0.075000"
gamma_c = "1.500000"
brightboost = "2.000000"
brightboost1 = "3.000000"
scanline1 = "15.000000"
scanline2 = "5.000000"
beam_min = "2.499999"
beam_size = "0.700000"
s_sharp = "1.000000"
BLOOM = "1.000000"
csize = "0.010000"
warpX = "0.030000"
warpY = "0.040000"
shadowMask = "-1.000000"
maskstr = "1.000000"
slotmask = "1.000000"
mask_gamma = "3.499999"
gamma_out = "3.499999"
deconr = "-1.000000"
decons = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
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"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/lut/custom_lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
4 Likes

Finally posting here a link to my ReShade VHS setup. It contains both the Blurry/LowRes and the Clean version in 16:9 and 4:3 aspect ratios (labeled as 1920 and 1440 respectively).

Some screenshots (LowRes version) :

Clean version :

You’ll have to use Res-o-matic to get 4:3 in emulators like RetroArch or Dolphin on widescreen displays!

Without Res-o-matic :

With Res-o-matic :

This was made on a 1920x1080 monitor. So it may not work as expected on other resolutions! DM me if you need help with this (or anything else related to this shader).

7 Likes

New release of crt-super-xbr:

  • Added crt-super-xbr-curvature-ntsc-adaptive;

crt-super-xbr and variants (slang) - 21-01-24

Screenshots of crt-super-xbr-curvature-ntsc-adaptive:

9 Likes

Your crt screens were that blurry in your memories?!

Not in my case. Though I’m sure some old crt TVs were like that.

Anyway, if it isn’t your case too, there are other sharp presets inside the package.

2 Likes

One of the cheapest LG displays and a weird screen from China. :money_mouth_face:

I was wondering if it would be possible for you to implement a mask-strength parameter into CRT Super XBR? I was tinkering around with it but I found that I can only turn the phosphor grid on/off. I would like to be able to increase and/or decrease the strength of the phosphor grid in order to further fine-tune this shader.