CRT Scanline shader for SNES Classic Mini?

The scanlines looked even with “don’t care”, as far as I could tell from that video.

There seem to be a band issue every couple of scanlines or so, if you look at the purple building…

Also The SNES Classic Mini has a rewind feature implemented kind of like retroarch’s im just wonder as this is enable at a system level is this using up extra resources thats cause performance issues with shaders when using Retroarch?

[quote=“BlockABoots, post:22, topic:12664, full:true”] There seem to be a band issue every couple of scanlines or so, if you look at the purple building…[/quote] The one setting you didn’t seem to try was Filter: Linear and Scale: Don’t care.

Like crt-pi, this shader needs linear filtering to work properly.

Ok ill give that a try, does integer scaling need to be enabled or disabled?

It doesn’t need to be enabled so try with both. Non-integer scaling is obviously better as it fills the screen vertically but it can be difficult to achieve - particularly with simple calculations.

Guess the SNES Classic has 720p in its favour then so running non interger scaling shouldnt be so much of an issue

Ok, I’m glad to see that it runs now!

Now that it is I’ll see what I can do about making it look a bit better at 720p. Thanks for making that video too BlockABoots, it’s really helpful. For non-integer scaling, I’ll adjust the scanline profile a little and that will help fix any uneven scalines.

For now: you should have it set to “Filter: Linear” and “Scale: Don’t Care” like davej says.

And then under Video, you probably want these settings (for now…):

Aspect Ratio: Custom

Custom Aspect Ratio Width: Somewhere between 896 and 960

Custom Aspect Ratio Height: whatever number says (3x) next to it. 720,717 or 672 depending on other settings

Integer Scaling: OFF (since we’re manually setting integer on the axis we we want)

Custom Aspect Ratio X pos. (Just center the image)

Custom Aspect Ratio Y pos. (Just center the image)

Then back under quick menu, shaders, you can start trying different parameters if you want.

Thanks for the info, ill try them out!

Ok just inputted the suggestions you made but im still getting uneven scanlines, odd thing is it just seems to be the bottom half of the screen the top half seems to be fine

If you look on the pillar of the red building the bottom half has uneven scanlines every other scanline or so yet the top half seems to be fine!..

It looks more prominent on my 42 LCD screen but you get the general idea from that screen shot

EDIT: Also if i change the Aspect ratio Height to 672 then you can see the difference from the bottom half of the screen compared to the top…

1 Like

Have you tried not using a custom aspect ratio and just using regular ol’ scale-to-fit with core-provided aspect?

Okay I have a few questions for you"

(1) Why are your images 2560x1440? Just because you’re viewing a video at your desktop resolution? What was the video captured with? And what resolution was the capture done?

(2) Is your TV 1080p? Because the snes classic outputs 720p only, so the scanlines will get applied to the 720p image and then upscaled to 1080p by your TV no matter what.

So it isn’t really possible to have “integer scaling” unless you plug an snes classic into a 4k tv (720 goes into 2160 evenly). And this means that there is probably no way to get perfect scanlines on a 1080p tv even with the integer scaling options of retroarch or writing the shader to only to integer scaling. We’re stuck with some scaling no matter what and that will mess with the scanlines to some extent.

But I’ll set my rpi to output 720p and try to get things as nice as possible this evening. I just spent a while making the shader do integer scaling before realizing that this won’t fix our issues at all because 1080p sets are the target.

1 Like

No i didnt, ill give that a go.

Ok,

1.Yeah by desktop res is 1440p

2.I captured at 720p

3.My TV im viewing on is indeed 1080p.

Bit odd that is only appears to be displaying uneven scanlines on the bottom half of the screen though

Hi, after setting my rpi3 to output 720p I found that it’s pretty tough to come up with something that looks good all of the time. So I took a shot at writing a shader that scales the image up to the largest integer that fits in 720P (or whatever the native res is), centers the image there and then applies a more basic scanline effect. The advantage of this is that the 720P output just won’t have uneven scanlines. It can’t unless I just messed up. Which is possible because I had a heck of a time actually getting this to work properly.

Unfortunately it isn’t faster than the old shader. Which means we need to test the speed again. And good output depends on your TV doing decent scaling to 1080p. And unless the game resolution is a divisor of 720 then you’ll get an image that isn’t full height. But I think this is the best chance at something that looks generally good.

You can grab the shader and a preset file here:

The preset GLSLP goes in the parent folder and the GLSL goes in the shader subfolder (the normal case for retroarch shaders…).

Let me know if this works and especially if there is weird output (size/position of the game). And what the speed is. Sadly it could be slow…

This is what it’s supposed to do:

EDIT: and as soon as I looked at the post I realized that the image won’t be quite centered horizontally because I didn’t account for the aspect ratio of the game… oh well

It sounds like the number precision issue I described here.

Thanks ill give that a go this evening.

It makes me wonder what technique Nintendo used themselves to get even scanlines then, it doesnt look that great to be honest, their scanlines are way too light and not defined enough but they are even so not sure if they just used an overlay of sorts or shader

Ok just tested the lastest shader and the scanlines are now even and speed is 100%. Testing Batman and the screen was shifted down so i had to go into the video settings and alter the Aspect ratio Y Position back to 0 so the screen was centered.

Just to confirm the correct locations to put the 2 files. The file structure on the SNES classic for the main shader folder is…

/etc/libretro/shaders

so i should place ‘ZFAST_CRT_SHADER_SCALING.glslp’ in that location and do i then need to make another folder named ‘shaders’ so…

/etc/libretro/shaders/shaders

and place ‘ZFAST_CRT_SHADER_SCALING.glsl’ in that folder?

Also i have notice that, Dark Pixel Brightness Boost parameter isnt in your shader setting anymore is there a reason for that?

The ‘ZFAST_CRT_SHADER_SCALING.glslp’ file contains a reference to the ‘ZFAST_CRT_SHADER_SCALING.glsl’ file in subfolder called shaders. The only retroarch install I have is what came with retropie and they have GLSLP files in a ‘shaders’ folder and then GLSL files in a subfolder of that called shaders. So yes, there is a shaders/shaders folder! It seems odd, but I just shrugged my shoulders and did what they did. If that’s not how it is in the snes classic retroarch then I don’t know. Of course, you don’t really need the GLSLP. It just sets the ‘Linear Filtering’ and ‘Don’t Care’ options for filtering and scale.

Regarding size options and stuff in the ‘Video’ section of the settings: I’m assuming that you are at the defaults. So if you set ‘Aspect Ratio’ to ‘Config’ you should get a correct picture. If that’s set, then retroarch should ignore the ‘Custom Aspect Ratio’ Position/Size settings.

And yes the settings are different now. This is a significantly different shader now! You set the ‘Scanline Amount (High)’ to however dark you want the scanlines for light colors and then you set ‘Scanline Multiplier (Low)’ afterwards to however dark you want the scanlines for darker colors.

If the picture is a bit too dark after you set the scanlines, you can turn down the ‘Fake CRT Gamma Correction’ although this won’t make too much of a difference.

1 Like

Would it be possible to make a version with curvate support or will that put the shader back to crt-pi performance?

So if you want even scanlines across light and dark colours what does the difference need to be between the 2 values, say for example I had the scanline amount (low) set to 4.0 what would the high setting need to be?