OpenXR NIS upscaling software - Release thread

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: FS2020_20211221_102322_NIS_0.800_0.200.dds

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: FS2020_20211221_102540_upscaled_1.000.dds

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.

4 Likes

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.

2 Likes

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.

3 Likes

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?

3 Likes

@mbucchia
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)

2 Likes

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.

7 Likes

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.

Yes tLod is terrain that you can edit with slider 10-400 (10 is 0.1).

Thank you for the explantion. I’ll give it a try I have it set at 200 now

Weird stuff, but this software after installation causes huge stutters when moving the camera like it was the case with the original SU5 before the hotfix which introduced the offscreen terrain precaching. It’s stuttering with gaps in the Main Thread and Rdr Thread even when VR is not on and the headset is completely switched off. I was tearing my hair off my head trying to understand what caused that until I removed the NIS tool and everything got back to normal. Not sure how this can be connected, but a fact of the matter is it is…

I noticed this too with a pimax 8kx. The alpha 4 release allowed per application setting changes but not the beta.