Integer Scaling Explored: Sharper Pixels For Retro And Modern Games
Integer Scaling Explored: Emulation and Conclusions
RetroArch provides a common interface to play games from consoles from the 1970s all the way up through the Wii thanks to emulator plugins that the LibRetro team calls "cores". That means it's not so much an emulator as it is a front end and host for a whole slew of emulators. Thanks to RetroArch Run Ahead, this software emulator can put excess processing power to good use to limit or eliminate input lag, making it a very attractive, simple choice for fans of old games. Fans of small dedicated emulation boxes like the the Raspberry Pi can run RetroArch in its own dedicated operating system via Lakka, which recently added official support for the newest Raspberry Pi 4.
You don't really need integer scaling in the drivers with this much configurability
Something interesting happened on the way to testing integer scaling on emulators, though. As it turns out, most emulators already support integer scaling or dynamic resolutions. Older 8-bit and 16-bit systems already display in RetroArch with the requisite pillarboxed and letterboxed black bars, which makes it a pretty great way to experience those games. In fact, if you don't mind clipping the top and the bottom of the image you can run games at 5x scaling, which results in a 1600x1120 resolution, which only trims a few pixels off the top and the bottom. RetroArch can also render games for more recent systems like the Sony PlayStation or Sega Saturn at higher than default resolutions, adding extra sharpness and supporting native resolutions without the need for integer scaling.
Still, we've headed down this path, so let's see how it works. The only way to see a difference in RetroArch was to set the resolution within the emulator to something you'd probably never use, practically speaking. Using a 1280x960 resolution only had an effect on the menu system's UI, so we had to resort to 1280x720 to even see any difference. The results are...not great. Also not great is the fact our Contra III skills have atrophied considerably.
As you can see, the pixels are perfectly sharp as it is without any integer scaling. The SNES outputs 256x224, which scales up to 1024x896, but to get a 4:3 image, RetroArch internally interpolates 256 pixels to fit an 1195x896 image. You can't hardly see any artifacts, but that decidedly non-integer scaling method is there to eliminate shimmering when games scroll horizontally in our run 'n gun example, Contra III: The Alien Wars. Let's look up close at some cropped images.
Unsurprisingly, integer scaling at a lower resolution didn't help at all. The image is smaller at 1280x720, but there's no difference otherwise. Both images are incredibly sharp and have both pillarboxing and letterboxing. 1280x960 looks identical to 1920x1080 in action, and we see no reason to worry about integer scaling with emulators unless the system's performance at your display's native resolution is somehow GPU-bottlenecked. This would likely only be the case in systems with 3D graphics like the Dreamcast or PlayStation on very high-resolution displays.
Conclusions
Integer scaling has a wide variety of uses, from enhancing older games to sharp images at non-native resolutions in modern games, the limit to Nvidia and Intel's new image scaling algorithm is constrained only by your imagination when it works to fill your display's screen. Arguably the best use case for integer scaling was in a newer title, Stardew Valley, where the game's art assets are the most attractive with their sharp edges intact at lower resolutions. While playing this title might show more of the playfield at a higher resolution like 1440p, playing at 1280x720 adds a considerably amount of charm to the game's art. Games with a fixed resolution, like FTL: Faster Than Light were a little more of a mixed bag, but its 720p native resolution scales up to 1440p and 2160p nicely.Unfortunately, in several cases it wasn't possible to get the image to fill our 1080p display. Diablo II's higher 800x600 resolution was particularly jarring with such a large black border all the way around the image. That resolution, which doesn't fit evenly into any common display resolution these days, would be more tolerable on a 1440p or 4K display where the pixels would at least be scaled up to fill more of the screen. However, it's the low-resolution 640x480 that fits evenly into a high-resolution display. The black borders were an acceptable trade-off for sharper pixels in our view, though it's entirely a personal choice. WarCraft II's 640x480 resolution was similarly improved when the monitor's resolution is high enough to scale, especially when it fills the screen at 1440p and above. On the other hand, emulators flat-out don't need this since most of them already feature integer scaling and a whole host of CRT-styled effects.
In the end, so much of how we enjoy games on our PCs is a personal decision. However, both Intel and Nvidia should be commended for adding this ability to recent drivers for their current lineup of GPUs. At present, AMD's Radeon drivers don't have the ability to use integer scaling, but we hope the red team adds this feature soon. If you're like us, longing for sharper pixels on older titles, integer scaling is a welcome addition to our graphics card's drivers.