OpenXR NIS upscaling software - Release thread

The ctrl-F1 thing doesn’t seem to be working for me, it just stays in NIS mode. That key combination is not mapped to anything else. Am I missing something, any hints?

Do I need to remove the NIS checked box first in the tool or something?

Here is a quick benchmark between ALPHA3/4 and BETA1. Performance wise, ALPHA 4 slightly outperforms the other versions when regarding the 1 % percentile.

Who need this the most? Or will it simply make all systems poduce sharper images at lower cost?
Im quite pleased with my sim now the way its tuned, but ofcourse, allways looking for even better.

I could not resist trying out the new NVIDIA driver 497.29 and here are the results compared to 497.09. I don’t know if this could be related to the NIS Scaler but it might be worth reporting it to NVIDIA @mbucchia.


Haven’t tried the newest one yet but I’m not surprised by these results. 0.09 is the best driver in ages for me, probably best since 457.30!

Would have been surprised if it was surpassed or even matched by the next one

I understand that the image quality can be subjective.

For people really interested in doing a deep comparison, here is what I suggest: take a screenshot of the VR view with and without NIS to compare the quality. Then use a tool like Image Comparison Analysis Tool (ICAT) | NVIDIA Technologies, which gives you a slider to compare 2 images.

Note: Please only attempt this if you are tech savvy. I will not answer questions like “how to load a file”, “how to convert an image”, etc. (sorry but I am busy!).

Now you would say, how do I “take a screenshot of the VR view”?

In the new Beta1 of the software, you can enable the screenshot mode from the configuration tool. You can then use Ctrl+F12 in-game to save the left eye view to a file, placed under %LocalAppData%.

You can tell with the filename whether NIS was enabled based on the file name (contains “NIS” + scaling + sharpness when enabled, or “upscaled” when not).

You can use this to take screenshots both with and without NIS.

You will then want to convert the screenshots from DDS format to BMP (lossless) in order to use them in ICAT. I do that with GIMP.

Taking a screenshot with NIS enabled

  • Change your OpenXR render scale, in-game render scale and NIS scaling accordingly for your test;
  • Set NIS to enabled;
  • Enter VR;
  • Take your screenshot with Ctrl+F12.

Example file created:

Taking a screenshot without NIS enabled

Note: the idea here is that when NIS is disabled with Ctrl+F1 and NIS scaling is set to 100%, this is equivalent to “pass-through”, but you preserve the ability to use Ctrl+F12 to take screenshots (ie: without NIS).

  • Change your OpenXR render scale or in-game render scale accordingly (for your test);
  • Set NIS scaling to 100%, effectively preserving the resolution requested by OpenXR;
  • Set NIS to enabled;
  • Enter VR;
  • Disable NIS in-game with Ctrl+F1;
  • Take your screenshot with Ctrl+F12.

Example file created:

upscaled_1.000 in the filename basically means “pass-through”, ie the NIS software is doing nothing.

End-to-end example

Here is an example comparison I have created with and without NIS with the same target resolution of 2540x2492, achieved on one hand with using the OpenXR render scale (65% gave me that resolution) and on the other hand the NIS scaling (80% gave me that resolution - the percentages are calculated differently between OpenXR and my software it looks like).

Open ICAT, load both files, and use the slider. You might want to do an adjust position Up/Down -0.15% to align the 2 images better.

Framerate was 42 FPS with NIS enabled and 45 FPS without it. I personally find the quality with NIS superior (sharper and more details), but I will let everyone be the judge.


The NIS scaled image certainly looks better but I notice it has a resolution of 3152 x 3088. Shouldn’t it be showing around 2540x2492 or is the screen shot resolution what you get after NIS scaling up is taken into account? Put another way, despite the 3152 x 3088 resolution of the NIS scaling screenshot, does MSFS show a render resolution for that scenario of around 2540x2492 when looking under VR graphics settings?

In any case, I will give this a go myself. Thanks for posting up a more objective comparison method.

No scaler = image stays at lower resolution before being passed to the OS. OS will then do another upscaling pass (a cheap one).
NIS scaler = image is now at a high resolution before being passed to the OS.


I have same, worse fps with new nvidia driver. I do re install today or even roll back to the old driver. 3080ti, 9900ks.

It’s linked to the way how the game draws two separate pictures that are shown to each eye.

You have two kinds of IPD (inter pupillary distance) working here: the real life distance between your two eyes and the distance between two images (camera IPD) that are drawn in the game. If these two distances differ from each other your brains will see a “world scaling error”. Ie. If the game draws the 2 camera positions too far from each other compared to your own real life eyes you will perceive the world as being too small. If the game draws them too close you will perceive the world too large.

Currently MSFS has a fixed game camera distance that makes people perceive the world too large or too small if their real life eyes wont match the fixed game inter pupillary distance.

Here is a thread about the issue:

I have no inner knowledge about the workings of OpenXR but I bet there’s a way to move the software camera distance through OpenXR giving us the ability to match the game camera distance to to our real life inter pupillary distance to match the world scale we’re used to. A small offset variable to fix the problem.


Thanks for the comparison. Is that with or without motion reprojection on top of the 30FPS cap?

Been talking offline about it.

It would be possible to take one my previous experiments (GitHub - mbucchia/XR_APILAYER_NOVENDOR_fov_modifier: An OpenXR layer to alter the FOV of the stereo view based on a config file.) and use it to change the IPD as you explained. I think a developer even with minimal C++ experience could do this easily. See dllmain.cpp line 196. You want to take views[x].pose and calculate the new position on a line between both poses for x=0 and x=1, then write that back to views[x].pose for the app to use.

As for me I don’t have time to do it at this time, but I’m hoping somebody can pick it up. If not I can spare some time after Xmas to do it.

If it’s just moving the 2 eye positionS to be closer/farther them its really easy to do, perhaps a couple of hours of work). But what about the gaze? Does that need adjustment to the focus point to?


Am I assuming correctly that it’s also possible to use the sharpening without scaling, that is, scaling set to 1.0?

Yes scaling to 1 will only do the sharpening pass.

Without, never got warm with MR…

I’m not sure what you mean by “gaze”? Do you mean to recalculate the convergence?

As far as I understand is that since we don’t touch the physical lense distances all this is already taken care of in a way and all that really is needed is just to reposition the game camera distance to the correct amount to fix the world scale.

Also, I’m known to be wrong at times (wife says, I’m not buying that myself)


Wow this project happened fast. Just tested it out on my Pimax 4k, 10850k and 3080 and it worked really well. I was running 160% steam VR and now have it on 200% and NIS 80%. The ctrl+F1 worked to verify it was running but I did notice I couldn’t use Steam VRs per application scaling, had to use the global scaling setting.

1 Like

Would love to have an “enable” button at the ConfigUi. At the moment it’s just “move slider” and no confirmation if the change occurred. Leaves the user a bit dark.

So what im doing right now, is finding best visual settings that keep me constant 30fps(with motion reprojection) in high density city. For me is it Helsinki with photogrammetry and with MK Studios EFHK.

That i discovered, Terrain Lod plays little part here. I can put all the settings to ultra (NIS 0,8, OXR 100, render scale in sim 100) if i have tLOD to 0.1-0.6. If i put it to 1.0-1.5, my constant 30fps drops to area of 22-23. Still smooth with motion reprojection, but stutters and lags a little bit because of constant alive fps.

So good news, finnish addon maker Mörkö is releasing new addon i have tested allmost 2 months now: Adaptive tLOD tool. With that tool you can have constant 30fps and tLOD changes in the background without notice and withous stutters. I can put there target fps to 30 and minimun tLod value for example 0.7 and max tLod of 4.0. And when im leaving Helsinki city to the countryside, my tLod is increasing in the background without stutters. So in 30km from Helsinki, i have tLod of something about 1.6 in VR. It will be released soon. Great tool for 2D flying also.

So in meanwhile, i recodemnd to use lower tLod (0.4-0.6) value to have great visuals around you and constant 30fps with motion reprojection.


How do you set tlod to .1-.6? is this terrain lod in msfs settings? I have a gtx 1080 and I’m really struggling with micro stutters when moving my head> I’m looking for any improvment i can find. Rift s also.