New CRT shader from Guest + CRT Guest Advanced updates

Old school style. 1080p, high contrast and backlight, midle britghtnes screen, warm, low sharpness in TV or monitors.

Muy bien retro4k.

5 Likes

Remember due to the placement of the slots, slot mask presets tend to be darker than aperture grill at the same phosphor sizes/TVL. This is simply because there’s more black on the screen with the additional slots.

The solution to this is fine tuning the brightness and/gamma, brightening your display with or without using HDR.

You can also reduce scanline gap intensity and/or thickness.

So in other words some sort of compromise.

The screenshots you like seem to be on the saturated side so you might run into a situation where there is even less headroom before clipping using Slot Mask.

You might like the dot Mask, not sure if it can be pulled off in a high quality fashion using only 1080p but that Mask Type has the least black in between the phosphors so at similar Mask Size/TVL it should be brighter than Aperture Grille or Slot Mask.

See here for examples of the brightness differences:

Here are my first attempts at brightness normalization:

The reason I have A and B presets is because I attempted 2 different methods of matching the brightness.

One of them uses Gamma_C while the other uses Bright Boost (Bright Pixels) and Bright Boost (Dark Pixels).

4 Likes

Some current tests. The black text in Brave Fencer and other details in the status screen, and edges of the letters in SMB screen are particularly difficult (being high contrast and single-pixel details). I think a bit of green deconvergence on the horizontal axis helped but it probably made other situations worse. Black lines are properly thick, as seen on composite video. Overall, I think it looks fantastic.

shaders = "18"
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 = "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/advanced/pre-shaders-afterglow.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "PrePass0"
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/ntsc/ntsc-pass1.slang"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = "NPass1"
float_framebuffer4 = "true"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "4.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/ntsc/ntsc-pass2.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "0.500000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/ntsc/ntsc-pass3.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
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/custom-fast-sharpen.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "NtscPass"
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/stock.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "true"
alias8 = "PrePass"
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/advanced/avg-lum-ntsc.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "true"
alias9 = "AvgLumPass"
float_framebuffer9 = "false"
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/linearize-ntsc.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = "LinearizePass"
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/advanced/crt-guest-advanced-ntsc-pass1.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = "Pass1"
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
scale_type_x11 = "viewport"
scale_x11 = "1.000000"
scale_type_y11 = "source"
scale_y11 = "1.000000"
shader12 = "shaders_slang/crt/shaders/guest/advanced/gaussian_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 = "source"
scale_y12 = "1.000000"
shader13 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = "GlowPass"
float_framebuffer13 = "true"
srgb_framebuffer13 = "false"
scale_type_x13 = "absolute"
scale_x13 = "800"
scale_type_y13 = "absolute"
scale_y13 = "600"
shader14 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear14 = "true"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
alias14 = ""
float_framebuffer14 = "true"
srgb_framebuffer14 = "false"
scale_type_x14 = "absolute"
scale_x14 = "800"
scale_type_y14 = "absolute"
scale_y14 = "600"
shader15 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear15 = "true"
wrap_mode15 = "clamp_to_border"
mipmap_input15 = "false"
alias15 = "BloomPass"
float_framebuffer15 = "true"
srgb_framebuffer15 = "false"
scale_type_x15 = "absolute"
scale_x15 = "800"
scale_type_y15 = "absolute"
scale_y15 = "600"
shader16 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced-ntsc-pass2.slang"
filter_linear16 = "true"
wrap_mode16 = "clamp_to_border"
mipmap_input16 = "false"
alias16 = ""
float_framebuffer16 = "true"
srgb_framebuffer16 = "false"
scale_type_x16 = "viewport"
scale_x16 = "1.000000"
scale_type_y16 = "viewport"
scale_y16 = "1.000000"
shader17 = "shaders_slang/crt/shaders/guest/advanced/deconvergence-ntsc.slang"
filter_linear17 = "true"
wrap_mode17 = "clamp_to_border"
mipmap_input17 = "false"
alias17 = ""
float_framebuffer17 = "false"
srgb_framebuffer17 = "false"
scale_type_x17 = "viewport"
scale_x17 = "1.000000"
scale_type_y17 = "viewport"
scale_y17 = "1.000000"
PR = "0.000000"
PG = "0.000000"
PB = "0.000000"
AS = "0.000000"
sat = "0.000000"
cust_artifacting = "0.000000"
cust_fringing = "0.000000"
ntsc_fields = "1.000000"
ntsc_cscale = "4.000000"
ntsc_gamma = "0.750000"
ntsc_ring = "1.000000"
ntsc_shape = "1.000000"
CSHARPEN = "5.000000"
CCONTR = "0.150000"
CDETAILS = "0.000000"
DEBLUR = "7.000000"
lsmooth = "0.500000"
GAMMA_INPUT = "2.400000"
gamma_out = "2.200000"
HSHARPNESS = "1.799999"
SIGMA_HOR = "0.600000"
S_SHARP = "0.000000"
HSHARP = "2.000000"
MAXS = "0.300000"
HARNG = "0.000000"
spike = "2.000000"
m_glow = "1.000000"
glow = "0.010000"
brightboost = "4.000000"
brightboost1 = "3.000000"
gsl = "2.000000"
scanline1 = "20.000000"
scanline2 = "30.000000"
beam_min = "1.000000"
scans = "1.500000"
ssharp = "0.300000"
maskstr = "0.650000"
mcut = "0.650000"
deconrg = "-0.500000"
deconrry = "-0.250000"
post_br = "1.350000"
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"
6 Likes

I have already included optimized scaler presets in my package, I guess it would be cool if I add more support for these features.

Currently, the HD version is most appropriate for such an upgrade…and I’m quite pleased with the results.

Example of the new scaler-related feature at work:

11 Likes

Wait a minute here. You’re telling me you’re working on adding in a “pixel smoothing” feature to the hd version?? Now this is interesting, I was just talking to kokoko3k about this very topic that’s crazy.

If that is the case pleeeeease make it to where it doesn’t alter pixels too much out of their original look if you understand what I mean.

2 Likes

Yes, scalers are doing a very nice work in both scaling directions and only horizontal was fully exploited. It was on the table a quite a while, but i guess i wouldn’t be happy with a performance degrading implementation in the first place. Now i think the results are where i’m quite content with.

This is much depending from the scaler presets pre-pended. Ofc. you can test the initial release later…

4 Likes

Yeah that’s the one thing that may cause issues when it comes to smoothing, performance issues especially if people are used to your shader performing at a certain speed.

1 Like

New Release Version (2023-11-28-r1):

Notable changes:

  • NTSC shaders cleanup.
  • Halation mask strength now allows negative values.
  • High Resolution Scanlines feature added to the HD and NTSC versions (enable under interlacing options) .
  • EDIT: fixes.

Download link:

https://mega.nz/file/R9oAxSpI#H39-rsCyVswFRbZ1jXH1DH--PhBXKpmvqy854Y0kzlo

12 Likes

What does the HD preset do, i.e. what is it’s intended usage? Thanks

1 Like

It can handle greater input resolutions better due to a custom horizontal and vertical pixel filter. Input resolutions are greater because emulator core uses a higher resolution or you use something like scalers before the crt shader. It’s not this complicated…

2 Likes

Thanks. I’m enjoying your latest update. Composite looks beautiful on the Wings of Badniks (Sonic 1, Sonic CD, S&K etc)

1 Like

Do you plan to add PAL in the future, or is the PAL57 preset the best way to go for European games?

This is an interesting question indeed. The main difference between PAL and NTSC games as RA sees it is the refresh rate being around 50Hz. Ofc. You can use any shader or preset for them, but indeed, the community would welcome another PAL signal shader.

OTOH I’m sticking my work with the current NTSC shaders, because they are a very correct basis to build on, and I’m familiar with how they work, and I’m not planning yet to do a new PAL alternative.

1 Like

So I took the new High Resolution Scanlines feature for a spin, gotta say it’s interesting indeed. I tested the most popular edge smoothing shader “scalefx” on my rgb preset and these are the results:

My rgb preset:

Scalefx prepended in:

Scalefx with High Resolution Scanlines activated:

First thing I noticed is that it further smooths out pixel edges. Best place to see it is Captain Commado’s legs, they go from the “staircase” pixel look to just a smooth outlined pixel. That’s pretty much the effect I was hoping scalefx would have produced on it’s own, your new setting achieves what I was trying to do back when I released packs with scalefx presets included. Definitely interesting, almost unsure how to proceed with this lol, I’ll just continue playing around with it for now.

6 Likes

Yeah, I wouldn’t call this a specific connection look, but it’s still a nice effect. The best part is still it’s connected with the majority of other features, also scanline features. With my effect base it’s a bit different from just adding scanlines on top, you can also get all the (scanline) customizations and presets are easy to “upgrade”.

7 Likes

New Release Version (2023-11-28-r1):

Notable changes:

  • NTSC shaders cleanup.
  • Halation mask strength now allows negative values.
  • High Resolution Scanlines feature added to the HD and NTSC versions (enable under interlacing options) .
  • Negative “Clip Saturated Color Beams” mode improvement.
  • EDIT: fixes.
  • EDIT2: more fixes.

Download link:

https://mega.nz/file/FgBHDYRI#VpM-yWjiugzddV1RFvKnrBRVCBQ8_xFibW4Zjei8i6g

13 Likes

Just a quick “demo” of more recent features…

Otherwise, I guess the repository version should be ready soon.

5 Likes

That new feature indeed will complete the smooth pixel look with something like scalefx or xbr-lvl3. Since you introduced this setting I’ve been asking myself if I want to create smooth pixel looking presets again, still haven’t come to a decision yet lol.

1 Like

I might be interested in learning how to apply just a hint of smoothing for that hybrid look.

This is looking really nice!

6 Likes