downsaple parameter can be set to 2.0, for x-scaling see Screen parameters section.
I can confirm it works flawlessly! (with xbr scale2x so far) Please do consider adding the same support to the fast/fastest preset.
downsaple parameter can be set to 2.0, for x-scaling see Screen parameters section.
I can confirm it works flawlessly! (with xbr scale2x so far) Please do consider adding the same support to the fast/fastest preset.
I managed to get this result, it should be quite bright even on bad screens.
shaders = "11"
shader0 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = "StockPass"
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/afterglow0.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "AfterglowPass"
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/pre-shaders-afterglow.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "PrePass"
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/avg-lum.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "AvgLumPass"
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/linearize.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = "LinearizePass"
float_framebuffer4 = "true"
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/gaussian_horizontal.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "absolute"
scale_x5 = "800"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "GlowPass"
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "absolute"
scale_x6 = "800"
scale_type_y6 = "absolute"
scale_y6 = "600"
shader7 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
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_vertical.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = "BloomPass"
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/crt-guest-advanced.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "viewport"
scale_x9 = "1.000000"
scale_type_y9 = "viewport"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
LUTLOW = "0.000000"
CP = "-1.000000"
GAMMA_INPUT = "2.200000"
inter = "225.000000"
interm = "4.000000"
iscan = "0.000000"
SIZEH = "50.000000"
SIGMA_H = "1.300000"
SIZEV = "50.000000"
SIGMA_V = "1.000000"
SIZEHB = "1.000000"
SIGMA_HB = "0.050000"
SIZEVB = "1.000000"
SIGMA_VB = "0.050000"
bloom = "1.000000"
brightboost = "1.000000"
brightboost1 = "1.000000"
gsl = "2.000000"
scanline1 = "0.000000"
scanline2 = "40.000000"
beam_min = "0.500000"
beam_max = "1.200000"
beam_size = "0.000000"
scans = "0.000000"
spike = "0.000000"
h_sharp = "15.000000"
s_sharp = "0.000000"
ei_limit = "1.000000"
sth = "0.000000"
bsize = "700.000000"
shadowMask = "-1.000000"
maskstr = "1.000000"
maskDark = "0.000000"
maskLight = "1.000000"
mcut = "1.000000"
mask_gamma = "2.200000"
slotmask = "1.000000"
slotwidth = "1.000000"
mclip = "0.000000"
gamma_out = "2.200000"
decons = "0.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/lut/custom_lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
I wouldn’t recommend using that on anything 480i or higher without downscaling.
Even a small amount of Bloom will destroy mid-tones, especially skin tones.
Bright Boost Dark Pixels is your friend.
Edit: Actually, at those gamma levels, Bright Boost Dark is not your friend.
Thanks @ProfessorBraun. I don’t think it was the centerpiece of your work, but I did manage learn something from it.
You’re welcome. I’m glad I was able to help.
I’m wondering with the downscaling options if it would be good to have an option which would downscale with integer steps to around 240p, because there are a few resolutions which scale down to 224p for instance.
So if you had something that tried to choose an exact resolution multiple of the original resolution which would bring you to something between 200p - 260p or something like that then you would get the optimal downscaling.
For instance if you downscale MVC2 I think the original resolution is 448p, so if you downscale it to 240p it isn’t an exact multiple, whereas if you downscaled to 224p then you get an exact division.
I know that the other downscaling options give you a direct amount of downscaling, e.g. 2, 4 etc, but the option to try to bring it to 240p specifically is quite nice, I just was hoping to get it to divide evenly if possible and also target something close to 240p, so if the core is outputting 448p or 896p you would still get 224p.
This shot looks sexy, can you share preset ?
unfortunately, I had to backtrack a bit on what I thought I had leaned.
I’m trying to rework My brightness settings. I thought I had recieved a reminder about how to work with gamma setting closer to default. The setup with 3.50 gamma I was trying to work away from, however, was just too pristine.
I haven’t quite returned to the old setup either though. I find working with lower gamma settings requires me to lower Bright Boost Bright to something below 1.00. This can result in a somewhat gelatinous appearence, but maybe thats preferable to over amplified “glow aura”,
Sure. The sharpness value I used is really high (12.5) and it looks pretty good if you are 3+ feet away from the monitor. If you are sitting right in front of your monitor, you might want to revert it back to the default value at 5.
shaders = “12” shader0 = “shaders_slang/xbr/shaders/xbr-hybrid/2xbr-hybrid-v5-gamma.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 = “2.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 = “false” 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 = “false” 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” AS = “0.000000” WP = “-35.000000” wp_saturation = “1.050000” glow = “0.000000” bloom = “0.350000” brightboost = “6.000000” brightboost1 = “3.000000” scanline1 = “15.000000” scanline2 = “3.000000” beam_min = “2.500000” beam_max = “1.350000” beam_size = “0.050000” vertmask = “-1.000000” scans = “1.000000” spike = “0.000000” h_sharp = “12.500000” s_sharp = “1.000000” IOS = “3.000000” prescalex = “2.000000” shadowMask = “5.000000” maskstr = “0.000000” maskDark = “1.000000” maskLight = “2.000000” mcut = “1.500000” slotmask = “0.250000” deconrr = “1.000000” deconrb = “-1.000000” decons = “0.600000” textures = “SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4” SamplerLUT1 = “shaders_slang/crt/shaders/guest/lut/sony_trinitron1.png” SamplerLUT1_linear = “true” SamplerLUT1_wrap_mode = “clamp_to_border” SamplerLUT1_mipmap = “false” SamplerLUT2 = “shaders_slang/crt/shaders/guest/lut/sony_trinitron2.png” SamplerLUT2_linear = “true” SamplerLUT2_wrap_mode = “clamp_to_border” SamplerLUT2_mipmap = “false” SamplerLUT3 = “shaders_slang/crt/shaders/guest/lut/other1.png” SamplerLUT3_linear = “true” SamplerLUT3_wrap_mode = “clamp_to_border” SamplerLUT3_mipmap = “false” SamplerLUT4 = “shaders_slang/crt/shaders/guest/lut/custom_lut.png” SamplerLUT4_linear = “true” SamplerLUT4_wrap_mode = “clamp_to_border” SamplerLUT4_mipmap = “false”
I’m adding these pre-scaling features to the fast version (already running), fastest is sort of special.
This should be doable, but would require 2 parameters and complicate the coding to a degree. There was an unused parameter spot at 0.5 which i used for 224p, should help a bit. Otherwise the internal resolution ‘divider’ is quite useful and should be fine with most content, especially with dynamic resolution content.
Great, thanks! That’s a great compromise!
New Release Version (14.02.2021-r1):
Notable changes:
Download link:
https://mega.nz/file/54Ak3B4B#JMcCjYrRT5Yg2cotn80lSnEp-oXNZGL0jKUm6K3RFr0
Is the “scanline mode” for 240p too? And 448, 480, 512?
There are two pure scanline modes now, 224p and 240p, which always project to these vertical resolutions (param values 0.5 and 1.0). When increasing the parameter, the resolution gets divided by the parameter value, so you can have 256p with 512 for example with parameter value 2.0 (512/2 = 256). Plenty of options here, but it’s nice to regard the internal resolution scale with some emulators and use the appropriate parameter value.
Recently I’ve been using images of actual CRTs as reference material.
I’d appreciate it if you could separate glow and halation in the NTSC version as you did in the normal version.
do you have any of the images you are using to share?
Just some images easily found in a search. None of them are my own, of course.
I was primarily going off the top one earlier this day, I’m now working primarily with the bottom one.
My -1 save state for Megaman X is identical to the top image. Oh, the conveniences 2d games.
Edit: Actually the top one has been the primary supplement to my memory for a while now, but it seems to have some sort of camera effect going on.
The bottom one has a certain shapeliness to its scanlines, and the space between isn’t too thick either. I don’t think the shader can quite pull off that shapeliness, but I think I’m working in the right direction.
I’ve just been using these two for scanline shape, I wouldn’t recommend them for color calibration. That deconvergence with red on top is interesting though.
And, oh yeah, I’ve also been 2600 images to work on the glow. The primary image for that seems to be too big for the forum.
You can achieve the effect using the following shader pass:
Been using the “scanline saturation” parameter, but noticed a side-effect of using this.
The thing is that with increasing “scanline saturation” the shader makes saturated scanlines thinner, but it does NOT affect the thickness of white and grays (unsaturated colors).
This creates a discontinuity, i.e. visible stepped increase, in the beamshape when whites and grays are mixed with more saturated colors and the scanline saturation parameter is increased. See the example below.
Is there a possibility to move the “scanline saturation” function after the function that does the beamshape, such that it no longer has the side effect of changing scanline thickness in this “unbalanced” way?
(It would also be more transparent as it would no longer interfere with the separate parameters “Scanline Shape Dark Pixels” and “Scanline Shape Bright Pixels” that handle the scanline thickness seperately)
You can compensate with difference between dark and bright pixel scanline shapes.
Scanline saturation does what it should, the bonus is it’s adjustable. I already wrote about this that beam dynamics is a characteristic of scanline implemetation. The good side is you have plenty of settings and even quite even scanlines (see images above).
Thanks for pointing out that pass to me, I’ll see what I can do with it.
However, the shapeliness I was referring to wasn’t the jaggedness. It was in regards mostly to the short taper when a scanline has a black pixel, and how bright scanlines seem to lie directly on top of each other while remaining relatively thin. When I run it through my head it seems geometrically impossible to pull that off while maintaining the same aspect ratio (which is actually somewhat stretched on that television).
I find that scanline saturation helps accomplish some of that shapeliness, but because it throughs off my oh-so-precious midtones I keep it at zero. Admittedly though, I’ve yet to try desaturating the whole image to compensate.
It also wouldn’t be right of me to post a preset with a dependency that doesn’t seem to have an agreed-upon file name.