Modern PC games include a vast array of graphics options that can be tweaked to establish a good balance between visual fidelity and performance. However, usually, the developers don’t provide any explanation of what each graphics setting does. In this post, we’ll break down the various technologies used in games to make them look all fancy and realistic.
Let’s start off with anti-aliasing. It’s one of the most widely used effects in games. You’ve got the traditional MSAA, SSAA, FXAA and shader-based SMAA and TAA that have become the norm. So, what do these AA techniques do? In short, they give the image a cleaner look by removing the jagged edges around objects.
Here’s an example of how FXAA (fast approximate anti-aliasing) improves the image quality by reducing the jaggies. Notice how the top of the shutter (on the left) has rough edges without AA but becomes smoother once FXAA kicks in. Here’s an interactive comparison of how AA improves the picture quality. Here you can see SMAA in action:
The differences are subtle, but in the end, they make a notable impact on the image quality. Look at the white machine thingy on the right. It benefits the most from SMAA. Other than that, the gun also gets some minor uplifts in quality.
There are two main categories of anti-aliasing techniques:
Sampling-based: These mainly include MSAA (Multi-Sampling AA) and SSAA (Super Sampling AA) which were popular last-gen and for good reason. They produce the best image quality (broadly speaking) but the performance hit is severe. They work by rendering the image at a higher resolution and then scaling it down to fit the native resolution. This essentially makes the entire image more detailed and sharper, scaling down the rough edges in the process but not removing them entirely. Here’s an example.
Shader based: Shader based AA techniques are more efficient and don’t impact the performance by much. They work by applying a slight blur to the edges, making the image smoother but at the same time reducing the sharpness. FXAA is a good example of how shader based AA gets rid of aliasing but at the same time reduces the level of detail by blurring the edges. Here’s an example.
Newer methods such as SMAA greatly reduces the blur intensity while also eating up most of the jaggies. However, it suffers from the same drawback as MSAA: It doesn’t work with transparent textures.
The latest and most popular form of AA is temporal AA which focuses on removing the shimmering effect. It’s most evident in motion. Temporal aliasing is caused when the frame rate is too low compared to the transition speed of the objects in the scene. This makes the boundaries of the objects to appear in motion (shimmer) and that’s referred to as temporal aliasing. Here’s a comparison of TAA vs no AA:
and here’s how TAA and FXAA differ:
The main advantages of TAA over FXAA are more pronounced in motion. The “teeth” at the boundaries of the objects appear to be moving when you are in motion in-game. TAA works to smoothen these artifacts while FXAA simply applies a “Vaseline filer” which although effective produces curvy lines that jump around when there’s a transition in the scene.
There are two kinds of shadows in games. “Shadows” and “Ambient Occlusion”. The latter refers to the ambient shadows that exist in crevices, edges and on surfaces hidden from the sun. The casting object and the shadow often overlap here. The main types of AO techniques are Screen Space Ambient Occlusion and it’s improved variant Horizontal Based Ambient Occlusion. There are also the newer VXAO and ray-traced AO but those are still in early development, so we won’t bother. If you do want to know about them, just remember that voxels form the basis of VXAO while ray-tracing is used for the latter.
SSAO and HBAO are rough hacks that calculate (using an integral) where light will penetrate and which areas will be shadowed. It’s an approximation rather than an exact calculation.
Level of Detail (LOD)
Level of detail sets the level of object complexity and the in-game distance till which they are rendered. It is often dubbed as environmental quality, game detail, rendering quality or some other related term in games for simplicity.
It essentially controls the number of polygons rendered and in turn, the draw calls the CPU will need to send. These differences are often subtle and hard to notice and tend to make significant changes to only far off objects.
Texture detail is like LOD except, no rendering happens here. These are the pre-baked textures that get loaded onto your graphics card’s VRAM and act as the skins of the in-game objects. The more detailed the textures, the more realistic will they look and accordingly consume more memory.
Texture filtering is one of those settings that makes your game look sharper. Well, then how is it different from the regular sharpening filter?
In simple words, texture filtering makes the textures sharper especially the ones in the distance by sampling their mimaps. In the case of multiple mimaps, the average is taken and the anisotropic filtering value specifies the angle at which the textures are scaled and sampled. More on this here.
Remember NVIDIA’s godrays? Yeah, that’s basically what volumetric lighting is. Team green uses tessellated godrays which is more performance intensive but look better too. Traditional volumetric lighting simply is a demonstration of how the sun rays (or any rays) appear and behave in the game world.
Screen Space Reflections
Screen space reflections is a technique to render dynamic in-game reflections. It is quite taxing and for good reason. SSR basically re-renders the scene on transparent surfaces. However, it only does so for the objects visible on the screen. If there are other objects that are present in the same location but not visible on the screen, they will be culled.
Tessellation is a DX11 based technique used to increase the level of detail in a scene without increasing the texture size. It is done by dividing the polygons into smaller ones to improve the mesh complexity and detail.
Tesselation is a technique that allows you to reproduce primitives (triangles, lines, points and such) in a 3D application. It does this by repeatedly subdividing the current geometry into a finer mesh.
This allows you to load a relatively coarse mesh, generate more vertices and triangles dynamically and then make it into a finer mesh.
Post-processing generally refers to effects that are implemented in the last phase of rendering, after all the other effects like tessellation, multi-sampling, reflections, and shadows are done. It includes shader based effects such as depth of field, motion blur, ambient occlusion and sometimes FXAA or SMAA as well.
Another widely used technique, V-Sync basically caps your in-game frame rate to your monitor’s refresh rate, preventing screen tearing. It does so by slowing down the GPU pipeline to make sure the frame rate doesn’t go above your refresh rate. However, this can also affect your performance negatively by inadvertently making your game lag or inducing an input lag. Read about Adaptive-Sync to find out more.