Koko-aio shader discussions and updates

Hello again bud. Please dont give up on the Noise department. It really gives a better boost for RF presets even further. This effect is so little explored through the long list of shaders.

2 Likes

I agree. It would also help us make a new workaround for the legendary glcore flipping.

1 Like

That’s my fault. Retroarch exposes the rotation correctly since some release, so I should have what I need to fix that internally.’

…however this cannot be fixed by the shader, but you already have the needed tools to flip the shades.

Indeed I’m using a lut to identify the screen sides, it’s under textures/side_shade-helper.png

You can use wildcards to rotate/flip it (include a rotated lut in the slangp), shader will react.

Normally green identifies the left/right, blue up, red down.

(Rethinking to that, the lut can be (ab)used to drive the shades strenght too…)

To recap, I’d take care of 270deg rotation, while for retroarch bugs, a workaround via wildcards will be needed.

ahah. :upside_down_face:

1 Like

I just pushed some changes.

  • Corrected reflection area shade placements for 270 deg. rotated titles,
    so pacman and friends should be fine now.

  • Spot: corrected spot placament for 90 and 270 rotated titles,
    so spot position should be consistent across 90 and 270 rotated titles.
    If you used to correct that by wildcards trick, you should remove that (retroarch bug with flipped images still needs workarounds tho).

  • Lowered side_shade-helper.png by 4x brightness and compensated it in the shader.
    Being the helper lut darker, you can edit it and include in the preset to alter the shades. RGB channels now have a brightness of 64/256 each, which produces the default shades.
    If you push one of rgb channel, the corresponding side will be darkened more, lowering it will darken less.

  • Added two variants of side_shade-helper.png

    1. side_shade-helper-flip-y.png: an y-flipped helper texture meant to be used alongside wildcards fo overcome retroarch issues with cores that flips images
    2. side_shade-helper-sharp.png: a not blurred version of the lut, which may be useful if you want to blur or not as you please; this affects the smoothenss of the shades.

Here is shown how the bezel contrast setting still affects shades on the outer bezel gradients, and outer frame vs inner frame difference, but not reflective area shades.

r,g,b=0.01,-0.02,0.00 ; contrast=4.60.

5 Likes

“Noise” is a generic term.

Latest additions include the ability to generate the RF noise before or after the blur/glow stage.

If one is using the glow, it is probably a good idea to leave the noise before it, but in situations where blurring is used, then one may prefer to “enjoy” a more sparkling noise and avoid to blur it by moving it after that stage/pass.

Now rf noise is splitted in two parameters, uniform one that produces a noise between [-x and +x] and a “snow noise” that produces very rarefied/casual “points” over 0.0.

The other “Noise” added lately is the dot crawl:

…theory states it should be an invisible effect that manifests only when something moves on the screen, but my memories suggests it is visible even on static content, so I’ve added a “Speed” parameter that moved to the max switches to the “Theory”, but in the PAL preset i crafted, it resambles what I remember, instead.

Same goes for the ability to set the speed parameter that switches the checkerboard crawling direction to vertical instead of horizontal, I rememember those pattern moving vertically, but this time i’ve set the PAL preset to horizontal.

2 Likes

Thanks for the info.

Do you know if there’s a chance to import the more available set of options to use for Noise, being provided by this guy ?

The few times I’ve found “Noise” being available, such as CRT-Guest-advanced presets, there’re only 2 options at most, which if remember correctly is Noise resolution and another one, but there’re not other ways to play around.

I still do have a 34+ years old NES being connected through coaxial RF, with dithering + rainbows + “noise”, yet it looks quite different from what is shown around these Noise options. More likely look like grey diagonal rays on the screen, but these options more likely look like small squares that can be increased on size. Be that as it may, the options from PlainOldPants allow to apparently change the size from the noise particles.

Thanks again for the work on here!

Fantastic work!

I have one last complaint, can you please make the frame even/consistent around the image? the fake “border” appears thinner on some parts and thicker on others:

Straight bezel too:

Oh since you went the extra mile of correcting spot placement; one extra correction is required for rotated content:

BG_IMAGE_ROTATION = "-1.0" for 90° games.

BG_IMAGE_ROTATION = "-2.0" for 270° games.

There’s also a different tilt parameter required for 270° games (the opposite of default):

TILT_X = "-0.250000"


Edit/extra bug report:

The psp presets in Presets_HiresGames_Fast folder stopped working in latest dev build.

not sure if this may help out for your project but, NTSC rainbow (aka: Subcarrier frequency in options) for Genesis changes just slightly changes depending if you ever enable BORDERS or not. It changes if Borders are set on Full (aka: BlastEm by default and Genesis Plus GX in core options)

I’ve used this one as a source: https://www.youtube.com/watch?v=sAsLhG-phAk jump to 11:26 This one of course have full borders since its the original console.

In your NTSC rainbow Subcarrier Frequency option you have 4.57 but based on that video record, with borders fit at subcarrier: 4.60

It may be a little detail, but it changes the outcome just slightly.

Another point to mention, is the fact I dont know what was your source to make the Composite Video Rainbows feature, since you say to have Europan PAL experience, but the Rainbows are not always the same, such as this video above.

Your default Rainbow Strength option is correct, based on my experience with the console, however there’re many more records I’ve found where either the Rainbows are more intense or just barely visible. And even then, the “Subcarrier frequency” also changes. Whether may be the TV or the Genesis model. Dont really know, but at least with the value set above: 4.60 with borders enabled, seem to match.

1 Like

I’ll look into fixing bezel borders and thanks for the report on hires presets.

It may sound weird, but I’ve not corrected other parameters that need adjustments for performance reasons; those conditions happen in the latest heavier pass.

@ynnad4
In genesis plus gx, that option is set to off by default and the explaination it gives is that the borders are hidden by the bezel in real TVs.
I’d prefer to set the parameter to one that does not require user to change core options and still I won’t duplicate the preset for different cores.
It would be possible to adapt the parameter to the horizontal resolution; I’ll try that.
Meanwhile, do you find the actual preset convincing in that regard with the default Genesis plus GX configuration (no borders)?
Asking just to have a reference, because, as you say, I’ve no direct experience on raibowing, since I always used PAL, just random video footage.

I’ve seen it, and from what i can read on the main thread and in the code, the purpose is to be as accurate as possible. It is quite heavy on my poor haswell. This not only means that “importing” its code would be very unlikely, but I really don’t feel comfortable at all in doing that.

If you think that a particular feature is important and missing here, I can try to replicate it with an implementation/shortcut that appears to be convincing, while not taxing the gpu too much, but that is not always possible, ofc.

2 Likes

if you had no previous experience with rainbows, i think your work is very impressive and yes, it looks very convincing as it already is.

it would make it look even harder to find info to make it match with original console, since its an artifact for just the american experience, but you did an excellent job to replicate it.

1 Like

About that, I just committed a “service” code for you.

It is not in the main code anymore, ^^ so please use that link ^^

By downloading it, you can operate on the very last parameter named: “don’t use me, for debug purposes only”.
It will slightly change the bezel width and height, modifying its aspect ratio.
I ask you to find a value that looks good to you, better one that fixes both straight and curved variants, then I will hardcode it.

Hopefully, being the change so minimal, I hope it will not break any existing overlay alignment.

Also, I’ve to tell you that on my system the alignment is not perfect, but much better than what i see on your screenshot, maybe this is due to rounding errors, likely unavoidable, caused by the lower resolution you use.

PS: the safest way to match right now is to slightly alter the content aspect under geomerty override section.

1 Like

I just pushed a commit to tune the selective blur size so that it works when displaying borders and not:

…but I’m unable to spot any difference in the waterfall look.
It is true that the rainbow shifted, but that happen anyway while sonic walks, so i would not bother; the size of the rainbow gradient also seem to match the scale (enough for me).

1 Like

In this case it’s okay. It’s a weird resolution that I’m using indeed, and I fear any changes based on it might not look consistent for everyone. Sorry for the trouble, I’ll try your suggested safe way instead.

1 Like

Accuracy is definitely my main goal, but at the moment, it’s only a goal, as I’m still educating myself on how this works, and I have only so much spare time to work on this. The noise is currently the least accurate part of my work by far with the worst performance, but it’s trying its best. Even if importing it here were possible, it would just be a bad idea.

The main things I’m trying to do to make the noise convincing are 1) to keep the noise pattern in sync with the standard timings of an NTSC or PAL video signal, 2) to make the noise get added onto the video signal and decoded with it, instead of just being added onto the final output, and 3) to have the noise interfere to the right extent with luma (Y) and chroma (UV/IQ), by controlling its frequency response.

My current code to make noise meeting those 3 requirements is jank, just adding together 300 random sine waves in a for-loop. The settings are for controlling the frequencies, amplitudes, and random seed of those waves. There are a lot of better ways to do this.

I just tried out koko-aio-ng one or two days ago, and there are couple other things I want to post here about it soon. For now, all I can suggest is that your noise should be implemented more like your rainbows and fringing/dot-crawl artifacts.

1 Like

That’s what I was thinking since some time; but to keep things easy on the gpu, the ntsc code that generates artifacts here runs at 1x scale, so I don’t think adding some “big” noise particles would be pleasing :smile:

-edit-
I was wrong, it looks nice, thanks!
I’ll need to check how it impacts on performance, since it is, indeed, in a loop here too.

Also, why 300 random sine waves? there are methods that mainly abuse fract(),dot() and a sin() that are quite convincing, but I think you know that.

2 Likes

Yes, I know about those fast ways to generate noise. I’ve been hurrying my code a lot lately because I have so little spare time to work on this project, but the gist is that, if I use sine waves, I can easily have the pattern sync with standard NTSC timings and scroll at the right speeds. Noise on real hardware tends to have noticeable scrolling patterns, and this was just one idea to get similar patterns. Still, looking at the CRT that’s right in front of me here, there’s still a long way for me to go with this. I’ll later have to try to take into account the way that RF modulation works, like with a certain carrier frequency and with other gradually changing frequencies in the environment that interfere with it. There’s surely a way to do this without being this insane.

Another note, please make sure you use my latest version. I posted an update just a day ago to improve performance, but the RF noise performance still sucks. (NES also is going to eventually be updated to pack multiple signal samples per fragment.)

4 Likes

I just drafted a pre-release, NG-1.9.50-rc1

I will wait some days for you to test it and if it is all alright, I’ll make the proper one and PR it to retroarch.

4 Likes

hello, do you know if there is some way to apply NES NTSC rainbows ?

If you mean 45deg. artifacts, then look for ntsc-2 presets in 4.1 folder or ntsc-generic ones in ng folder.

1 Like