WMR Scaling and Dev Tools - Some Explanations


You might be wondering about the WMR Dev Tools and the resolution the WMR headset is using. This article is trying to explain all this as well as the caveats you might run into, and some strategies to get the most of your hardware.


In short, WMR OpenXR is automatically scaling down the HMD recommended resolution based on your video card VRam amount. Not only you’re not rendering into the HMD at its optimum resolution, but you don’t have any indication WMR OpenXR is degrading your experience.

For those unfamiliar with this, please understand because of the nature of the lenses and the way the VR system is pre-distorting the image rendered, you have to render at a different resolution than the HMD panels.

Peter Peterson, working at HP VR, is saying it is about 1.5x larger for the G2 (3164x3092 in WMR OpenXR):
Definitive Answer for the 100% Resolution Discussion [reddit]

Now look at what the OpenXR runtime is changing for your FS2020 experience with the Reverb G2:

Using WMR OXR 103.2011.17003

FS2020 Render Res. Post Process Res. Comments
TAA 60% 1898x1855 3164x3092 breathtaking visuals and crisp enough EFIS at ~30 fps

Using WMR OXR 104.2012.9003 (Auto Scale)

FS2020 Render Res. Post Process Res. Comments
TAA 70% 1733x1694 2476x2420 smaller render res., fuzzy visuals at 30 fps
TAA 80% 1980x1936 2476x2420 higher render res. yet fuzzy visuals at 28 fps

With WMR SS Auto (default), even if you’re rendering more pixels, because they are displaying at a non-optimal HMD resolution, the end result as seen in the HMD is fuzzier (I can assure you it is and those of you reading “My VR Settings” discussion can see all the rationale and explanation I’ve shared about my experimentations).

You can you see with the lower HMD recommended resolution due to WMR OpenXR SS Auto (Post Process Res. in FS2020) and the 10-by-10 stepping for FS2020 Render Res, you can never match the “ideal” render resolution you would have configured your settings for.

Using OpenXR Dev Tools

With the latest updates, WMR is now giving the equivalent setting to SteamVR Super Sampling, and because the G2 in particular is requiring 1.5 times as many pixels as the panel for optimum rendering quality, you can take advantage of the CAS Shader vs Rendering Resolution optimal balance for your hardware.

The performance gain (per displayed pixels) using TAA 60 is higher with a higher Post-Process Res because the ratio between the CAS Shader process pixels vs the Rendering Shader pixels is higher and quadratic. In effect, it takes a tiny amount of pixel shader time to upscale the image than to render it at the upscale res. For example in terms of pixel count with the Reverb G2:

WMR OpenXR Render Res. Post Process Res. Comments
TAA 60 + SS 100% 3520790 pixels 9783088 pixels 36% pixels rendered, 62% pixels extrapolated
TAA 80 + SS Auto 3833280 pixels 5991920 pixels 64% pixels rendered, 36% pixels extrapolated

In “My VR Settings” discussion, I’ve posted the rationale and the practical use of choosing a combination of both TAA Render Scaling (Render Res.) and SteamVR SS (Post Process Res.) for the Valve Index. In effect, because FS2020 is using the CAS Shader to upscale the rendered image into the displayed view, and because this CAS Shader takes less resources than the rendering Shader(s) cost, this is helping getting more fps, while keeping sharp visuals both up-close (EFIS) and in the distance (scenery). I find TAA 60% upscaled to 3164x3092 with CAS is giving better details in the outside view than TAA 80% upscaled to 2476x2420 for example.

What is affecting legibility (far and close)

With FS2020, there are mostly 2 factors only:

  • EFIS screens resolution depends on the actual render resolution and you must balance the Render Res. and the Post Process Res. between EFIS legibility, outside view details and fps.
  • CAS Shader savings are optimal at 60 to 70%. Below this it is loosing details and above this it is not saving as much fps.

For example, Valve Index TAA 60 + SteamVR SS 220 is the best I could get for both EFIS legibility and outside view at a distance. Reverb G2 TAA 60 + WMR 100 gives near equivalent resolution but thanks to the finer pixels in the G2 panels you can read better while leaning a little farther back, and gives finer details at a distance (I can see the PHNL runways texture and shape 25 miles out in the G2 for example, not details, but the different texture color, whereas it is more a pixel soup with the Index until much closer).

In general there is no need to increase beyond TAA 70 in both Airliners and GA. With anything above you’re rendering more than the native G2 panels and although the VR processing is counter distorting the rendered view in order to compensate for the lenses distortion, therefore transforming the view into a fisheye view requiring more pixels in the center in theory, I don’t find raising TAA above 70 worth the fps cost when comparing the legibility difference in the headset in practice.

I hope this will help you better understanding this subject and how to turn this to your advantage!


So to summarize you recommend hand picking 100% in the OpenXR dev tools and 70% in the sim?

1 Like

I cannot thank you enough for these posts. This one popped up in the middle of me diving into all your previous posts. First of all, I’ve learned a TON about the “how” of VR from your posts, I really appreciate that.

Now to apply your suggestions and see where I get. One question – you refer frequently to “disabling motion smoothing.” I presume this is because you were testing on Index. Does this recommendation hold true for the G2 using the OpenXR runtime? If so, is disabling reprojection the equivalent setting?


Is this only for WMR headsets, or can Oculus headsets also benefit from this?

Check out his post history, there’s definitely info in there that can be applied across all. In this case, I believe the equivalent of the SS setting he’s referring to would be found in the Oculus Tray Tool. (Not an Oculus user, just spend way too much time on VR related forums.)


(EDIT: I’m not a techie. If anything in here is inaccurate, please let me know!)

CptLucky’s guides are amazing and super helpful, but they assume some basic understanding of what OpenXR even is. I spent hours messing around to understand what is now obvious, so I wanted to offer an explanation for dummies like me.

In the terms I understand it, “OpenXR” is a way for the simulator to talk to your headset using a set of commands that are the same regardless of the headset you’re using. That way Asobo doesn’t have to change the simulator every time a new headset comes out.

If you have a WMR headset, you have a choice of two implementations that you can use: WMR/Microsoft’s default, or Steam’s version.

The first OpenXR implementation comes with the WMR runtime. This is the thing where you launch into the Cliff House. If you’re using that, you can change settings in Steam VR all day and all night and it won’t do anything at all to MSFS.

This default implementation works TERRIBLY. This is why some people are posting that VR is unplayable, and others are thrilled. By default, it is trying to render the full resolution of the G2, which even my 3080 can’t do. Or, you can set it to let Windows decide the resolution (“Adjust Display Resolution->Automatic upscaling”) in WMR settings, in which case it creates a blurry mess.

The FAQ recommends downloading the Open XR development tools from Microsoft, but doesn’t explain why. There are two reasons.

First, you can set a “custom render scale.” This really important. This is the “render res” above, except in pixels, instead of % in the tool. I set mine all the way to 50%. The recommendations from CptLucky are probably smarter.

Regardless, it is important to understand that you’re not really cutting your resolution in half when you do this. Instead, some magic happens. It upscales the 50% to 100% using some magic algorithms. Personally I then set in game scaling to 100%, and that looked really good to me, believe it or not. Like, magically good. The suggestions above are probably even better.

There is a second reason to use development tools. If you allow it to use the pre release version, then you can force motion smoothing/reprojection. This is more magic. If your GPU can only hit 45 fps even with reduced render scaling (like my 3080), it magically inserts every other frame by drawing and “average” image to bring you up to 90 fps. It’s good, but not perfect. Some people don’t like it, maybe because the base frame rates are too low, but for me it brings that silky smooth 90 FPS experience, especially in the cockpit where any lower FPS breaks immersion and makes me queasy. And it smooths out the world too. The only visible distortions for me are right around the edges of the propeller, which I can live with.

Before I figured this out, I did the same thing through Steam. That involves switching to the Steam open XR, instead of the WMR one. (SteamVR->Settings->Developer->Use SteamXR). Now the Steam VR settings will actually do something! (If you open the WMR application after doing it, it will suggest you switch it back. Or you can do it through the registry. There are instructions out there on how to do this.)

Having now compared the two at identical settings, that is with reduced resolution, and motion smoothing/reprojection, Steam OpenXR does a better job than the default WMR OpenXR.

But the preview version of development tools OpenXR does an even better job. It’s brilliant. I went from being very frustrated over VR in the morning yesterday, to being absolutely astounded. I flew around my home state of Colorado last night until my eyes bled.

NOW you can take CptLucky8’s advice.

I hope this helps at least someone!


@CurdledTree18 Wow, you’re a real good person for writing this up. Thank you!

1 Like

I actually read it the other way around so some clarification would be appreciated.

Thanks Curdle, well explained , I’m using a G2 with a mixture of others settings and your openxr settings. It’s like a different sim from yesterday’s stuttering mess. I’m very impressed. :blush:

Thank you for your detailed explanation of OpenXR, it is spot on and you are right it is sometimes confusing. Actually during the beta it has been discussed and explained a lot, and I’m now trying to re-post the relevant information without the beta details which are under NDA.

Now you’re using a different approach (TAA100+SS50 with a G2 for example) which is the same approach I’m also recommending for best EFIS clarity with the Index (TAA100+SS78 with the Index), and this is the point I’m highlighting: EFIS resolution depends on render resolution, not post-processing resolution.

In other words:

  • For best EFIS clarity: TAA100 is paramount, then adjust SS to what your hardware can bear and forget about achieving both inside and outside clarity if your hardware can’t.
  • For best outside clarity, set higher SS (100 for the G2, no need above) and adjust TAA to what your hardware can bear.
  • For best clarity inside and outside (balancing one and the other always) maximize the difference ratio between TAA and SS to an optimal point (which will invariably be TAA60 or TAA70 with higher SS)
  • Otherwise purchase the fastest hardware you can get and be done with settings (TAA100+SS100)!

NB: I have very quite good results with the G2 with TAA110 + WMR SS50 and I’m actually torn between this one and TAA60 + WMRSS100.


I’m definitely going to be trying your alternatives later.

And hey, everybody, I’ve got one more piece of advice: Don’t try to put up an FPS counter in VR and drive yourself insane trying to wring out every 1 fps increase with tiny tweaks here and there. You’ll never actually fly. Load up the sim, choose an airport, and resist the temptation to take off your headset to go back to dev tools, or to hit escape and mess with graphics settings once you’re “close enough.”

You can see that others (CptLucky etc.) have done this work already, and “good enough, with hours more to fly” is way better that “perfect, with hours wasted getting it there.” Although–I have a funny feeling that some people actually enjoy that.:slight_smile:


Motion smoothing/motion reprojection/ASW (Oculus only) are the same thing I think. I see a massive improvement on my G2 with this enabled with little drawback. I’m curious why the captain, who understands this better than I do, recommends turning it off.

Interesting - I’m going to have to give 110/50 a try!

Quick Q - I haven’t had a chance to look, but is WMRSS100 in the latest Dev Tools setting the post-process resolution back to 3164x3092 as it was in v103?? Or does the scale of WMRSS still depend on your VRAM, like in v104?

Yes exactly! I’m glad my suggestion 2 days prior release has been included so quickly (might just be a coincidence as well!)

I’ve posted this here:

1 Like

Ha. Yeah. Either the OpenXR devs were already thinking about it, or you have some serious influence at MS you didn’t know about! :rofl:

Guys this is some serious good stuff! Would anyone mind to translate this into oculus world? Should i be using 70% in game resolution scale and 1.1 super sampling in oculus tray tool? thank you!

1 Like

@wheeliemonsta All bets are open, I don’t know. I’ve also directly contacted a developer in the WMR group via reddit and he has quickly answered too. Now I just wish they’ll also address the other bug I’ve documented to them about the anti-CA process they’ve recently added into WMR and making the G2 more fuzzy than what you’d expect…

Thank you for your kind words! I wish I knew but I honestly even block FB domains at the system level… Having said this, I believe this is done in the tray tool and I’m sure this is documented someplace.

The latest FS2020 is now displaying the actual render resolution in the settings panel which is really helpful. The key to me is keeping the rendering resolution in a budget for my test system (9700K+2070S is fine at around 1900x1900) and then extrapolate the most I can. I can push a little more pixels with the latest WMR OXR with a slight decrease of fps but razor sharp EFIS (TAA110+SS50).

With cv1 speaking of razor sharp feels funny :grinning_face_with_smiling_eyes: