New CRT shader from Guest + CRT Guest Advanced updates

Out of curiosity which scaler do you personally like the most scalefx, xbr-lv3 or super-xbr?

1 Like

It’s really situational. The xBR family has “arbitrary” scaling abilities and great consistency, scalefx needs some help sometimes for my taste, but it’s a very wide and profound scaler.

Super-xbr is not a standalone all-rounder, but very good for some situations and, as it turns out, a great addon for crt shaders too…

3 Likes

As far as scalefx, the best case scenario I’ve seen so far is to deactivate every setting and then just enable your new high resolution scanlines setting, that seems to give the best results. I actually want to use scalefx simply because it’s the fastest performance wise but yeah. I’m still messing about with xbr-lv3 but it seems ok right out the gate so far as well. Curious to see your two custom Super xbr presets when it’s ready to give my opinion on those.

1 Like

New Release Version (2023-12-02-r1):

Notable changes:

  • Additional pre-scaler presets added (in shaders/guest/ folder).
  • Feedback is welcome as this is a repository update candidate.

Download link:

https://mega.nz/file/xgBziJpY#hekDPzCFYghaNmqlGMfIzHRAgymGGoCzI7QBdDiy6KU

13 Likes

I actually like the softer look from this. It looks more like a really older shadow masker with low tv lines.

1 Like

I see you added in “xbr-lv2” now as well. Ok so I prepended these new scalers to my aperture grille rgb presets and these are my results:

I added a tweaked scalefx pic in for comparison sake but in order my favorite is xbr-lv2, scalefx, super-xbr-sharp and super-xbr-smooth. Xbr-lv2 gives the cleanest image while keeping things sharp and without any weird anamolies in the pixels. Scalefx looks good after lowering, turning off settings, super-xbr sharp and smooth I didn’t tweak but from first impressions I can see the sharp version looking nice with some tweaking, the smooth one I simply don’t care for.

They all work and do their job in different ways, I didn’t bother with the “horizontal” scalers in the folder, not my cup of tea. All in all if I was to use one it would either be xbr-lv2 or scalefx with the “scalefx threshold” setting brought down to 0.12 and the other two settings deactivated.

I know you told me what kind of shader it was in my thread but would it somehow be possible to get a “guest.r customized” version of the xbrz-freescale" shader added into the mix? That one still gives me the best results even out of all 4 of those.

2 Likes

Greetings @Guest - I find this better and more authentic, it seems like a television effect as @yuzqualio said - great work what you are presenting!

3 Likes

This is just brilliant if I might say so myself!

3 Likes

It’s because the default ‘freescale’ preset is outputting to a very high (viewport) resolution. But it’s a performance killer with the majority of situations. A good deal is to increase the xBR-lvl2 shader pass scaling from 3.0 to something greater from the RA shader menu.

1 Like

I figured you’d say this lol.

Yeah I think I’ll end up using (assuming that I make upscaled presets again) xbr lv2 or a tweaked scalefx which with that one it would also give me better performance results. Guess I’ll see how things go. Thanks for the response and for this latest shader update.

1 Like

I know what I’m ‘saying’ about, lol. :wink:

The difference between current xbr and xbrz-freescale is how the scaler kernel fueld by weights and the metric decides in some situations. It’s meaningless to even discuss which one is right on this or that pixel junction.

xbr:

xbrz-freescale:

2 Likes

I think we’re seeing a new subfield in the crt shaders realm. It does show some unique characteristics.

At @guest.r, the “smooth” shader put at the beginning of the chain does its work smoothing diagonal lines and nuances and the post crt shader with its mask give some stability to the image by avoiding the blow up of the nasty characteristics of the former. Another shader you should consider in your experiments is jinc2. I got some great results with royale crt. I’d never imagine they both would match so well before experimenting. Even doing these things for almost two decades, it always brings new things to the table.

3 Likes

I’m even more amazed at you even being this invested in the upscaling side of shaders, I like that you’re tapping into different ranges with your shader so I’m enjoying this ride where ever this may lead lol.

On a different note, just for performance sake if I make upscaling presets again I may make due with scalefx, I’m not trying to bring end user’s gpus to its knees using a demanding upscaler like xbrz freescale. The tweaks I mentioned in a above post seem to get the job done just as well as xbr. Who knows maybe you’ll end up adding in a different upscaler, I’m watching how this all plays out but so far I’ve already got scalefx and xbr as my two top picks.

2 Likes

The most problematic situation here is with the ntsc presets, even at full 3x scale. As i already mentioned in your thread, the first ntsc shader pass x-scaling can be set/edited to 2x (instead of 4x), which basically halves the performance loss.

With default xbrz-freescale preset, for example, buffer resolutions with a 4k display could get as large as 16384x2160, which would crash gpu’s or at least stall the performance.

So i’m not including viewport resolution presets in my folder, but they can be (ofc.) freely added from the repository presets and used with other ‘gdv’ versions.

2 Likes

Hi @guest.r, would you mind sharing those settings? I’m really interested in how the colour blooms outside of the slot mask, it has a splendid consumer CRT feel!

2 Likes

Yeah xbrz-freescale is out the door, that was me in my usual tweaking self trying out experiments in the lab, you know how it goes lol.

This will definitely be put to use if I make ntsc presets for sure, thank you for that tip.

1 Like

Here is the preset. First crt-guest-advanced is loaded, then super-xbr-smooth pre-pended. Save it as a new preset. I guess then it’s not this hard to copy over the parameter values.

shaders = "16"
feedback_pass = "0"
shader0 = "shaders_slang/stock.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = "XbrSource"
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/edge-smoothing/xbr/shaders/super-xbr/super-xbr-pass0.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
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/edge-smoothing/xbr/shaders/super-xbr/super-xbr-pass1.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "2.000000"
scale_type_y2 = "source"
scale_y2 = "2.000000"
shader3 = "shaders_slang/edge-smoothing/xbr/shaders/super-xbr/super-xbr-pass2.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = ""
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-guest-advanced/shaders/guest/advanced/stock.slang"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/stock.slang"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "StockPass"
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/afterglow0.slang"
filter_linear6 = "false"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "AfterglowPass"
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "1.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/pre-shaders-afterglow.slang"
filter_linear7 = "false"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "true"
alias7 = "PrePass"
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-guest-advanced/shaders/guest/advanced/avg-lum.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "true"
alias8 = "AvgLumPass"
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-guest-advanced/shaders/guest/advanced/linearize.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "LinearizePass"
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "absolute"
scale_x10 = "800"
scale_type_y10 = "source"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = "GlowPass"
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
scale_type_x11 = "absolute"
scale_x11 = "800"
scale_type_y11 = "absolute"
scale_y11 = "600"
shader12 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear12 = "true"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = ""
float_framebuffer12 = "true"
srgb_framebuffer12 = "false"
scale_type_x12 = "absolute"
scale_x12 = "800"
scale_type_y12 = "absolute"
scale_y12 = "600"
shader13 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/bloom_vertical.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = "BloomPass"
float_framebuffer13 = "true"
srgb_framebuffer13 = "false"
scale_type_x13 = "source"
scale_x13 = "1.000000"
scale_type_y13 = "source"
scale_y13 = "1.000000"
shader14 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear14 = "true"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
alias14 = ""
float_framebuffer14 = "true"
srgb_framebuffer14 = "false"
scale_type_x14 = "viewport"
scale_x14 = "1.000000"
scale_type_y14 = "viewport"
scale_y14 = "1.000000"
shader15 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/deconvergence.slang"
filter_linear15 = "true"
wrap_mode15 = "clamp_to_border"
mipmap_input15 = "false"
alias15 = ""
float_framebuffer15 = "false"
srgb_framebuffer15 = "false"
scale_type_x15 = "viewport"
scale_x15 = "1.000000"
scale_type_y15 = "viewport"
scale_y15 = "1.000000"
XBR_EDGE_STR_P0 = "1.000000"
XBR_EDGE_SHP = "3.000000"
XBR_TEXTURE_SHP = "2.000000"
XBR_EDGE_STR_P1 = "2.000000"
XBR_EDGE_STR_P2 = "2.000000"
hiscan = "1.000000"
FINE_BLOOM = "3.000000"
halation = "0.450000"
hmask1 = "0.150000"
gamma_c = "1.200000"
shadowMask = "9.000000"
maskstr = "1.000000"
mask_zoom = "1.000000"
mzoom_sh = "0.750000"
slotmask = "1.000000"
slotmask1 = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt-guest-advanced/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
5 Likes

Nice!

So it’s the interaction between Halation and Fine bloom/halation that gives that particular look. And you could go a little overboard with xbr to make it extra smooth. Really interesting, thanks!

2 Likes

Got some similar royale effects using jinc2 prepended:

Summary

shaders = "15"
feedback_pass = "0"
shader0 = "shaders_slang/xbr/shaders/support/linearize.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = "XbrSource"
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/interpolation/shaders/jinc2.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "viewport"
scale_x1 = "1.000000"
scale_type_y1 = "viewport"
scale_y1 = "1.000000"
shader2 = "shaders_slang/xbr/shaders/support/delinearize.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
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/advanced/stock.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = ""
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/advanced/stock.slang"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = "StockPass"
float_framebuffer4 = "false"
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/advanced/afterglow0.slang"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "AfterglowPass"
float_framebuffer5 = "false"
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/advanced/pre-shaders-afterglow.slang"
filter_linear6 = "false"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "true"
alias6 = "PrePass"
float_framebuffer6 = "false"
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/advanced/avg-lum.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "true"
alias7 = "AvgLumPass"
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/advanced/linearize.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = "LinearizePass"
float_framebuffer8 = "true"
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/advanced/gaussian_horizontal.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "absolute"
scale_x9 = "800"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = "GlowPass"
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "absolute"
scale_x10 = "800"
scale_type_y10 = "absolute"
scale_y10 = "600"
shader11 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
scale_type_x11 = "absolute"
scale_x11 = "800"
scale_type_y11 = "absolute"
scale_y11 = "600"
shader12 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear12 = "true"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = "BloomPass"
float_framebuffer12 = "true"
srgb_framebuffer12 = "false"
scale_type_x12 = "source"
scale_x12 = "1.000000"
scale_type_y12 = "source"
scale_y12 = "1.000000"
shader13 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = ""
float_framebuffer13 = "true"
srgb_framebuffer13 = "false"
scale_type_x13 = "viewport"
scale_x13 = "1.000000"
scale_type_y13 = "viewport"
scale_y13 = "1.000000"
shader14 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear14 = "true"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
alias14 = ""
float_framebuffer14 = "false"
srgb_framebuffer14 = "false"
scale_type_x14 = "viewport"
scale_x14 = "1.000000"
scale_type_y14 = "viewport"
scale_y14 = "1.000000"
JINC2_WINDOW_SINC = "0.500000"
JINC2_AR_STRENGTH = "1.000000"
TNTC = "4.000000"
glow = "0.000000"
gamma_out = "2.200000"
mask_bloom = "0.200000"
halation = "-0.200000"
hmask1 = "1.000000"
gamma_c = "0.900000"
gsl = "1.000000"
scanline1 = "0.000000"
scanline2 = "18.000000"
beam_min = "1.000000"
beam_max = "0.700000"
scans = "1.000000"
no_scanlines = "1.000000"
shadowMask = "6.000000"
maskstr = "0.500000"
mcut = "1.000000"
maskboost = "3.000000"
mask_layout = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
3 Likes

I think we should have an official repository of these experiments, in each author’s shader folders. Some mixes are really good and deserve a place with the current presets.

If they only stay here in the posts, they will get lost and that would be a sin!

3 Likes