Integer Scaling issues? and Naomi 2D games shader

I was a bit disappointed on the fact that shaders on 1080p are subpar, so I decided to use integer scaling, just that I will scaling up to the next integer (not the previous). I checked for the 8-16-bit systems and mostly this is fine, it makes the game bigger on the screen and the hidden portion is frequently supposed to be hidden on a CRT. But after checking a few images with integer ON and OFF I spotted some strange bands on the Integer screenshot so I would like to ask you why I am getting worse scanlines at x5 than at x4.5, check on the sky area at the right.

I’m using crt royale-320-svideo.glslp with a D93 temperature.

I also wanted to ask on shaders for the Naomi or Dreamcast system. Supposedly this board was outputting 640x480? If that’s the case 2D games never presented scanlines in this system? The next is Metal Slug 6 (Atomiswave), while the shader (the same than the above) looks superb on 3D games, I wonder how 2D games looked on real arcade cabinets.

Atomiswave could output low-res 240p via JAMMA or high-res via a separate output, apparently. Dunno if the high-res output was available for all games (i.e., pixel-doubled?). EDIT: if I’d read a little farther down:

The hi-res mode provides higher resolution and sharper graphics, however this doesn’t mean all games look better on them. Games designed with 2D low-res sprites will look worse in this mode.

Dunno about the integer thing. Are those patterns always there? That is, are they static? Or do they change with the background? If they change, it could just be some moire introduced by the interaction of the mask effect with the colors of the image.

I took a screenshot and indeed looks like the character sprite is doubled. But with a nearest neighbour scale roundtrip the rest looks native 480p; background, HUD or the bayer dithering on some color shading (dither at 1px in 640x480 mode). So probably this game played without scanlines. But I want to check some screenshots on Naomi/Atomiswave as well as Dreamcast 2D games.

As for the moire I’m not sure, I thought it made sense that integer scaling showed more moire but on my monitor when the shader is given more vertical pixels (1568px, x7), the moire effect is not present. Maybe I should try to add a light bilateral to remove single pixel details (like error diffusion dithering) that causes this effect.

On the Dreamcast, some of the Capcom 2D fighters (e.g. 3rd Strike) can be switched into 240p (hold Start+L before Logo). I’ve never tried this on an emulator though. Some SNK ports also are low-res (e.g. Last Blade 2). I don’t know if you need to switch. Kinda annoying that it was so inconsistent.

1 Like

I was searching for close up videos of 2D games on 31Khz displays. They are hard to find, here one

My guess is they were displayed mostly like the metal slug image above, which is fine (a bit soft though), after all the sprites (except characters sprites) were mostly optimized for 480p. But this is reicast using 1440x1080 as output. When I set it to native 640x480 the shader (crt-royale) flickers, even if I scale it down within the shader. My cable type is set to VGA (RGB), so I guess it should be progressive, but I don’t know. parallel64 outputs progressive in 640x480 mode.

royale (and all of the interlacing-capable shaders) are pretty dumb in their detection and just jitter on anything above ~400 lines. In this case, you would need to go into the options and disable interlacing detection altogether, which I believe is a config-only (i.e., not available via runtime parameter) variable.

2 Likes

I modified all the interlace_detect lines and indeed it doesn’t jitter anymore, but phosphors are stretched. It’s strange because parallel-n64 outputs 480p but the shader doesn’t jitter.

I researched on the monitor used for Naomi cabinets, the Nanao MS 2930, by the looks of it it uses a shadow mask type of mask. Arguably even a 4K display can’t reproduce a 31Khz monitor shader, but I think the metal slug 6 example would look close. I just want to make it sharper. Ideally for 2D fighters with mixed sprites and 3D elements I want to output 480p for cohesive graphics, or scale down in-shader to 480p so the sprites fuses better with the background (like with the FF example on the libretro blog).

Finally what I did was to output native 480p, since this would cause crt-royale to flicker I upscale in-shader to 1080p and I get both a 480p look with pleasant 480p phosphor mask. Since it was too sharp I removed the svideo part and replaced it with a blur.

Here is the before and after.

1 Like

That second one looks better, I think, yeah.

If you’re running at 480p, you could also try crt-hyllian-3d, which you should be able to simulate low-res mode with.

2 Likes