Half-Life: Alyx performance analysis (or: why low graphic settings produce a sharper image)

Steam VR render scale

Before diving into Alyx’s dynamic resolution implementation, we need to first look at how Steam VR handles resolution. When a game renders a frame, it isn’t sent straight to the headset. It’s handed over to Steam VR’s compositor, which applies lens correction and renders it to the headset’s native resolution. So, the game’s resolution can be different than the headset’s.

Steam VR settings

Alyx dynamic resolution

Alyx, on the other hand, uses a dynamic resolution scheme, where Steam VR’s resolution is only used as a reference. You can check out a really interesting analysis of the game’s algorithm by Alex Vlachos , but I’ll explain the gist of it bellow.

Resolutions per fidelity level. Steam resolution is 2188 x 2432.
The algorithm chooses a higher fidelity level for less complex scenes , such as looking towards the sky
Gif cycling different fidelity levels. Notice how the GPU time graph increases with the level.

Graphics options

Alyx has some graphics options under the “performance” menu, which can alter the quality and the effect detail level. There are some ready to use presets that vary from “low fidelity” to “high fidelity”. Even though the word “fidelity” is used, it’s not related to the “fidelity level” that controls the game’s resolution.

“low” settings on the left, “ultra” settings on the right
“High” settings with some tweaks
GPU time increase (in ms) per graphic setting
  • “shadows” to “medium” or “high”
  • “fog” to “medium”

MSAA

Alyx uses MSAA x4 for all fidelity levels (at least in my system). You can change (or even disable) the MSAA level, by writing in the console: vr_msaa 0.

MSAA level comparison (check out the tree branches)
GPU time for different MSAA values and fidelity levels
fidelity level VS MSAA level

Motion smoothing

Steam VR has the option of motion smoothing enabled by default. This can be useful when a game can’t deliver a frame in time. Motion smoothing takes into account the previous frames and creates a synthetic one. If enabled, it prepares a synthetic frame even if you never drop a frame, so that it’s ready if needed. This process however can increase the game’s render times by 2ms.

Laptop optimization (aka: why nvidia Optimus sucks)

Even though my Razer Blade’s RTX2080 Max Q performs similarly to my desktop’s GTX1080, the VR performance was quite bad. Fortunately, I found the reasons that caused it.

integrated GPU utilization when VR View is enabled in the laptop’s screen
CPU and GPU utilization increase when VR View gets enabled in laptop’s screen

VR View & Spectator view cost in desktop systems

The previous paragraph showed that Alyx’s spectator window has a huge performance impact on laptops with nvidia Optimus technology. How about desktops systems though(or laptops when an external monitor is used)?

GPU time when steam’s VR View is shown or hidden

TLDR

Here’s what you need to do to get a sharper image (higher fidelity level) in Alyx:

  • Disable Steam VR’s “motion smoothing”
  • Set the headset’s refresh rate to 80Hz or 90Hz instead of 120Hz. The lower the refresh rate, the longer the GPU time window and thus the higher the fidelity level (resolution) the game will choose.
  • Set Steam VR’s render resolution to 100%. Higher values are not needed for Alyx.
  • Change the graphic options as follows: “characters” to “low”, “fog” to “low” or “medium”, “shadow” to “medium” or “high”
  • Minimize the spectator window if you’re using a laptop and close Steam’s VR View window (if open).

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store