New CRT shader from Guest + CRT Guest Advanced updates

Indeed, this is a good, matured version and the update should be just copy-paste over existing files. Would be great if @hunterk finds some time to update the official repository. My thanks in advance. :smiley:

8 Likes

I have a question: is it possible to replicate the subtle scanline effect seen in the following screenshot in the latest GDV presets?

This screenshot was taken using the old guest-sm preset that is no longer in the slang repo. It seems to work a bit differently from the other presets, in that 480p content still displays very thin scanlines at 2x scale, whereas in the modern presets, it will not, such as in this shot taken using the standard GDV preset using default parameters:

The idea would be to have 480p content still display subtle scanlines even at 2x scale. I know at 3x scale and above, you do get scanlines with 480p content in the modern presets, but that’s not viable for 1080p monitors. One could, of course, argue 1080p does not give enough pixel room for good-looking 480p scanlines, but I think it still looks pretty neat regardless. In any case, I fiddled with all the parameters, and the only one that kinda got close was setting Internal Resolution Y to 1.5, but it doesn’t look quite right. Can something else be done? I like what guest-sm does here, but it’s missing a TON of advancements from the newest presets.

2 Likes

Is there a way to make a BGR slot mask? like this:

xxB xGx Rxx/xxx xxx xxx

xxB xGx Rxx/xxB xGx Rxx

xxx xxx xxx/xxB xGx Rxx

My best guess is that you should disable interlacing (mode 0.0) before any tweaks. Guest-SM doesn’t have interlacing options and that’s what makes the major difference when compared with guest-advanced.

It broke some of the existing presets, so it’s currently RBG instead of BGR regarding slotmask alignment.

2 Likes

I see, it’s because the MG pattern is too close, and this pattern has more space between the triads. Where is this old build? Would like to try it at least. Thanks.

EDIT: Mask 9 seems what I’m looking for, lol.

1 Like

One more thing lol. How to make the base (dark) mask strength look like a slot mask?

1 Like

On a real CRT the slotmask features aren’t visible with “base mask”, there was a debate in this thread about it, so it looks aperture-like with this feature.

You can have slotmask features with accordingly setup magic glow OTOH.

2 Likes

That was the first thing I did, as I figured interlacing would be likely to throw a wrench into things. I ended up trying a few other shaders to see if any of them did something similar, and sure enough, crt-aperture does through a parameter called Scanline Offset. With it off, it behaves like modern GDV, but turned on, it looks like guest-SM, on hi-res content anyway. It appears to work by shifting the lines down by a single pixel, resulting in the desired look.

2 Likes

I remember reading about the dev conversation of crt-aperture. It has, as i remember, a special mode to display scanlines 4-pixel thick (like for 800p etc. displays).

Something like this:

xxxxxxxxxxx
xxxxxxxxxxx
xxxxxxxxxxx
-----------

instead of:

-----------
xxxxxxxxxxx
xxxxxxxxxxx
-----------
1 Like

Indeed, the Scanline Offset parameter I speak of in crt-aperture appears to do that.

On another note, I have a question about the grade pass you included that can be inserted into GDV. Grade has a CRT gamma parameter, set to 2.5 as default. Given that GDV already has Gamma input and output parameters, how does grade’s gamma parameter interact with that? What should it be set to?

2 Likes

Hello, I like some of the qualities of the Royale shader but I do not like the hit to performance. After messing with the latest Guest I feel I have something that is a good substitute. I get similar colors, clipping on saturated beams, and the more pronounced mask “dot-i-ness”. It’s not accurate to any kind CRT but it looks nice on my 4k laptop.

Royale Crop

Guest Crop

shaders = "12"
shader0 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
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/advanced/stock.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "StockPass"
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/advanced/afterglow0.slang"
filter_linear2 = "false"
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/advanced/pre-shaders-afterglow.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "PrePass"
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/avg-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
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/linearize.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "LinearizePass"
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/advanced/gaussian_horizontal.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "absolute"
scale_x6 = "800"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "absolute"
scale_x7 = "800"
scale_type_y7 = "absolute"
scale_y7 = "600"
shader8 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "absolute"
scale_x8 = "800"
scale_type_y8 = "absolute"
scale_y8 = "600"
shader9 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "BloomPass"
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/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.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"
TNTC = "4.000000"
wp_saturation = "1.100000"
interm = "0.000000"
m_glow = "1.000000"
m_glow_dist = "1.999999"
m_glow_mask = "0.000000"
SIGMA_HB = "0.500000"
glow = "0.300000"
bloom = "0.100000"
mask_bloom = "0.500000"
halation = "-0.150000"
brightboost = "0.900000"
brightboost1 = "1.300000"
gsl = "-1.000000"
scanline1 = "20.000000"
scanline2 = "20.000000"
beam_min = "1.899999"
beam_max = "1.100000"
scans = "1.000000"
h_sharp = "6.999998"
shadowMask = "11.000000"
maskstr = "0.850000"
maskboost = "2.750000"
mask_gamma = "1.500001"
double_slot = "1.000000"
mclip = "0.150000"
deconrr = "1.000000"
deconrb = "-1.000000"
deconrry = "1.000000"
deconrby = "-1.000000"
decons = "0.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"

While subtle, changing the mask type, size, or RGB vs BGR, all effects the clipping on saturated beams and will probably be different for every display.

5 Likes

As i recall, grade’s gamma loop is closed, which means after grade finishes it’s color processing, the color space is ‘reset’ to original. Similar happens with my color grading, which involves different types of gamma strengths. Otherwise the overall image appearance would be very notable darkish.

So you can handle the grade gamma in its own environment, preferably leave it as it is.

2 Likes

Hey, some nice tweaking. I also tried some new features lately…with nice results i guess… :grin:

ntsc_phase = "4.000000"
ntsc_cscale = "1.999999"
ntsc_sharp = "-7.000000"
CSHARPEN = "0.500000"
CCONTR = "0.200000"
FINE_BLOOM = "3.000000"
mask_bloom = "-0.600000"
halation = "-0.100000"
gamma_c = "1.300000"
clips = "0.500000"
gsl = "-1.000000"
scanline1 = "5.000000"
scanline2 = "7.000000"
beam_min = "1.100000"
scans = "1.500000"
ssharp = "0.150000"
shadowMask = "6.000000"
maskstr = "1.000000"
maskboost = "1.500000"
slotmask = "1.000000"
slotmask1 = "1.000000"
smask_mit = "0.700000"

NTSC preset with “NTSC” color LUT option selected.

10 Likes

Loving both posts from @guest.r and @BendBombBoom. @BendBombBoom I always wondered what a royale style guest preset would look like and you got it pretty close.

@guest.r I also switched the LUT in the grade shader and that’s exactly what my next update is based on. I also experimented tweaking a setting called “crt hue”. Changing that value by just 1 in the negative value gives skin tones this almost “pinkish” hue to skin tones, it’s very subtle but kind of reminds me of the posts by you two above. Still deciding if I should go with that look or not. These are just my tweaking thoughts out loud don’t mind me lol.

2 Likes

This is a silly question, but to achieve similar result do you mean we use the “guest advanced HD” and then change those parameters you listed?

I have a tiny bit experience with changing values, but when you post things like this Im unsure if it means more steps aswell.

1 Like

Hey there!

Yes, most certainly. It would be optimal if you just load the guest-advanced-hd (and change a parameter or two), save the preset and then copy/paste the listed parameters into the appropriate place in the preset text file. Saves a lot of time and works very nice.

Ah ok, Im usually sitting in the sofa using my controller when I do this (and the emulator is not close) so Its a little hassle to copy paste actually, thats why I just change the parameters right then and there, but saving a new preset is smart!. But as long as I know what to do I will try this out.

It reminds me of some arcade-machines when I was small so this will be really cool for some of those games.

1 Like

Trying a quick aperture setup with xbr x3 scale (instead of stock shader). The HD version is very nice with pre-scalers.

internal_res = "2.200000"
m_glow = "1.000000"
FINE_BLOOM = "3.000000"
IOS = "2.000000"
glow = "0.150000"
mask_bloom = "-0.750000"
gamma_c = "1.200000"
clips = "0.500000"
gsl = "2.000000"
scanline1 = "5.000000"
scanline2 = "15.000000"
beam_min = "2.999998"
tds = "1.000000"
scans = "1.800000"
shadowMask = "12.000000"
maskstr = "1.000000"
maskboost = "1.350000"
mask_zoom = "-3.000000"
deconrr = "1.000000"
deconrb = "-1.000000"
deconrry = "1.000000"
deconrby = "-1.000000"
10 Likes

thanks again guest.r for your great shaders. do you it could possible to implement the “tate orientation” setting on the HD version of your shader? thanks regards

1 Like

TATE mode doesn’t allow some more recent performance optimizations, so it’s currently only available in the standard version.

Fortunately, the standard’s version filtering is adequate for vertical resolutions, maybe there is a disadvantage with pre-scalers, but should be better with xBR at 2x or super-xbr.

3 Likes