Thanks @NumberNumber481 for filling in and yes your explanation is perfect.
@FarFutureFox sorry for the wonky instructions. In this case the app name is FS2020, I just wrote the instructions so that people could also use it with other applications.
The ZIP file comes with a pre-configured FS2020.cfg file with some OK defaults.
I’m might be not the sharpest tool but even log and everything looks ok, I don’t see any difference, I’m using a HTC VIVE pro 2, no more fps or sharpness.
The “only” things it doest is decresing my GPU usage from 85% to 75% but I gain blurry and “some” bad effects, looks like working for a lot of people but not for me.
RTX 3070
Btw, I appreciate the time you spent for us, I always admire people who are always willing to spend time for people for no reason than make people happy.
WIth the API active, I’ve been reporting issues with my G2 left screen flickering at 60Hz so after many months I decided to try 90Hz again.
Guys, this is crazy! With MR ON I can now keep stable 22.5fps over New York/Tokyo in my JP Cessna 152 which was impossible previously.
With MR OFF I get stable 31-32fps approaching EGLL in FWB A32NX.
Now the best part, my FS2020.cfg settigs are as follow:
scaling=1.0
sharpness=0.2
OpenXR Custom render scale OFF
100% in game res, which is 2480x2480px
Clear and sharp as never before.
I am not 100% sure I even understand it all myself - but here’s what I can say:
The OpenXR render scale adjusts the resolution of the VR headset that applications see. So we’re telling the application: you should target that hardware resolution.
If you have it set to 100%, then the application basically sees the native hardware resolution.
If you have it set to more than 100%, then you’re asking the application to draw more than it should, and the OS will downscale that image. This can make the image look more crisp, but requires extra processing from the application.
If you have it set to less than 100%, then you’re asking the application to draw a smaller image, and that image will be upscaled by the OS. This saves on processing since the app draws less. The OS will then perform vary basic upscaling of the image, which will result in a blurry image.
I am not exactly sure what the in-game rendering scale, but here is my guess. I believe the game has its own upscaling algorithm, which is likely comparable to the upscaling I described above by the OS.
→ Now we’re adding this NIS scaling in between the application and OpenXR. The goal of NIS is to do upscaling but with a more advanced algorithm that will create a sharper image (as opposed to the blurriness I described above).
So eventually, the resolution the app will draw to is:
The order the scaling happens (meaning the actual image processing to bring an image from a resolution to another one) is the reverse of that, and for each of these steps, if the corresponding render scale is not set to 100%, then either upscaling or downscaling must happen:
The game upscales the image first using the in-game setting to match the resolution returned by OpenXR (if you are not using the NIS layer) or of the NIS layer (when present).
The NIS layer (when present) upscales the image using its own setting and to match the resolution returned by OpenXR.
OpenXR or the OS either upscales or downscales the image using the OpenXR custom render scale and to match the native resolution of the headset.
The NIS scaler is meant to do a better job at upscaling than any other part of the process!
Hence, if your parameters are causing any kind of upscaling to happen (ie: has a value lower than 100%), you should consider setting that value to 100% instead, and use the scaling with the NIS scaler setting instead to achieve the same lever of upscaling.
So my guess, and I think this is getting confirmed by people experimenting on this thread
– If you are trying to get better clarity while keeping the same FPS you already have today:
Set OpenXR render scale to 100% or more → We want to use all the pixels that the headset can draw!
Set the in-game render scale to 100% → We’re not going to use the less advanced upscaling that can cause blurry effects
Only adjust the NIS scaling, the same way you would adjust the in-game render scale before.
– If you are trying to get a higher FPS without sacrificing quality:
Do 1) and 2) from the above
Reduce the NIS scaling factor even more, in order to request less pixels to be drawn by the app, but with the upscaling, get a quality similar to a higher resolution.
For WMR users there is an important note: in the OpenXR Developer Tools, disabling custom render scale is not the same as enabling it with a value of 100%. In the WMR OpenXR runtime, when custom render scale is disabled, the OS will recommend a resolution based on the GPU capabilities (principally the available memory). This can lead to something lower than the native resolution. If you want to force the native resolution, you must enable custom render scale and set it to 100%.
I hope this helps. Looking forward to compiling a list of everyone’s experience above and determine what settings seem to generally work for both use cases described above.
@mbucchia thnx a lot for your effort.The results for me using 100oxr 100 render scale and 1.0 sharpness 0.0 is perfect .The only “negative” is at night .Take a look at the color of the sea .The picture is from the lenses of my G2.
Installed the mod an find the following in the …nis_scalere.log file
XR_APILAYER_NOVENDOR_nis_scaler layer is active
Loading config for “FS2020”
Advertise all texture formats
Prioritize capable formats
Use scaling factor: 0.500
Sharpness set to 0.800
Scaled resolution is: 1586x1550 (50% of 3172x3100)
Using indirect texture format mapping with format 28
Error: The system cannot find the file specified.
Using indirect texture format mapping with format 28
Error: The system cannot find the file specified.
My Reverb G2 image is just solid yellow but I do see the proper VR images on the monitor. The sim runs perfectly other than the G2 image for JUST flight sim (it is perfect in all my other VR applications).
C:\Program Files\OpenXR-API-Layers contains:
FS2020.cfg, the Install and UnInstall ps1 files, and the .dll and .json
What is missing?
Here is the .json:
{
“file_format_version” : “1.0.0”,
“api_layer”: {
“name”: “XR_APILAYER_NOVENDOR_nis_scaler”,
“library_path”: “.\XR_APILAYER_NOVENDOR_nis_scaler.dll”,
“api_version”: “1.0”,
“implementation_version”: “1”,
“description”: “OpenXR NIS scaler API layer”,
“functions”: {
“xrNegotiateLoaderApiLayerInterface”: “NISScaler_xrNegotiateLoaderApiLayerInterface”
},
“disable_environment”: “DISABLE_XR_APILAYER_NOVENDOR_nis_scaler”
}
}
There are a couple of other files in the ZIP file that you need to copy side by side with the DLL. I am afk so I can’t check the exact name but one has .hlsl extension and the other one has .h. This should resolve your problem.
Glad that you confirmed what I did last night: OpenXR custom RS 100%; in-game 100%; 70% in NIS. This gives me roughly the native resolution of the G2 being close to 2160x2160 (per eye). All that is left is to set a sharpness that is satisfying. I’m using a GTX1080ti and, even before, was getting decent performance - and now with a small reduction in overhead; and, there is a discernable improvement in visual quality, particularly cockpit gauges. Thanks again for all your work on this.
One thing that has always puzzled me is why MSFS, OpenXr, NIS don’t reflect the exact resolution (as NV does for monitors) of the G2? WMR shows 4320x2160, so why can’t 2160x2160 be set or recognised anywhere else. The nearest to that is the 70% of 3156x3088 (the OXR ‘recommended’ primary view configuration), being 2209x2161. Is this some locked/inflexible FOV parameter?
I hope this is not a stupid question, but curiosity prevailed.