Skip to main content Link Search Menu Expand Document (external link)

Table of contents

  1. Introduction
  2. Optimal render resolution
    1. a) In-game render resolution (FS2020 Graphics Settings | Render Scaling)
    2. b) VR view display resolution (OpenXR Custom Render Scale)
    3. c) Post-process filtering (hidden setting in the UserCfg.opt file)
    4. d) Headset panels native resolution
    5. e) In-game settings
  3. Adjusting the OpenXR and in-game render scales
    1. To get started
  4. Going farther
    1. a) Finding in-game limits
    2. b) Finding OpenXR limits
    3. c) Finding the best visuals
  5. Disable in-game sharpening
  6. Considerations for hand tracking
    1. Removing the VR controller model


Several factors are contributing to the overall performance of the game: some are intrinsic and depend on the game settings, others are solely system related. Render resolution is the main setting you can adjust in order to keep the game render time within the frame budget but it is also directly affecting the visual experience.

The OpenXR ToolKit helps you to achieve your goals because it is similar or faster than many in-game stretching techniques, if there is any, but it is also offering fine-grained adjustment settings which are helping you to balance the overall experience closer to your hardware capabilities.

NOTE: When asked to “Restart the VR session”, switching out then back into VR using the Ctrl-TAB keys is sufficient. You do not need to restart the whole game.

Optimal render resolution

The optimal rendering resolution for a system depends mostly on the following factors:

a) In-game render resolution (FS2020 Graphics Settings | Render Scaling)

This is the real number of pixels the game is drawing per view. This is also the resolution limit to which FS2020 is rendering EFIS screens: the higher the render resolution, the more pixels and the better legibility. Cockpit objects close to the camera such as knobs, buttons, levers or analogue gauges aren’t affected as much as EFIS screens visually though.

Please note: the game is using some rendering techniques which can display some grain or flashing pixels, especially when using a rendering resolution which is too low. Enlarging such images will magnify these artifacts though.

b) VR view display resolution (OpenXR Custom Render Scale)

This is the real number of pixels the game is presenting to the views in the headset every frame. If the render resolution is lower, the game is enlarging the render resolution pixels in order to fit. This is similar to rendering the game at 1080p on a 1440p monitor. In VR, this is also the resolution which has the most visual impact on the outside world: the more pixels, the better texture and feature details in the distance.

Please note: the OpenXR runtime will be processing images at the OpenXR render scale, and the larger the scale, the heavier the motion smoothing computations.

c) Post-process filtering (hidden setting in the UserCfg.opt file)

This is the technique the game is using to convert the lower resolution render image into the higher resolution view image. In order to maintain good visuals, FS2020 is using both a pixel stretching technique and the AMD CAS Shader (Contrast Adaptive Sharpening). In most cases you shouldn’t disable it in VR but with the OpenXR Toolkit we suggest you do (see below).

d) Headset panels native resolution

This is the physical display panel resolution per-eye. However, due to the nature of the lenses in the VR headset, the runtime optimal resolution is usually higher than the native headset panels resolution. This resolution has been carefully chosen by the headset manufacturer for nominal legibility with the headset panels and for this reason, we suggest you keep the OpenXR Runtime resolution the closest to the recommended 100%.

e) In-game settings

This is directly affecting the frame render time budget available. With higher settings, the game spends more time per-pixel. Should you want to target a minimum fps, you’ll have to balance the amount of processing per-pixel and the rendering resolution accordingly. Raising either or both is directly impacting the rendering time.

Adjusting the OpenXR and in-game render scales

You could opt to push higher details but with lower fps (game settings ULTRA) and compensate the lower fps with motion smoothing. You could also opt to push less details but keep enough fps for a comfortable experience without motion smoothing. In turn, balancing visuals and performance consists in pushing the game to render up to a certain limit at which the hardware can sustain a minimum fps target, then displaying the rendered image as if it was a higher resolution image.

Please note: because FS2020 is using the in-game render resolution as a reference for the EFIS resolution, you might be using different strategies depending on the type of aircraft gauges and the expected visuals. However with the OpenXR ToolKit this is no longer a factor because the toolkit upscaling (NIS or FSR) can maintain most of the EFIS legibility, even with incredibly large scaling factors.

To get started

The main purpose of the OpenXR Toolkit upscaling feature is to replace in-game equivalent and get better visuals, better performance and additional adjustment settings. You should only use in-game render resolution 100% when using the OpenXR Toolkit.

The easiest and fastest way to try out is to replace the in-game upscaling with the OpenXR Toolkit upscaling. If you’re already using the in-game render resolution setting with a value lower than 100 (aka TAA## in the forums), just set it back to 100% then use the same scaling factor directly in the OpenXR Toolkit. This should give you the same performance benefit, if not better, with added benefits:

  • You can choose between two different algorithms (NIS and FSR).
  • You can adjust the sharpness.
  • You will improve EFIS legibility.

Going farther

All the aforementioned factors are more or less impacting the performance directly and we suggest you eliminate or reduce the influence of a few of them first. The following is a simple strategy which can help you find an optimal sweet spot.

a) Finding in-game limits

This step consists in finding what render resolution and in-game settings are best suited for your hardware. We suggest you settle on an initial set of in-game settings which are giving you the visual experience you’re looking for while keeping your expectations reasonable for your hardware (the OpenXR Toolkit won’t transform an RTX 2060 into an RTX 3090 but it will help!).

The following consists in using the OpenXR Runtime scaling factor as a tool to measure the game limits:

  • Set in-game render resolution to 100%.
  • Adjust in-game settings for a good balance of visuals and complexity based on your experience and your hardware.
  • Set the OpenXR Toolkit scaling factor to 100%.
  • Adjust the OpenXR Runtime scaling factor from 100% down until reaching your fps goals.

If you can hardly achieve your fps goal when scaling down the OpenXR Runtime resolution below the headset native panel resolution, you might want to trade some of the in-game settings for performance and raise the resolution back up until you can reach at least the panel resolution.

b) Finding OpenXR limits

This step consists in finding the upper limit up to which you can push the OpenXR Runtime and this mostly depends whether you’re using motion smoothing.

The following consists in using the OpenXR Toolkit scaling factor as a tool to measure the OpenXR Runtime limits:

  • Keep in-game render resolution to 100%.
  • Note the OpenXR Runtime scaling factor you’ve reached in the previous step and adjust the OpenXR Toolkit scaling factor with the same value.
  • Reset the OpenXR Runtime scaling factor back to 100%

From there, if you’re hardware delivers, you can adjust the OpenXR Toolkit scaling toward 100% (for example from 70% up to 100%, or from 140% down to 100%) and stop right before the OpenXR Runtime stutters or glitches too much when using motion smoothing for example.

On the other hand, if your hardware isn’t delivering, you can adjust the OpenXR Runtime scaling down from 100%, and adjust the OpenXR Toolkit scaling toward 100% at the same time. The goal is to keep the game render resolution as close as possible to the one found in step a) while lowering the display resolution at the same time and therefore reducing the load in the OpenXR Runtime.

c) Finding the best visuals

The general recommendation for the best visuals depends on whether closer objects legibility is more important than distant scenery. If this is the case, the closer to 100% is the OpenXR Toolkit scaling factor, the more legible the closer objects. Conversely, the higher the OpenXR Runtime resolution is, the more detailed the distant scenery is.

There is no universal recipe and the end result depends a lot on the VR headset resolution, the render settings, and whether using motion smoothing or not. Experiment and try out different combinations!

Disable in-game sharpening

Some users have reported better quality when disabling the in-game sharpening. This can be accomplished by manually editing the game’s UserCfg.opt file.

Prior to modifying the file, be sure to make a back-up copy.

This file is located in a different folder depending on what store the game was purchased from.

For the Microsoft Store edition, the file is located at C:\Users\your_login_name\AppData\Local\Packages\Microsoft.FlightSimulator_#############\LocalCache\UserCfg.opt.

For the Steam edition, the file is located at C:\Users\your_login_name\AppData\Roaming\Microsoft Flight Simulator\UserCfg.opt.

Close Flight Simulator.

Open the file in a text editor (notepad will do if this is all you have available).

Locate the {GraphicsVR section.

In the {PostProcess subsection, set the value of Sharpen to 0.

        Enabled 1
        EyeAdaptation 0
        ColorGrading 0
        Sharpen 0    <---
        Fringe 0
        LensDistortion 0
        Dirt 0
        LensFlare 0
        FilmGrain 0
        Vignette 0
        LensBlurMultiplier 1.000000
        FringeMultiplier 1.000000

Note: If you are using the GeForce Experience automatic settings, this most likely cause your changes to the UserCfg.opt file to be erased in the future. You may want to consider disabling automatic settings.

Considerations for hand tracking

See the Hand Tracking page for general details about hand tracking.

Flight Simulator 2020 can make use of hand tracking to control the various knobs, levers, buttons, etc in the aircraft’s cockpit.

Hand tracking in Microsoft Flight Simulator 2020
Hand tracking in Microsoft Flight Simulator 2020

Upon enabling the hand tracking feature in the OpenXR Toolkit or entering VR, the game may report a New Device Detected through a pop-up screen.

New Device Detected
New Device Detected pop-up

The basic configuration included in the OpenXR Toolkit is designed for use in VR controller “direct mode”, which requires to switch to this mode with the B button on the VR controller. In the default configuration, touching the tip of your index fingers (from both hands) will simulate pressing the B button and must be done in order to enter the “direct mode”.

The “pinch” gesture (bringing the tip of the thumb and index fingers together) can be used to simulate the VR controller trigger, which allows to interact with the controls in the cockpit.

The “squeeze” or “grab” gesture (bending the middle finger, ring finger and little finger in a trigger-like motion) will simulate the VR controller grab button, which can be used to “switch the active hand”.

The “finger gun” gesture (using the thumb to “press” into the middle finger while extending the index finger) can be used to toggle buttons on the control panel upon contact (using the trigger-on-haptics feature).

Finally, tapping the left wrist with the right hand index finger is bound to the VR controller’s menu button, which will bring up the menu.

Removing the VR controller model

With the skeletal hands displayed in VR, it might be desirable to remove the “virtual” VR controller display.

Flobud published a Subtle VR Controllers mod that does exactly that! Thanks Flobud!