NTSC shaders redux

Also if I may suggest you give a shot to crt-geom-ntsc-sharp shader. It’s the sharpest out of the box shader I’ve tried and blends everything real nice.

3 Likes

Another potentially game changing possibility is if advanced users could have had access to the parameters of the Blargg NTSC Video Filters built into several cores instead of the rigid presets that we currently have which don’t look anything like the way my NES looked on my Commodore 1702 Monitor back in the day.

Just a tiny bit of fine tuning can bring those Blargg presets into the current century.

1 Like

Tried it but it doesn’t quite address the problem and has its own weird artifacts. I’m convinced that there is nothing that can be done short of an entirely new shader.

@Cyber

I gave guest+MAME a spin and I’m not seeing any obvious advantage compared to regular guest-ntsc. Do you have any ideas?

@hunterk Could you please move these posts to a new topic?

3 Likes

I was waiting for the split before responding but here goes. I have only read about this shader combination mainly through the works and diligence of @ynnad4 and @sonkun, who I would say have been much more passionate than I am about getting the rainbow effects right when it comes to Genesis transparencies.

I prefer a rainbow-less experience that does transparency well and that’s exactly what I’ve been able to achieve with my filter preset tweaks.

I think I could remember @sonkun expressing that there was an advantage in using that particular shader combination over the others in terms of accurately generating that particular effect, which is why I suggested probably lookin in that as well as their direction as we probably don’t need to reinvent the wheel with the amount of time and experience that they had already put into the matter.

I have gathered some of the useful posts which I think might be relevant in this regard and I’ll share them in a post if the topic is eventually split.

I’m a tinkerer but I don’t have much incentive to delve into that particular shader combination at this very moment since I’m kinda addicted to HSM Mega Bezel Reflection Shader. So much so that you can even call me a fanboy…lol

If I happen to get a chance someday, I might definitely give it a go but it’s not up there on my list of priorities.

Maybe if it can do a better job than the GTU or CRT-Guest-Advance-NTSC that are already integrated in HSM Mega Bezel Reflection Shader then that would make me much more motivated and inclined because I was recently trying to see if I could’ve added a nice composite effect to BSNES/HIGAN emulation and have had some limited success but there is still lots of room for improvement.

Anyway, I would like to get back on topic with much respect to the shader wizard himself @guest.r and one of his most significant partners in talent @HyperspaceMadness and all other Shader creators out there!

I’d say that I haven’t even scratched the surface of what could be done with CRT-Guest-Advance-NTSC if you count how much time I’ve spent trying to tweak it vs trying other solutions.

I can also argue that I probably didn’t need as much time with those solutions to start seeing results closer to what I was looking for as well but that could be just because of my lack of skill and experience and not have any bearing on the shader itself.

With advance tools requires advanced knowledge.

1 Like

You’re right, that mame_ntsc shader is the only one I’ve come across that gets the rainbow effect down correct, Youtuber Retro Crisis made a video showcasing my composite preset showing off that very effect on the Sonic waterfall:

I guess as a start if @Nesguy wants to try, he can start with the shader in the ntsc folder called “md rainbows” or something like that, it’s basically the mame_ntsc shader tweaked to give you that rainbow banding effect. There’s a couple ntsc parameters that can be tweaked there so that can be a start.

I personally like the mame_ntsc shader that’s located in the folder:

crt/shaders/mame_hlsl/shaders/old/shaders/mame_hlsl/shaders/mame_ntsc

There’s a parameter setting there called “Signal Offset” that not only gives off a smoother looking image but also gives off a slight flickering effect that has been turned off by default in all the newer mame_ntsc shaders. Only thing about that setting is that has this weird “twitch” effect where the screen “jumps” every few seconds. Some people may not like it but I don’t mind.

@hunterk I guess I replied right when you moved the topic lol. Please move my reply over there as well.

1 Like

@Nesguy

This is a list of some of the posts that I’ve read concerning the same MAME NTSC shader Mod as well as some other NTSC Shader talk using the Blargg Filter, which is another one you can try tinkering with. You can even use my custom filter presets as a starting point then add more or less of the things that might help you in your quest, for example more artifacts, higher or lower resolution, more or less sharpness.

I find its pretty decent in the way that it does things and a little goes a long way. I know we’ve already talked about trying to tweak those before.

One thing I would add is that there’s an inherent difference in the way the drawn phosphors and mask wires/metal looks in software form on a flat panel display vs the real CRT. Something like the black lines between each individual phosphor, this can have an effect on sharpness and contrast. That’s not present in the shaders. They display the RGB colours side by side with no black lines between individual phosphor colours as far as I can tell, at least for the slot masks.

Rainbow with composite - MOD preset for Sega Genesis Games

Custom preset para Blargg NTSC Mega Drive video compuesto

NTSC Shaders for SEGA Mega Drive / Genesis

New CRT shader from Guest + CRT Guest Advanced updates

Rainbow with composite - MOD preset for Sega Genesis Games

Custom preset para Blargg NTSC Mega Drive video compuesto

At least the rainbow effect seems possible. You can reproduce some funky color effects with the Mame shader. I’ve mostly used it for reproducing computer artifacting, there are some values known out there, e.g. for more accurate Apple II output I was asking at some point here. Would help if I would actually have a clue what all those parameters actually are though :smiley:

Most important seem to be scanline duration and the NTSC values A and B.

2 Likes

I see, I was able to produce that effect fairly easy on Ninja Gaiden on my composite preset simply by tweaking both “A Value” and “B Value” to 1.00 and making sure Signal Offset is on 0. So is it safe to say that that’s the official nes composite look as far as color artitifacting goes?

1 Like

The sidewalk/checkerboard rainbow should be ~45 degrees going down from left to right. See the pic in OP

4 Likes

So something more like this:

It’s not exactly 1 for 1 as the pic in OP but it’s a start I guess.

For anyone that wants to use my preset as starting point here you go:

shader0 = "shaders_slang/crt/shaders/tvout-tweaks.slang"
filter_linear0 = "true"
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/mame_hlsl/shaders/old/shaders/mame_hlsl/shaders/mame_ntsc.slang"
filter_linear1 = "true"
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/hd/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/grade/pre-shaders-afterglow-grade.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
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/hd/linearize-hd.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/hd/crt-guest-advanced-hd-pass1.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "Pass1"
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "viewport"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/hd/bloom_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/hd/bloom_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "BloomPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "absolute"
scale_y7 = "600"
shader8 = "shaders_slang/crt/shaders/guest/hd/crt-guest-advanced-hd-pass2.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "viewport"
scale_x8 = "1.000000"
scale_type_y8 = "viewport"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/hd/deconvergence-hd.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"
TVOUT_COMPOSITE_CONNECTION = "1.000000"
TVOUT_RESOLUTION_Y = "1024.000000"
TVOUT_RESOLUTION_I = "256.000000"
TVOUT_RESOLUTION_Q = "121.599998"
ntscsignal = "1.000000"
avalue = "0.750000"
bvalue = "0.000001"
scantime = "46.900085"
ifreqresponse = "1.750000"
qfreqresponse = "1.450000"
signaloffset = "0.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
g_cntrst = "-0.250000"
g_sat = "-0.030000"
g_lift = "-0.030000"
HSHARP = "0.000000"
spike = "1.500000"
warpX = "0.050000"
warpY = "0.070000"
csize = "0.035000"
glow = "0.200000"
bloom = "-0.800000"
bloom_dist = "0.400000"
halation = "-0.075000"
gamma_c = "1.250000"
brightboost = "1.000000"
brightboost1 = "1.200000"
beam_min = "2.199999"
beam_max = "0.950000"
beam_size = "0.000000"
scans = "0.050000"
scan_falloff = "0.200000"
shadowMask = "6.000000"
maskstr = "1.000000"
maskboost = "1.200000"
slotmask = "1.000000"
slotmask1 = "1.000000"
slotwidth = "3.000000"
double_slot = "2.000000"
smoothmask = "1.000000"
dctypex = "0.050000"
dctypey = "0.050000"
deconrr = "1.000000"
deconrb = "-1.000000"
deconrry = "1.000000"
deconrby = "-1.000000"
post_br = "1.150000"
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"

Maybe one of you can take it a step further from there.

4 Likes

I don’t remember TVs looking like that at the time… but I think we probably tuned that stuff out after a while. :smile:

1 Like

I agree and I doubt it was due to any tuning out. Remember there was not just one type of image that all TVs displayed. There were a wide variety.

1 Like

The first TV I played a NES on was a black and white, I want to say, 13 inch, make unknown… so I’m probably not qualified to say. :grin:

I was thrilled to get a 17" Montgomery Ward color TV not long after this, though. It was one of those that you twisted the volume knob until it clicked to turn it on. lol

1 Like

I guess there should be a reasonable deal of estimated tolerance when comparing photos of actual crt displays with a shader screenshot. I, on my side, see that themaister’s ntsc shaders are designed on good basis and well throughthought.

Is there a reason for a better implementation? I belive there always is, but the catch is consoles were doing their part, cables/connectors another (with possible signal degradations) and the crt tv their share. Putting all this into a single ‘ntsc/pal’ bundle could be a challange indeed, with an increased deal of nitpickying. But i don’t mind and always approve good work. :smiley:

Here is a comparison crt vs shader:

crt photo:

shader screenies:

different color pallete:

6 Likes

This is interesting stuff here, I’ve been so focused on just the Genesis dithering and transparencies that I never really took the time to see how the other 8/16 bit systems run through NTSC. Since nes produces a different rainbow effect can the same be said for other systems like snes, turbo graphs, master system etc? If so this gives me an idea to make separate presets specifically for each system. I may have to start doing research on all of this.

3 Likes

It is well documented that there is variance among the different consoles’ video output circuitry.

NES Composite Video output is not the same as Sega Genesis, SNES or PC Engine. Even among different models of Sega Genesis there can be differences in appearance and behavior of both audio and video output.

That’s what I have attempted to do using my Custom Blargg NTSC Video Filter presets. Only yesterday when I was trying to respond to @Nesguy I realized that @Juandiegous had the same idea of using the Blargg NTSC filter presets to simulate different console’s outputs and using the CRT Shader to more or less simulate different TVs.

That’s why I created separate tweaks for each system. I remember NES as being very sharp and clean in Composite, the same could be said about the Turbo Grafx 16. I remember SNES being a bit more soft/smooth around the edges, probably due to the low resolution combined with the image being stretched to fit 4:3 thus changing the shape of the pixels as well as the use of its vast colour palette to do wonderful melding on the edges of the graphics.

So far I’ve been able to get the sharp SNES look without the Blargg NTSC Filters, which probably looks more like S-Video than Composite if my memory serves me correctly but when I’ve tried to do composite with artifacts, games that can handle a softer, blended/filtered look, look beautiful, but when I turn on the Super Mario World title screen (and other games which are more line art focused with lots of solid colours), I can see the blur or other weirdness in the title text, especially when viewed from a distance.

My latest SNES Composite Preset aims to address this so it can be used with all games without producing that blur while still having a more subtle NTSC effect.

So far, I think it works well in a variety of games I’ve tried.

I never seem to stop tweaking my presets though. Although, I hardly touch my Arcade and NES presets and I was pretty satisfied with my Turbo Duo Presets, sometimes there’s always something in the back of my mind that I think shouldn’t be there, looks a bit strange or needs improving.

Then I go to work, overhauling, sometimes get the improvements and then experiment with porting the improvements even to my other presets which I’ve previously been satisfied with.

This is why my latest pack has a new CyberLab_Genesis_Composite_Slot_Mask_IV_OLED_for_CyberLab_or_Core_Blargg_Composite_or_Video_Filter_III.slangp

I’m not ready to abandon the previous “look” since the real testing tends to take place after I make my new presets, release them into the wild and play with them over an extended period.

Trust me, when I say, I do a quite a bit of pixel watching.

In my latest Genesis preset I’ve also brightened and desaturated things a bit making it a bit easier on the eyes (which are my primary judge before I do any sort of comparisons). I’m more into reversing and reengineering the final output experience to my liking as opposed to trying to match particular TV sets. Which I also sometimes compare my presets to for reference and guidance, usually in a casual manner because I’m not aiming for nor do I expect to get an identical 1:1 match. Once it does what I think I want done to the pixels and artwork and is pleasing to my eyes, I’m satisfied.

No screenshots yet, pretty soon, but looking at and testing my new Genesis Preset I was really amazed at how clear and sharp the edges of the sprites and backgrounds looked and the level of detail that could be resolved while that Blargg_NTSC_Genesis_Composite_CyberLab_Special_Edition (or Blargg_NTSC_Genesis_S-Video_CyberLab_Special_Edition) video filter preset appeared to effortlessly filter the dithering.

It’s amazing how far I’ve (I previously thought “we” but don’t want to speak for anyone else and inadvertently rub anyone the wrong way) come from relying on great but inherently challenged de-dithering algorithms and on making blurry presets just for the sake of blending dithering to the clear, focused, easy on the eyes presets that I think our old CRTs must be looking at us from heaven feeling proud that their legacy will be safe with software preservation.

Right click on the image, click Open in New Tab then press F11 for Fullscreen for 4K users. Zoom in until it looks right for 1440p or 1080p users.

2 Likes

I hear you man, I always saw your specific system presets and now I have a better understanding on why they exist. If I get into specific system ntsc composite presets the main difference between me and yours would be that I will not use any kind of Blargg filtering, all filtering will be done by the shader alone.

As you may already know my aim is to “set it and forget it” so gamers can load the shader up and just jump right into the game. I believe that mame ntsc shader is the answer to make all kinds of different system presets as we’ve just seen with nes.

The first thing I would probably start with is finding pics of all the old systems using real hardware that shows off the color artifacting/rainbow banding and match that first, from there it’s a matter of tweaking sharpness, blur, color palettes etc. This could be an interesting project and bring my preset pack to a new level if done right.

2 Likes

This can also be done using the Blargg Filter Presets. It’s basically a one time set it and forget it per core. Then users can switch shader presets on the fly.

If moods change or if another user has a different preference, They can swap the filter presets then save a core override again and the filter auto loads with the core. If using a Core Provided Filter Preset there’s no need to save anything as changes are persistent.

Not trying to encourage this method instead of the shader only method, just trying to show that’s it’s not really complicated to use both shaders and filters at the same time especially when it’s prefabbed and prepackaged the way I try to present things, which is the way I use them myself.

That’s why I use long, descriptive filenames. They might seem unorthodox but if a user is inclined to read the shader preset filenames, they will tell them exactly which video filter presets they should use them with in order to get the intended effect.

So it’s like the filenames themselves are dox.

2 Likes

Most definitely, since that’s been working for users that’s been using your presets then I say keep the ball rolling, I guess my method is a even more simplified way, I don’t want anyone to have to load up any extra filters at all or have to turn up back lights on tvs or anything extra besides just loading the shader itself, that’s why I tweak brightness levels and all that jazz so that it (should) look good to a new user right out the box.

That would also be my aim if I start making system specific presets, I’ll most likely have it similar to the way they currently look but then add extra folders like let’s say:

1080p/composite/system folder names

In the composite folder will be more folders for all the old systems like nes, snes, genesis etc. Then a user can pick the system they like and just load it up and be good to go.

2 Likes

Just saying this for the record so that no one has the wrong impression if it was somehow implied.

My preset pack has many different preset variations. Some are intended to be used with Blargg Filters while a significant number are not. My “Genesis Sharp” and “Blending and Transparency” presets use MDAPT for dedithering for example. Those descriptive names are intended to make it easier for users to identify and experience the benefits of MDAPT even if they don’t have a clue that MDAPT is an acronym for “Merge Dithering and Psuedo Transparency”.

Also, none of my presets should require users to tweak backlights or TV settings and should work out of the box as well just like yours do.

If you find the screenshots that I post look a little dark, that’s just how full strength mask and scanlines presets look when scaled down. That’s why I put notes suggesting that users view them full screen or zoomed in so that they won’t get the wrong impression and think the presets look that dark in practice. Nowhere in my documentation do I ask users to adjust their sets, but I know that there are other community offerings which might require things like that to be done.

I also strive for ease of use and simplicity. At some point I might want to trim things down a bit and maybe have some more subfolders for better organization. I’ve thought of grouping them by mask type for example but I really don’t want users to have to understand what a mask type is in order to choose the type of preset they’re looking for. I could also group by console as now each console in my Console Specific Presets folder now has it’s own family of presets but for now, I’ll probably just continue to highlight to users the presets that I’m currently using or might work well for the different systems I emulate in a list of recommendations.

The last one I did is long overdue for an update.

1 Like