Hello, all.
Thank you for all your hard work on this software which has rekindled my interest in emulation, aside from Dolphin, which I’ve more or less have kept kept track of, over the last few years. I spent quite a few hours over the past several weeks setting things up in my system, creating playlists, restoring old save files, confirming my old roms, adding 3D box art, etc.
One thing I spent quite some time on initially, was configuring the video output. I really like how RA provides a hub to manage the settings across the many emulators… one to rule them all. Working with the various settings, I realized that there is always a trade-off between:
- image blurriness
- correct (or at least, original display devices’) aspect ratio
- pixel shape accuracy (uneven pixels)
Working with the SNES bsnes-accuracy core as an example, it seems there are three main options:
-
Aspect ratio different from the originally intended 4:3 (old TV’s) but with a sharp image and evenly sized pixels
- aspect ratio: 8:7 (PAR)
- force integer pixel scaling
- disable hardware filtering This setup produces a sharp image with consistent pixel shapes but does not fill the screen vertically and the image is laterally compressed compared to the original console’s 4:3 ratio as played on old CRT TV’s.
-
4:3 aspect ratio with sharp image but uneven pixels
- aspect ratio: 4:3
- do not force integer pixel scaling
- disable hardware filtering This allows for a sharp image at the intended 4:3 aspect ratio but pixel shapes are modified to achieve this. This is more obvious on sections where there are diagonal lines of pixels. With this method, some are squares while other rectangles. Also, this method does not fill the screen vertically.
-
4:3 aspect ratio and even pixels but blurry image
- aspect ratio: 4:3
- do not force integer pixel scaling
- enable hardware filtering In this case, the intended 4:3 aspect ratio and proper pixel shapes are achieved but at the cost of image sharpness.
Number 3 above is the method I am using right now and the blurriness issue is improved by enabling SuperEagle software filtering. However, the image is still noticeably softer than methods #1 and #2, especially on NES games (Nestopia core). I also tried playing with the multitude of shader options but they all alter the image in some way. The “sharpen” shaders where promising but create a bit of a ghosting effect around objects on screen.
I remember having struggled with this in MAME after I started using a fixed 4:3 output on games with hardware filtering enabled to simplify my arcade setup. However, MAME has a super-handy pre-scaling option that is applied before sending the frame to the video system. When I set this to 4x, the resulting image is very sharp, with even pixels and correct aspect ratio. I assume this is because the gfx card has more pixels to work with when scaling and interpolating the image to non-integer values. The parameter is described here; just search the page for “prescale”.
Also, back when I was using emulators in the Wii, this problem was resolved in SNES9X-GX and FCEU-GX with a similar approach suggested by eke-eke, the author of the Genplus GX port. Essentially, the image is prescaled as in MAME, and then the video hardware does its scaling magic. After this feature was implemented, I was able to get a sharp, 4:3 image with even pixels on those emulators as well.
I really feel that the prescale method would allow users to “have the cake and eat it too”, in the sense that we could have a 4:3 image with evenly proportioned pixels, filling the screen vertically, and without blurriness.
Would it be possible for Retroarch to implement something like cross-core, this or would this have to be done at the individual core level?
PS: After typing all this while waiting to have posting permission, I found this thread that asks a similar question. However, I don’t think the “sharp-bilinear” shader does the same thing I describe above because it still has the uneven pixel problem. Also, the “pixellate” shader creates ghosting around the edges of the sprites, just like the “sharpen” shaders.
Best regards to all.