Texture Downsampling: Achieve Ultimate Graphics Fidelity

Say, you think that your rig is strong enough to run most games above 120 FPS, pushing the game graphics settings to the limit is way to go. Resolution, anti-aliasing, anisotropic filtering, texture quality, shadow quality, water reflections, depth-of-field, motion blur, ambient occlusion, HDR, post processing, etc are some settings which can impact how good the game graphics can be. However, we as human never stop chasing perfection. We always try to climb the highest of the highest mountain as high as we can be. For the “graphics-phile” gamer, they also try to push the rig beyond their limit to achieve the unachievable graphics fidelity.

Okay, let’s drop the charade here.

Pursuit of Higher Fidelity Graphics

Say, you already set everything to ultra but you still see there are some edges (jagged, or worse) and try to achieve something more, what else can you do? We know that we already have a lot of anti-aliasing algorithm to reduce (if not eliminate) jagged edges, from the cheapest like multisampling anti-aliasing (MSAA), propietary tech like NVIDIA FXAA, TXAA – AMD MLAA, and the most powerful one: Supersampling (SSAA).

Supersampling is the best anti-aliasing ever. Rather than approximate each vertex intersection, SSAA brute-force applies anti-aliasing to every, single, pixel in the framebuffer.The end result is smoother edges and more beautiful graphics with the cost of very, very demanding performance (every brute-force algorithm is very demanding). That’s why many games opt-out the SSAA method and choose a more considerable approach like MSAA/TXAA.

However, since you can already push the rig to the limit, why don’t developer let you to do the SSAA?

Don’t worry, since we already have: Texture Downsampling.

The Nature of Display Monitor

Say, you have a native 1080p LCD monitor. It means that you can set any resolution up-to 1920 x 1080p. Take a look at figure below:

Our case study

Our case study

Our case study: Dota 2 setup run in PC  with native desktop resolution 1080p. Our assumed base FPS should be around 60 FPS.

Case 1

Your GPU is not strong enough to render 1080p @60 FPS, so you lower the game resolution to 720p. The end result is something like this:

720p upscaled to 1080p

720p upscaled to 1080p

 

You got an upscaled graphics. The GPU framebuffer is merely 1280 x 720, but it is rendered at 1920 x 1080, which means every pixel in the framebuffer is scaled 150%. 2 pixels long in framebuffer become 3 pixels in the display monitor. A cube of 2 x 2 in framebuffer become 3 x 3 in the monitor.

Upscaling introduces blurring. The pixel is upscaled, thus the image quality rendered in display is reduced. It’s just like when we zoom-in an image above 100% scale, the image quality deteriorate.

Case 2

Your GPU is strong enough to render 1080p @60 FPS, so you just leave it as-is. The end result is the game looks beautiful, everything is in its place just like you’ve already guessed.

Rendered on native 1080p

Rendered on native 1080p

 

No scaling done means every single pixel represents one pixel in the GPU framebuffer. No problem occurs. It just suits you well.

Case 3

Your GPU is absurdly powerful to render 1080p, even at the highest settings it runs on 160 FPS. You would like to push the game beyond the limit, so you do this:

  • Go to GPU control panel and enable custom resolution with resolution much, much higher than the native resolution (say, 4K resolution)
  • Enable GPU scaling, so even though the game is rendered at 4K, it will looks like a 1080p. (tutorial here)

In the end, you run the game in 4K even though your display can only render 1080p. What happen here?

4K downscaled to 1080p

4K downscaled to 1080p

 

Yep, the game is downscaled so everything displayed in monitor is much smaller than the real pixel representation. 2 pixels long represented in 1 pixel. A cube of 2 x 2 in framebuffer become 1 x 1 in the monitor.

Downscaling may introduce pixels grain, where the image rendered become too sharp or edgy. However, downscaling in appropriate environment may introduce anti-aliasing.  Thus, downscaling high resolution image to a lower resolution viewport actually reduces the jaggedness of edges. The good news is: the anti-aliasing during downscaling occurs to every, single, pixel in the framebuffer, which means downscaling = full screen anti-aliasing.

Wait, what? Full screen anti-aliasing? Isn’t that the same as the supersampling anti-aliasing?

Bingo. Downsampling FTW. And it also means that you can disable “anti-aliasing” from in-game graphics options, since it is obselete.

How’s the image quality? I tested it out in Dota 2, run on both 1920 x 1080 and 3200 x 1800 (1800p) using MSi GTX 760, and the result is…..

Rendered at 1800p downscaled to 1080p

Rendered at 1800p downscaled to 1080p

Rendered at native 1080p

Rendered at native 1080p

Superb, if I do say so myself. Since it is full screen anti-aliasing, even the jaggedness of text become smoother. And I still don’t understand how the color quality become much more vivid than the default 1080p.

I will post update including the screenshot later, and maybe with Watch_Dogs run in 1800p too.

The Secret Behind Downsampling

The secret of downsampling lies in the graphics scaling. Scaling (upscale/downscale) can be done by 2 parties:

  1. Software-based scaling. Scaling is done by graphics library (in Windows case, DirectX does). When scaling occurs, switching between two different resolution cause screen flicker i.e. when you Alt+Tab game to desktop in which the game resolution is not the same with the desktop resolution. Software-based scaling strain the CPU too much and the end result is not so good.
  2. Hardware-based scaling. Scaling is done by discrete GPU. When this occur, switching does not cause screen flicker, because the monitor has already received appropriate resolution between both apps. GPU scaling produces better graphics quality compared to software-based scaling. Also, dGPU may post-processed the image just like the full screen anti-aliasing.

So, in the end, use downsampling at your own risk. If you have powerful enough rig and you are the type of “not-easily impressed gamer”, you can try this method to achieve higher graphics fidelity. Also, lower your display refresh rate to enable much, much more higher resolution.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s