Looking a bit around, it seems this is true for VHS (and analogue standards in general). I thought there was some sort of connection to some old MPEG-1 standard, but that was apparently just the encoding standard of the day wihich it why it was used with all those old VHS-Rips, and only directly connected to Video-CDs, where video was encoded in progressive low res and apparently also output that way by the compatible devices (like the CD-I).
Yes, 240p didn’t exist as an actual standard until like 2003 or something like that (around the time of the iPod Video, IIRC). What we call “240p” was called “double-strike” by Nintendo (to denote that it hits/strikes the same set of fields twice instead of switching) and “non-interlaced mode” by most other groups/companies.
@guest.r What settings do you suggest for the smoothest possible scanline taper when using the NTSC shader? The old 3.00/1.00 combo for horizontal/subtractive sharpness looks harsh.
You could lower the substractive sharpness a bit, so the edges are more soft. Ofc. the ntsc resolution scale feature can be put to good use, depending on what look you are after. It works very nice in situations you where you don’t have to blend dithering for example. There are plenty of options, including blend mode 0, which is sortoff allows standard version like horizontal sharpness tweaking.
Nice shot, can you share your preset ?
It recently occurred to me that I forgot to re-extract 2021-10-22-r1 after updating the shaders in retroarch. After correcting this I discovered the new features.
I have to say @guest.r, the results that can be achieved by lowering scanline gamma are AMAZING! Why only the NTSC version?
As for rolling scanlines, I find it can a layer of vertical “CRT natural anti-aliasing”. I was excited at first but, depending on the gamma and scanline settings the resulting sine pulsation can get annoying.
I was somewhat interested in whether the upper limit for rolling scanline speed could be increased, then it hit me that if it moved fast enough to effectively “disappear” into a mild “flicker” the “verticle smoothing” would also disappear.
Before this update I kept returning to the exact same settings. Now there’s something new to configure and it looks like it’s going to take a overhaul to fine-tune. I’m going to enjoy this.
Edit: Ive discovered that reduced scanline gamma is only so amazing when combined with deconvergence.
Hey there. Thanks for using all the new features of the shaders.
Scanline gamma is indeed ntsc specific, it’s purpose is to produce a normal vertical look and allowing a horizontal blend with a lower gamma value, honoring the original ntsc shaders way of blending. Ofc. it can be tweaked the way one likes it.
If you want something similar with the regular version you can try to lower the main gamma parameters and see how it goes.
I don’t know, I still think scanline gamma allows for better emphasis on the mask with less color loss. The NTSC preset above is a work in progress, however, so I’m still calibrating.
(Note: These images really have to be seen full-res to know what I’m talking about.)
Hey @guest.r i love how your guest advanced shader looks on my 1080p monitor but i just can’t make it look as good on my 2k (Samsung Odyssey 32inch Curved) i probably need to change specific settings for 2k right? I mainly use Lottes Mask 4.
You know you can also nudge the saturation a bit to make up for the colour loss of using the NTSC parameter/preset. At least that’s what I did when using the Composite Setting in GTU.
Absolutely not! Changing saturation is something I find cannot be compensated for. I’m not merely trying to make something that just looks palatable. No, no, no. I’m the one who autisticly keeps colors as close to the raw image as possible.
Also, I have the calibration nearly done. It’s almost lossless. No extra saturation necessary.
There are just a few things I don’t like about this. The recalibration should be very easy though.
I thought you wanted the colours in V Regular V to match the colours in V NTSC V? The NTSC screenshot seems to have lower colour saturation than the Regular screenshot. Most NTSC/composite filters shaders I’ve come across tend to do that.
Which of your images is closest to the RAW image as possible then? The NTSC or the Regular?
Nice presets by the way!
I’m guessing you made this before I updated mine with the screenshot.
You will find the near lossless screenshot directly above.
“V NTSC V” Is just to show how I used reduced scanline gamma to bring out the mask. “V Regular V” Is a rushed attempt at replicating the effect using other gamma settings. Also, the "V"s are just to guide eyes downward toward the screenshots.
I also use an 1440p display and Lottes masks tend to look better for me at this resolution. Bad news is that you would need a 4k display in order to set the mask size to 2.0 to get a similar, but better looking setup. In general it shouldn’t look bad at ‘2k’ if for example your 1080p display was 24 inch.
In my opinion mask 4 should do quite well at 2k, better than with 1080p, since scanline vertical pixel count is greater an the mask-scanline interaction is nicer.
This is what Hagane looks like using my CyberLab Mega Bezel Death To Pixels (Composite - Sharp) preset. It’s really a beautiful game!
Click the link below to download
CyberLab Mega Bezel Death To Pixels Shader Preset Pack 31-10-21.zip
Yeah maybe the problem is that i’m trying to play GBA games with that mask, games like castlevania look amazing but the mask effect is too noticeable. What kind of integer scale would you recommend for GBA games on a 32 inch monitor?
With mask 4 you can increase the ‘Lottes maskDark’ and/or lower the ‘Lottes maskLight’ parameter to get a subtler imprint.
IMO you are quite fine without integer scaling, unless you really want some specific scanline stuff, like one pixel thickness etc. In a really odd case of uneven scanlines i would recommend normal integer scaling, without overscan.
I see. Imma play a bit with those settings then thank you!!
Here’s what I have at the moment.
I’m very satisfied. (except for the fact that over course of making this very post, I checked F-Zero GX and realized I had to tone down the deconvergence)
shaders = "17"
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"
frame_count_mod4 = "2"
mipmap_input4 = "false"
alias4 = ""
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 = "false"
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/custom-fast-sharpen.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "NtscPass"
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/convert-ntsc.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 = "0.500000"
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/gaussian_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 = "640"
scale_type_y11 = "source"
scale_y11 = "1.000000"
shader12 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear12 = "true"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = "GlowPass"
float_framebuffer12 = "true"
srgb_framebuffer12 = "false"
scale_type_x12 = "absolute"
scale_x12 = "640"
scale_type_y12 = "absolute"
scale_y12 = "480"
shader13 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = ""
float_framebuffer13 = "true"
srgb_framebuffer13 = "false"
scale_type_x13 = "absolute"
scale_x13 = "640"
scale_type_y13 = "absolute"
scale_y13 = "480"
shader14 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear14 = "true"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
alias14 = "BloomPass"
float_framebuffer14 = "true"
srgb_framebuffer14 = "false"
scale_type_x14 = "absolute"
scale_x14 = "640"
scale_type_y14 = "absolute"
scale_y14 = "480"
shader15 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced-ntsc.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"
shader16 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear16 = "true"
wrap_mode16 = "clamp_to_border"
mipmap_input16 = "false"
alias16 = ""
float_framebuffer16 = "false"
srgb_framebuffer16 = "false"
scale_type_x16 = "viewport"
scale_x16 = "1.000000"
scale_type_y16 = "viewport"
scale_y16 = "1.000000"
PR = "0.120000"
PG = "0.120000"
PB = "0.120000"
AS = "0.020000"
sat = "1.000000"
WP = "-20.000000"
pre_bb = "1.020000"
vigstr = "0.150000"
vigdef = "15.000000"
quality = "-1.000000"
ntsc_scale = "0.800000"
cust_fringing = "0.200000"
cust_artifacting = "0.200000"
SHARPEN = "2.000000"
CONTR = "0.250000"
DETAILS = "0.000000"
blendMode = "2.000000"
GAMMA_INPUT = "2.150000"
interm = "4.000000"
SIZEH = "50.000000"
SIGMA_H = "2.999999"
SIZEV = "50.000000"
SIGMA_V = "2.999999"
glow = "0.300000"
gamma_c = "1.300000"
brightboost = "1.000000"
brightboost1 = "1.225000"
gsl = "2.000000"
scans = "0.000000"
spike = "0.000000"
scangamma = "0.750001"
h_sharp = "1.400000"
s_sharp = "0.000000"
OS = "0.000000"
barspeed = "7.000000"
barintensity = "0.020000"
warpX = "0.030000"
warpY = "0.040000"
shadowMask = "8.000000"
maskstr = "0.500000"
mcut = "0.500000"
masksize = "2.000000"
mask_gamma = "5.000000"
mclip = "0.000000"
dctypex = "0.050000"
dctypey = "0.050000"
deconrr = "3.000000"
deconrb = "-3.000000"
deconrgy = "3.000000"
decons = "4.000000"
deconsmooth = "1.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"
The screenshots are nice but how does it look IRL?