Welcome to the forum! I really enjoy your blog and shader comparisons!
Looking at the svideo shader preset, my first guess is that it is the Gdapt passes giving a false positive on the repeating vertical lines in the logo and blending them.
Welcome to the forum! I really enjoy your blog and shader comparisons!
Looking at the svideo shader preset, my first guess is that it is the Gdapt passes giving a false positive on the repeating vertical lines in the logo and blending them.
Yup, it’s more than likely what hyperspace said. I added gdapt into the s-video presets cause I liked that one the best out of the other dithering shader options but I’m also aware that shader sometimes give false positives. I may have to look into the s video presets next and find the best dithering shader option to use
Yeah, you may want to check out Hyllian’s checkerboard dedither, it does a really great job, it’s 3 passes.
It doesn’t address vertical lines, but my experience has been that as soon as you are looking for a solution to the vertical lines situations like the above can occur.
Thank you. I also enjoy this forum and all your guys postings. Reading here for a while and finally was forced to create an account. As for the Shader, I am curious if this can be solved by user settings in the Shader parameters. But it is not a big deal. I only managed to see it because I am cropping it systematically and after a few games, this is the only place I noticed.
I tell you what, I’m at work right now and won’t be home for another 6 hours or so, if you want to put your article on hold for a few hours then soon as I get home I’m going to find a suitable replacement for gdapt so that that logo shows properly and post up a new shader pack update. You’ve been helping me all week on the reddit forums to shape up my presets to what they are now and it looks like this is yet another another step to perfect my presets.
@HyperspaceMadness I want a dithering shader that take up at least 2 passes to replace the first two available stock passes on the guest advanced ntsc shader. Soon as I get home I’m gonna get right on this, wanna make sure I give @thingsiplay a good product for his article.
Well in a case like this you can probably use Hyllian Checkerboard to address the checkerboard and you can use my Blargg_NTSC_Genesis_Composite_CyberLab_Special_Edition.filt aka Blargg_SNES_Custom_Psuedo_MD_Composite.filt or Blargg_NTSC_Genesis_S-Video_CyberLab_Special_Edition.filt aka Blargg_SNES_Custom_Psuedo_MD_S-Video.filt video filter presets to address the vertical lines as a sort of hybrid solution.
It sounds crazy but it just might work!
Lol thank you but I’m trying to avoid any blargg video filters and just have the shaders do all the work, after all my end game is to just load the shaders up, set it and forget it so that it’s easy for all end users.
I’ll just head into the dithering folder later and play around with what’s there until something sticks. Maybe that sgenpt-mix shader but I’ll see
Many different dithering patterns were used during 8/16bit era. The most common pattern present in these games is known as checkerboard dithering, which as the name suggests, is basically an alternating color pixel pattern vertically and horizontally.
Another pattern present mainly in genesis games are the only vertical lines dithering. These patterns are blended by the analog crt display and ntsc/pal systems along the analog cable (composite) used to transmit the signal between the console and display.
Now, back to the shaders, it’s important to state that checkerboard dithering is easier to detect than vertical lines. For the latter, only the ntsc shaders/filters set to composite can perform a complete filtering of vertical lines without adding erratic artifacts (it adds some known artifacts as color bleeding and blurring, but not erratic artifacts).
Important: if you are using a ntsc-composite shader, you don’t need other dedither shader.
For Checkerboard Dithering some good shaders are: checkerboard-dedither, mdapt, jinc2-dedither.
For Vertical Lines, I recommend: mdapt, sgenpt-mix.
Yeah totally agree, sgenpt-mix is one that can deal with the most extreme examples, here’s a little experiment I did
No De-Dither
Sgenpt with some high strength
So either mdapt or sgenpt-mix, got it. I can’t wait to get home and put out this update, this should be the final major issue for now for a while. The composite and rgb presets are good to go it seems, it’s just s-video that needs a little love. I’m on it guys
Use them only if the game presents vertical lines dithering. The Sony screenshot doesn’t!
Hmm, maybe I need to be home to go more in depth into this. So you’re saying it’s not good to use them as an all around shader? Once I add it to the pass I intend to just leave it there. I need to hurry up and finish this shift so I can test this all out
That’s it. You probably need an special preset just to use Vertical Lines dedither, because only a few games need it and justify the artifacts it creates. A more general preset should use only a checkerboard dedither, which is much more artifacts free.
Exactly this,
I think the best all around thing which won’t cause problematic things like the Sony logo is the hyllian checkerboard.
Ok I’m home now and ready to play. So you’re saying I should skip mdapt and sgenpt-mix and just go with the checkerboard dedither shader? Main reason I added gdapt in was for Sega Saturn. I know games on that system didn’t handle dithering properly but I wanted to eliminate that issue with a dithering shader pass.
The next issue is going about adding that into the CRT-guest-advanced-ntsc shader chain and then I’m good to go. If I remember correctly in the past, after guest updated his advanced shader I was unable to add any additional passes to the chain or the whole shader will fail to load.
Is it possible to get a single pass version of that checkerboard dedither shader? Or two pass version that way I can just squeeze it into the first two passes where the stock shaders are? If not I’ll try to get it added in another way
Yeah, that would be my suggestion
Yeah, the checkerboard by Hyllian works very well on the saturn dithering, he did a fair amount of testing specifically on saturn.
Yeah, it’s 3 passes and I think it’s unlikely it will change from 3 passes.
The chain was probably failing because there was alias which needed to be shifted to another pass.
I see, then I’ll have to get that added into the mix with all the passes. I was trying to avoid adding additional passes to keep the overall shader from getting heavy but I have no choice it seems. Before I try out the checkerboard dithering shader I’m already tweaking around with sgenpt-mix, I’m confused by the number of the settings but I’m taking a wild guess that the setting that says “2.CB” is the one that deals with checkerboard dedither itself?
I already whipped up a shader preset using sgenpt-mix for you all to try out in the meantime and tested it on Snatcher. The Sony logo looks normal again with that as well.
shaders = "18"
shader0 = "shaders_slang/stock.slang"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
shader1 = "shaders_slang/dithering/shaders/sgenpt-mix.slang"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "StockPass"
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
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/grade/pre-shaders-afterglow-grade.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 = "640"
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 = "640"
scale_type_y13 = "absolute"
scale_y13 = "480"
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 = "640"
scale_type_y14 = "absolute"
scale_y14 = "480"
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 = "640"
scale_type_y15 = "absolute"
scale_y15 = "480"
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"
SGPT_BLEND_OPTION = "2.000000"
SGPT_LINEAR_GAMMA = "0.000000"
g_crtgamut = "1.000000"
g_vignette = "0.000000"
g_cntrst = "0.400000"
wp_temperature = "9304.000000"
g_lift = "-0.030000"
quality = "0.000000"
ntsc_scale = "2.250000"
ntsc_sharp = "-10.000000"
ntsc_shape = "1.000000"
blendMode = "0.000000"
CSHARPEN = "2.000000"
CCONTR = "0.000000"
S_SHARP = "1.500000"
SIGMA_VB = "0.750000"
bloom = "-0.500000"
mask_bloom = "0.200000"
bloom_dist = "0.200000"
halation = "0.100000"
gamma_c = "1.360000"
brightboost1 = "1.000000"
gsl = "-1.000000"
warpX = "0.050000"
warpY = "0.070000"
csize = "0.080000"
bsize1 = "0.300000"
shadowMask = "6.000000"
maskstr = "1.000000"
slotmask = "1.000000"
slotmask1 = "1.000000"
slotwidth = "3.000000"
double_slot = "2.000000"
mclip = "0.350000"
gamma_out = "2.000000"
deconrry = "0.750000"
deconrby = "-0.750000"
decons = "1.500000"
post_br = "1.100000"
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"
@thingsiplay what you think of those settings?
@Hyllian and @HyperspaceMadness how would you go about adding in those 3 checkerboard passes to the guest advanced ntsc shader, I guess they’ll be the first 3 at the top of the chain? Does that “linearize” pass need to be in the mix or can I discard that?
@guest.r is it possible to add the checkerboard dedither shader to your crt guest advanced ntsc shader? I tried to put them together just now and it failed. It’s a 4 pass shader chain that I’d like to add to the top of the chain.
I just quickly tested this new test preset on the variety of games I am testing. It looks great so far. But that is all I can comment for now, because I am not very knowledgeable about the various Shader settings. Still learning some basics here and mostly read your discussions. I’m more testing and compare on the end result from user perspective.
It’s posible, but you have to increase to number of passes and then re-number basically all of the passes in the chain.
2-phase ntsc filtering with ntsc adaptive sharpness can resolve dithering quite well, while keeping the ‘rainbow effect’. Like if it can resolve the ‘sonic waterfall’, it can do all the other dithering stuff to with same settings.
Checkboard dedither would allow a sharper setup though.
Yeah I’m aiming for a sharper look so I want to try out the checkerboard dedither method. Ok so I’m going to try it out, before I do will it be a problem if I discard the first two stock passes of your shader or do those stock passes need to remain there no matter what while I just add the other 4 dithering shader passes above it?