Hello retrogamers,
I’ve been working on a shader to specifically process those strange vertical lines (sometimes checkerboard patterns) used in sega genesis games to produce what’s called “pseudo transparencies”.
As you know, there are already many solutions available, from ntsc composite and GTU shaders to advanced ones like gdapt/mdapt. It’s very hard to produce a perfect solution, so it’s good to have options. Each one of the solutions have its pros and cons. Some of them can degrade or blurry the image too much and others can be sharp as you want, though it may present stray pixels more easily.
Then, what’s new in SGENPT-MIX? It was firstly based on jinc shaders, then it took its own path. It performs a non-linear operation over the image and cancels those vertical lines without destructing too much the rest of the frame. I think it’s a good balance between sharpness and overall image consistency (I define it as the seamless transition between pixel areas, from transparency to non-transparency regions). I’m still making tests, but I think the results are already good enough for a first release. So you can test and point its flaws. It’s not perfect, BTW, though I think it gives a consistent result and stray pixels are hard to spot.
It’s intended only for games that use this effect as you pay some IQ price for the transparency effect. Most genesis games benefit from it. And even other platforms like arcade games that use dithering (SNK and Capcom arcade games, for example.)
Sgenpt-mix is a very fast shader and must run at 1x scale as the first pass. It’s very easy to use, for now it has only three parameters where you can choose sharpness (0.0 to 1.0), blend mode options (OFF=0.0, VL+CB=1.0 (default), Only VL=2.0 and Only CB=3.0) and Blend Level (BL), where you adjust the level of dithering/pseudo transparencies blending. After that first pass, you can add any other shader you like to upscale the image (I recommend some crt shader of your preference) to your screen size.
At Blend Level 1.0, it blends all transparencies 100%. At level 0.0 it blends the minimum. Minimum is different from doing nothing. On reality, on minimum level it’ll blend 100% very soft dithering (low contrast). I think that at level 0.0 the Genesis games look great even if they don’t have any dithering. I recommend using BL=0.0 for most games and for the ones with high contrast dithering, use BL=0.8~1.0.
Unzip and put the contents inside your dithering folder.
New release: sgenpt-mix-v10
- Added negative lobe to get a sharper visual while keeping transparencies.
- New param to Fine Tunning the blending.
Here’s a preset I made combining this later sgenpt-mix with my latest crt-hyllian-sinc:
shaders = "4"
feedback_pass = "0"
shader0 = "shaders_slang/dithering/shaders/sgenpt-mix.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/0-hspack/1080p/aperture-grille/hyllian/shaders/support/multiLUT-modified.slang"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
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/0-hspack/1080p/aperture-grille/hyllian/shaders/crt-hyllian-sinc-pass0.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
float_framebuffer2 = "false"
srgb_framebuffer2 = "true"
scale_type_x2 = "viewport"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "shaders_slang/0-hspack/1080p/aperture-grille/hyllian/shaders/crt-hyllian-pass1.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_edge"
mipmap_input3 = "false"
alias3 = ""
float_framebuffer3 = "false"
srgb_framebuffer3 = "true"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "viewport"
scale_y3 = "1.000000"
SGPT_BLEND_LEVEL = "1.000000"
LUT_selector_param = "2.000000"
PHOSPHOR_LAYOUT = "2.000000"
BRIGHTBOOST = "1.500000"
CURVATURE = "1.000000"
textures = "SamplerLUT1;SamplerLUT2"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/0-hspack/1080p/aperture-grille/hyllian/shaders/support/LUT/some-grade.png"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
If you don’t know where to get those crt shaders, see this thread. Or just open any crt shader and prepend this sgenpt-mix to see immediate results in dithering.