I managed to correct misaligment of scanlines on 4K, now looks waaay better, also with this new update.
Great! Nice pics! I Liked!
Now I realised, that I forgot to set slotmasks on. It looks more like a trinitron, I love it though… I made the same preset with slotmask, and colors and brightness clip a bit and, I prefer the brightness and color of the screenshots above. Is there anyway to mitigate this on slotmask? This is with slotmask activated on 1080p
Old school style. 1080p, high contrast and backlight, midle britghtnes screen, warm, low sharpness in TV or monitors.
Muy bien retro4k.
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).
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"
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:
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.
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…
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.
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
What does the HD preset do, i.e. what is it’s intended usage? Thanks
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…
Thanks. I’m enjoying your latest update. Composite looks beautiful on the Wings of Badniks (Sonic 1, Sonic CD, S&K etc)
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.
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.
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”.
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