A new little shader i did (glsl)

Terrible :smile: I’ve never seen composite looking good on any LCD, but S-Video and RGB can look good on 480p LCDs when there is decent scaling.

2 Likes

It’s very acceptable if used on CRT though, some games look better example some heavy dithering ones. Don’t forget pal is ntsc version 2.0, improved after 30 years of experience etc. Imagine how bad ntsc would look like on an lcd :joy:

2 Likes

Yes, PAL tends to be the cleaner signal.BTW, do you still have your Wii? If so, have you compared it’s Composite to the Amiga’s?

I have it but thrown the composite cable and replaced with RGB. If I remember well is a bit blurrier than the Amiga. Both are desaturated compared to rgb

Do you have a custom cable? All the SCART ones I have seen are either Composite only or both RGB and Composite, so it’s possible to switch seamlessly.

No that is RGB, with resistance inside to switch to rgb etc. It’s not composite scart. Everything has it’s separate cable inside scart.

Wrote my own ntsc from scratch this time without any “copy code” from anywhere, i have been too familiar after all this time tweaking all these ntsc lol, that’s probably the simplest that could be to pass a single signal (composite) containing all info and demodulate it with an FIR Gaussian pass. crt-geom-mini on top of it on sonic, fake-crt-geom on others

s-video (separate luma chroma)

composite (send all as 1 signal)

4 Likes

Added a “rainbow” effect, it simply creates itself by altering the “carrier frequency” :stuck_out_tongue:

Things to do:

Fix the weird/bland/shifted colors a bit,

Add a Y-I-Q band limiter on modulate stage (?) as it should do in real life (?) at least that’s what emmir told me when i was tweaking his shader

Make another preset that contains the whole package, namely hue shift, artifact/fringing controls etc (?)

2 Likes

I’ve seen (quickly) you opted for a 2 pass strategy, but it seems they could be merged in one if I’ve not overlooked something (?)

It could but it should be doing all 1st pass on each texture read of 2nd pass, slower i guess.

Yes, this is true, but the first pass itself is quite light!

Maybe it is worth, maybe not!

1 Like

For the moment it’s easier to tweak things and more readable this way.

1 Like

Just an experiment on a Hanning window function instead of Gaussian to filter the “subcarrier” frequency pattern. That looks sharper in some cases and faster. This is the C64 version

I’ve to thank you for this; by following the advice I was able to switch the other way, from rainbow to proper 45ish degree with ease!

2 Likes

You are building an ntsc too? Yeah i believe 45 degrees is the proper one too. That diagonal thing anyway

Yeah, I first started trying studying the underlying theory, but a full/proper emulation was too heavy, so I ended up in implementing my own bandlimited based blur and modified a fast implementation by xot I found on shadertoy just to generate artifacts; at least vertical rainbowing one:
https://www.shadertoy.com/view/Mdffz7

Next step was to create a smoothed artifact “mask” by recalculating on the fly the artifacts themselves with a “shifted” phase to selectively blur them (for “the damn waterfall” purposes).

It has been that way for a year or so, then thanks to you I realized that the carrier itself had to take both dimensions into account.

What I wonder right now is the horizontal size of artifacts. Do you think it could it be less than one “core” pixel? At first I didn’t think so, so my artifact pass works at 1x core resolution, and smoothed afterwards.

1 Like

I guess you would have to use vtexcoord.x*OutputSize.x instead of SourceSize.x to control the size :wink: SourceSize would pick one core pixel always, only if you would add a pass before that scales the texture twice but then probably you would loose the dither blend.

Point is that my sourcesize and outputsize are the same, it is the first pass and scales to 1x.

add another pass that scales twice x axis and play with PI, eg PI/2 means every 90 deg. meaning 1 every 4 pixels. PI means 180 deg, so 1 of 2 etc. I use PI*2.0/3.0 on that speedy shaders to draw one line every 3rd as a mask (120 deg)

1 Like

I can certainly do that, but i’m not sure it is needed.

My thinking when i choose to use 1x scaling was that if there were techniques exploiting ntsc errors to create new colors (see the shader in the link / apple2 - edit - this one too), then the artifact had to be at least one “source/core-native pixel” wide.

Problem is that not every hardware implementation is the same.