I’m talking about anything greater than 720p, basically. You need either low res (480p or 240p) to get good natural scanlines (in 480p’s case, you’ll be helping them out with the interlacing shader) or higher res (the higher the better) to get good, dynamic artificial scanlines. 720p/1024x768 is in a sort of bad middle ground. 1080p looks better, but it’s still not quite enough to look really good. 1200p is better (5x) and 1440p is better still.
I used guest’s dr venom 2 in those screens. It doesnt darken my screen. I run it in 240p resolution.
When you run games in 240p a shader is not really needed. The only reason I use it is because I think 3d games looks better that way. Just to add some vertical lines over the black horizontal lines I have. Making it look more like a consumer tv than a bvm. Bassicly, if you have a crt, shaders are not needed for the scanline effect.
These images are not the best because the camera wont show exactly how it looks. But the game is rendered in 640x240 in all images. The first are without any shader. And the second are with a shader to alter the lines a bit.
There’s a problem when adding masks to a CRT because the CRT already has a mask and it winds up looking strange IMO, masks on top of masks. But the blurs and NTSC stuff can help give a high TVL monitor a more consumer feel if that’s what you’re after.
Basically, it looks bad and unnatural when you have single phosphors that are wider than they are tall (as seen in the above images). This is certainly not like how any CRT worked and it looks bad IMO.
Individual phosphors should be squarish or taller than they are wide. Never wider than they are tall.
Increasing the dark beam width could help ameliorate this somewhat.
I see. I don’t remember how my tv used to look like. Maybe I should just get another crt for those games.
There’s no substitute for an actual low TVL CRT. You might try this, though:
-scanline type 0
-mask type 7 (BW aperture; less interference with the CRT’s mask, maybe)
-increase phosphor width for chunky phosphors
-set mask low strength to around 0.30 and set mask strength to around 0.70
-play with beam width so that phosphors maintain a squarish shape and/or remain taller than they are wide
Gamma is still kinda driving me nuts, what with the six different gamma controls you have with GDV + grade. It’s very difficult to really get a handle on what’s going on. I’m pretty satisfied with the image otherwise (mask, scanlines, etc).
Can you share this preset ? ty.
I’ll try this natural scanlines method, don’t you need an old graphics card to get true 240p?
You need a CRT PC monitor and then create a custom 240p at 120hz mode. Done that many years ago with Powerstrip and a Radeon X700 on Windows XP. But the solution that hunterk suggested with interlacing.glsl at 480p should be the same.
Here you go, fiddled with gamma a bit, too. I think it’s better now(?)
Also be sure to enable Blargg’s NTSC filter and set it to “RGB”. It’s in the core options.
shaders = "11"
shader0 = "shaders_slang/misc/grade.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/crt-gdv-new/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/crt-gdv-new/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/crt-gdv-new/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/crt-gdv-new/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/crt-gdv-new/gaussian_horizontal.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "viewport"
scale_x5 = "0.500000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/crt-gdv-new/gaussian_vertical.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "GlowPass"
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "viewport"
scale_x6 = "0.500000"
scale_type_y6 = "viewport"
scale_y6 = "0.500000"
shader7 = "shaders_slang/crt/shaders/guest/crt-gdv-new/bloom_horizontal.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 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/crt-gdv-new/bloom_vertical.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = "BloomPass"
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/crt-gdv-new/crt-guest-dr-venom2.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/crt-gdv-new/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"
g_vignette = "0.000000"
wp_temperature = "8004.000000"
GAMMA_INPUT = "2.199999"
glow = "0.000000"
brightboost = "1.999999"
brightboost1 = "1.999999"
beam_min = "1.500000"
beam_size = "1.000000"
vertmask = "0.100000"
scans = "1.000000"
spike = "0.000000"
h_sharp = "3.000000"
s_sharp = "0.000000"
shadowMask = "7.000000"
maskstr = "0.700000"
masksize = "2.000000"
mcut = "0.300000"
mclip = "0.500000"
gamma_out = "2.500000"
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"
Thanks Darius and Hunter!
You can create a custom 240p resolution in windows with any new gpu. Some games I have noticed gets screwed up graphicly even if you set it at it’s native resolution. So this is what I do.
- Start the game.
- Go to setting / video / scaling.
- Let aspect ratio be at custom.
- Turn off integer scale, then on. Or just on.
Now you can see the games native res at width and height.
Set width to x2 and height to x1. Why you ask? Because I have discovered (and this is probably not new to many here) that if you run certain games at it’s native res and with width at x1, graphics, escpecially text, can get messed up. I dont know why. So i always run width at 2 times. Anyway, there is the resolution you should create for that game in nvidia control panel. For instance, every N64 game I have played is 320x240 so I run those games in 640x240 resolution.
I would recommend using an ultra-wide “super” res, like 1920 or 2560 or 3840 by 240/480 and then set the custom width to match. That will eliminate all visible horizontal scaling artifacts.
That is probably easier instead of having one res to every damn console
It does look better with Blargg’s filter enabled, however I see this as a limitation - only handful of emulators implemented this filter. Also what is a point of having grade and Blargg enabled at the same time - both of them used for gamma tinkering I presume ?!
Blargg’s filter does something to the image that grade alone doesn’t do, something to do with blur or scaling or some such.
I started a thread about it, but still haven’t gotten to the bottom of it. We need to figure out what Blargg’s RGB filter is doing, precisely, so it can be replicated via a shader. So far the topic hasn’t generated enough interest, though
Sometime a long time ago I have contacted Blargg as I wanted his RGB version of his filter to be ported to KEGA fusion. He told me -if I remember correctly- that he could provide me the source code or something and that I would have to compile it myself in order to create it. Here is the link to his site if you would like to contact him. I hope this helps!
We have the source already. It’s in each of the core repos that supports it and in the RetroArch video filter tree
This preset is now ready in the Mega Bezel, it’s in the Variations folder and it’s called
Max-Int-Scale__BASIC-EXTRA-PASSES.slangp
shaders = "11"
shader0 = "shaders_slang/misc/grade.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/crt-gdv-new/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/crt-gdv-new/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/crt-gdv-new/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/crt-gdv-new/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/crt-gdv-new/gaussian_horizontal.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "viewport"
scale_x5 = "0.500000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/crt-gdv-new/gaussian_vertical.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "GlowPass"
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "viewport"
scale_x6 = "0.500000"
scale_type_y6 = "viewport"
scale_y6 = "0.500000"
shader7 = "shaders_slang/crt/shaders/guest/crt-gdv-new/bloom_horizontal.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 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/crt-gdv-new/bloom_vertical.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = "BloomPass"
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/crt-gdv-new/crt-guest-dr-venom2.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/crt-gdv-new/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"
g_vignette = "0.000000"
wp_temperature = "8004.000000"
GAMMA_INPUT = "2.199999"
glow = "0.000000"
brightboost = "2.999999"
brightboost1 = "3.000000"
beam_min = "1.500000"
beam_size = "1.000000"
vertmask = "0.100000"
scans = "1.000000"
spike = "0.000000"
h_sharp = "1.000000"
s_sharp = "0.000000"
shadowMask = "6.000000"
maskstr = "0.700000"
mcut = "0.300000"
slotmask = "0.700000"
slotwidth = "3.000000"
mclip = "0.000000"
gamma_out = "2.500000"
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"