Integer Scaling Explored: Sharper Pixels For Retro And Modern Games
Integer Scaling Explored: Integer Scaling in Older Games
You'll note that at our 1080p resolution, the image is actually a little smaller than the screen. Integer scaling results in an upsampled 1280x960 image, which leaves 60 pixels above and below the game. While that does result in some lost real estate on our 1080p monitor, the image is crystal clear and the individual pixels are sharp. If you're using a higher-resolution 1440p or 4K display, the image exactly fills the screen, which is perfect. Fortunately, the unused pixels on our 1080p display are just black with no additional distractions. On a 22" monitor, this lets you relive the good old days of a 15" CRT monitor without the flicker or scan lines. Let's take a look at the images at their full size. Throughout this comparison, we'll keep any pillarboxing and letterboxing in order to illustrate what goes unused on a typical 1080p display, but higher resolution monitors will behave somewhat differently. When you click these images, they'll open in a new browser tab. Right-click the images in those new tabs and open them separately if you really want to get a close look.
As you can easily see above, the image is much sharper with integer scaling, although the individual pixels that make up the image are smaller than the image with GPU filtering. There's nothing wrong with the larger image, but it's blurrier to offset the fact that pixels can't be stretched to an integer multiplier while still filling the screen. That's just the default linear filter at work. If you've been playing older games at non-native resolutions on an LCD monitor at all in the last twenty years, you've seen this before. It's worth noting that on a 2560x1440 display, you've got the exact same filter blur even though that 640x480 image would fill the screen entirely. The driver applies its filter even when it's not necessary, but using integer scaling on a 1440p display can completely fill the frame vertically while retaining those sharp pixels.
640x480 is by far the most common display mode for older games, but some do support some higher resolutions. To get a feel for how that works, we'll take a look at Diablo II. The vanilla release only supported the same 640x480 resolution as WarCraft II or StarCraft, but the Lord of Destruction expansion added an 800x600 resolution as well. Unfortunately that higher resolution doesn't fit into 1080p very well at all, and we've got a bad feeling about what's going to happen with the image. We will probably see big black borders on the top and the bottom with the image completely unscaled in the center of our screen.
Well, that's a bummer, but it's exactly what we expected. The lower 640x480 resolution may actually be preferable for those who want to use integer scaling with their 1080p displays since 800x600 just won't fit the vertical pixels with a 2x integer scale. While neither image completely fills the screen, 640x480 gets scaled by a factor of two and fills more of it while losing some of the detail from the higher setting. What do we see when we dig into 100% captures of Diablo II's screen, though?
With standard GPU-assisted aspect-correct scaling, the image has the same fuzz filter applied. Diablo II has some funky perspective correction via pseudo 3D effects using flat surfaces very similar to what an SNES does in Mode 7 racing games like F-Zero or Super Mario Kart. When the image is blurred by traditional scaling methods, it's subjectively harder to read than it is with integer scaling. The blur caused by the scaler's linear filter washes out details more than it fixes anything. Oddly enough, between the larger physical image and the sharp pixels, we liked integer scaling at 640x480 the best. On a 1440p display, the 800x600 image is doubled, so it covers a much larger percentage of the panel than it does on a 1080p display, but 640x480 covers 100% of the vertical height. Whether you use integer scaling and at what resolution is definitely a personal choice in this case.