Jump to content

OpenXR support for IL-2 and DCS for Windows Mixed Reality VR headsets


Recommended Posts

Posted

Some thoughts on …

 

How Motion Reprojection works with OpenXR Toolkit

 

background

Everyone knows, that VR is very demanding for performance and very sensitive on how visual quality in VR is perceived.
The high demand for performance results of the high frame rates needed to run a modern VR headset as intended ( defined by the Hz frequency of its displays ).
The most common value is 90Hz for most of the VR displays, means any VR application need to run at 90 FPS to work optimal ( some newer Oculus headsets work with 80Hz, Pimax and Valve Index headsets could be set to 120Hz or 144Hz ). Running a 90Hz VR headset significantly below 90FPS causes stutters in the process of a fluid and continous projection of each computer generated frame within the frequency of 90Hz, which may result, at least on longer VR sessions, nausea effects and/or uncomfortability, because instead of monitor/flat screen the eyes are only few centimeter from the display and the brain is shut off from real world impressions.

In game stuttering isn´t welcome anyways, but much more sensitive in VR.

In view to that high demand for performance the first and still most of VR games provide less graphical fidelity for example by low-fidelity  ´comic´-graphics ( without perfomance demanding textures ) and/or simple gameplay-mechanics to save cpu-processing and gpu-graphics processing power in order to make the VR games run optimal at 90FPS on low and midrange systems.

With DCS World and IL-2 Sturmovik we are on the very other end of the spectrum regarding the demand for CPU and GPU processing power.

 

general

To balance out this high demand for performance but keeping a fluid ( smooth ) image processing for 90Hz VR headsets to keep VR a comfortable experience, Oculus invented an algorythm, which forces the render process to create only 45FPS instead of 90FPS. Each of these 45 rendered images then is copied and re-projected between each real rendered image.
In result in the headsets is seen a constant and fluid 90Hz/90FPS smooth image continuity, but the CPU/GPU only need to render 45FPS and the reprojection algorythm fills the 45 real rendered frames with 45 copies of a before rendered real frame up to 90FPS. Reprojection processes 1 real Frame, 1 copied frame of that real frame before, then one real frame and again 1 copy of that real frame to reach 90 frames per second on the 90Hz displays of the VR headset but with half of the demanded performance of the GPU/CPU.
SteamVR adopted this algorythm.
Microsoft as well adopted the algorythm for OpenXR, but with some differences.

If motion reprojection is set to ´automatic´ in SteamVR or Microsofts OpenXR developer tool, the algorythm measures the GPU/CPU frametime constantly. If these frametimes exceed a fixed value, which is needed to guarantee constant 90fps, it switches automatically to the need of 45FPS instead and re-projects each rendered frame as a copy as described before to provide the fluidity/smoothness of 90Hz for the eyes. For SteamVR this threshhold is around 10% below the targeted frequency, means: if you are running a HP Reverb with SteamVR and the CPU/GPU can´t maintain between 81 - 90FPS, reprojection switches automatically to 45FPS, but you keep the smoothness of 90Hz in VR ( 45 real frames + 45 copied frames ).

OpenXR reprojection has got two more threshholds, but the frametime windows to switch is more tighter in my observation.

If set motion reprojection to ´automatic´ in Microsoft OpenXR developer Tool, it switches automatically from 90FPS to 45FPS slightly below 90FPS ( at around 87FPS ).

If the 45 real rendered frames can´t be maintained, OpenXR switches automatically from 45FPS to 30FPS slightly below 45FPS and creates 2 instead of 1 copy of a real rendered Frame to fill up the 90Hz frequency ( 30 real rendered frames + 2 x 30 copied frames ).           

If the 30 real rendered frames can´t be maintained, OpenXR switches automatically from 30FPS to 22,5FPS slighty below 30FPS and creates 3 copies of a real rendered Frame to fill up the 90Hz frequency ( 22,5 real rendered frames + 3 x 22,5 copied frames ).

Don´t ask me how 0,5 frame may look like, but this is how the algorythm works.

 

 

downside of reprojection

The big advantage of reprojection is to guarantee a smooth image without stutters at 90Hz in VR.
The downside is occasionally visible:
If reprojection works within its parameters ( maintaining 45FPS all the time for SteamVR/OpenVR and in first step for OpenXR ) there is no difference visible in the image quality of slow moving objects from the point of view, like looking at the ground from 10.000 ft. Or watching aircrafts from 20 miles distance. It depends how fast a object is moving in the frames you are looking at.

Reprojection gets visible for example by flying very low with high speed over a city with many buildings, while you´re looking at your 3 or 9 o´clock Position ( left or rigt out of the cockpit ). At this Point of View objects are passing very fast through the Point of View.

Example: Flying low level over Beirut in DCS and looking to the left out of the cockpit focussing on the closest building. This building will pass in less than a second the point of view, means the game engine has got 90 frames per second to render this movement properly to the point of view. If reprojection is activated, there are only 45 frames really rendered in that second and the remaining 45 frames are copies, what results in a ´ghosting´ effect, while the object passes the point of view. The ghosting effect is the result of a frame staying longer in the POV because the frame is just a copy and therefore the same frame as that one before.

The same is when passing other aircrafts very close or when rotating fast around the own aircraft in external view.    

 

In IL-2 Sturmovik this downside effect of reprojection appears a bit different in my observation.
At a POV as described in the example above, there is not so much a ghosting effect, but more a ´warping´ effect of that focused close object, like a flip book the object jumps from one position to the next during the pass.
In IL-2 in my opinion - please verify with your own experience - reprojection also has got a downside for proper aiming and shooting at the enemy aircraft - to me it appears much easier without reprojection in IL-2, so I would recommend to disable motion reprojection in IL-2, as IL-2 is anyways less demanding than DCS and 90FPS are reachable, when reducing the graphics fidelity like shadows, high ground textures, mirrors, MSAA , etc. in the ingame settings.

For DCS instead, even with the most demanding ingame graphics settings reduced or turned off, 90FPS are unthinkable ( at least on my system with a RTX3090 and 100% render resolution ), therefore reprojection should be always on in DCS. Also reprojection in DCS hasn´t got a such noticable downside effect as in IL-2 in my experience.
In DCS with current ingame graphics settings, I could maintain solid 45FPS with the Harrier and some older modules. The newer modules switch by OpenXR to 30FPS, what is worse than 45FPS regarding the ghosting effect due to motion reprojection, but provides an overall smooth and stutter-free experience as well for the high performance demanding newer Modules.

 

 

Motion Reprojection settings in the OpenXR Toolkit

There are two lines in the OpenXR Toolkit to set motion reprojection:

  1. Motion Reprojection: DEFAULT, ON or OFF
  2. Lock motion reprojection: ( unlocked / 45 / 30 / 22,5 )

The good thing of the OpenXR Toolkit is, that it overrides the settings of Microsfts OpenXR developer tool and it saves the setting for the game in which you adjust the motion reprojection with the OpenXR Toolkit
This is really nice, as you don´t have to reset motion reprojection every time when starting another game.

Line 1. DEFAULT: I´m not sure, as I didn´t test it, if „DEFAULT“ does do that, but I would assume, if set to „DEFAULT“ it won´t override the Motion reprojection Settings in Microsoft OpenXR developer tool ( where you could set motion reprojection to „deactivated“. „automatic“ or „always on“ ).

Line 1. ON: well, it´s on. But it overrides the setting in the Microsoft OpenXR developer tool.
If you are in DCS and set the motion reprojection setting in the OpenXR Toolkit to ON, it saves that setting for DCS. If set in the Toolkit in IL-2 to „OFF“ the Toolkit saves that setting for IL-2 and you never have to switch the motion reprojection setting before starting DCS or IL-2 again unless you want to.

„ON“ also means, that OpenXR motion reprojection works with the two additional steps to 30FPS and 22,5FPS as described above.

 

Line 2. UNLOCKED means the locking process for motion reprojection is deactivated, motion reprojection works with its intended functions by default, like set in Line 1. to „ON“

Line 2.: „45“ or „30“ or „22,5“ locks the reprojection to one of the possible steps it provides, means: if set to 45 you will always get 45 FPS, no matter if the system reaches 90FPS - it is locked at 45FPS always. This counts as well for the other step; if locked to 45 it won´t step down to 30FPS step, if the frametime exceeds the threshhold, instead if you are dipping below 45FPS, let´s say at 38FPS, you will get 38FPS but with significant stutters, because it tries to create 45 copies of only 38 real rendered frame, what results in a mess.

I´ve tried that quite a while for DCS and it turned into a mess when switching from the Harrier to the Viper and flying low level or in high demanding scenarios with the Viper then, because the Viper couldn´t maintain 45FPS most of the time, while the Harrier could.

So, locking at 30FPS works the same, you will always get no more than 30 FPS with 2 copied frames. Same applies for 22,5 in that way.

 

 

Some recommendations to deal with motion reprojection in OpenXR Toolkit

Start DCS in VR, open OpenXR Toolkit and set motion reprojection to „OFF“. DCS needs to be closed and restarted to take effect. Then set the FPS Counter in OpenXR Toolkit on, to observe the real rendered frames your system is capable of. Fly around in some stress situations with high workload for the graphics processing and observe the average FPS the FPS Counter is showing. No matter how much it stutters at this Moment, just have a look on the FPS counter.
It shouldn´t go below 30FPS, if it goes below 30FPS, then reduce some ingame graphics settings to result in stable 30FPS or above. You surely reach much higher FPS at 30.000 ft. over the sea, but you don´t want to have a bad VR experience in DCS in low level flight or at start or landing with your favourite aircraft.
There is this last step in OpenXR motion reprojection at 22,5FPS, but that is not really something to aim for…at least for me.
After the FPS counter confirms, that you don´t dip below 30FPS, turn reprojection to „ON“ and restart DCS.
Set the 2. Line to ´unlocked´. The algorythm decides by its measurements of the performance demand to which step in reprojection it needs to turn, what works very good with OpenXR in DCS and avoids turning DCS into a stuttering mess.
It is barely noticabel when OpenXR reprojection switches from 45FPS to 30FPS, but you should enjoy an overall smooth and fluid VR image processing all the time.

 

My recommendation for IL-2 Sturmovik is different: Start IL-2 in VR, open OpenXR Toolkit and turn motion reprojection to „OFF“.

Restart IL-2 and turn the FPS Counter in the OpenXr Toolkit on. Try to reach and maintain 90FPS by reducing ingame graphical settings as shadows, ground textures, 4k Textures, Mirrors or MSAA as much as you are comfortable with the graphic fidelity. Another method is to make use of the Upscaler ( FSR ) in the OpenXR Toolkit to get more performance to reach and maintain 90FPS at any costs.
The very last switch to adjust, is reducing the renderscale in Microsft OpenXR developer Tool, but this reduces visual quality and clariness in VR and may induce shimmering effects on thin lines, but try to get 90FPS in IL-2 at any cost. ( reducing the renderscale could be also done by the override function in the Toolkit, but I didn´t tried that out )

There are no advices to whatever makes a very personal VR experience enjoyable. Try some variations, like motion reprojection "ON" in IL-2 and decide by your own, but I thought it may be helpful to know how motion reprojection works, to better deal with it.

Posted

Kameraden,

I'd like to compare results, both DCS and il-2.

Just started il-2 last night for the first time with the new setup, was pretty good out of the box but I'd like a baseline for the game and tools. I'll see if I can screenshot in VR.

S!

  • 4 months later...
Posted

Today an updated version of the Windows OpenXR developer tool and the OpenXR toolkit was released.

To update the Windows OpenXR developer tool simply go into the Windows Store App and update the Apps in your library - no more action needed.

To update the OpenXR toolkit got here https://mbucchia.github.io/OpenXR-Toolkit/ , download the latest version of the OpenXR toolkit ( 1.2.1 ) and install it - no more action needed.

With the updated OpenXR toolkit there are two new option:

1. Turbo mode: it should increase FPS, when not using reprojection, didn´t test that, as I need reprojection.

2. CAS sharpening: That´s a good one! Before the update, I had FSR activated and sharpening set to 60%. After the update I´ve activated CAS instead and left sharpening at 60% - the overall image quality is significantly better to me now.

Posted

I finally got around to installing Opencomposite, OpenXR Toolkit and XRNecksafer this weekend which really was a breeze. Also installed the latest Nvidia drivers.

For instructions I used this https://forum.il2sturmovik.com/topic/79847-step-by-step-instructions-for-openxr-and-necksafer-for-wmr-sets/ and combined it with the recommendations for the settings in the OpenXR Toolkit and in the Nvidia drivers for Il2 from this guy who has spent quite some time optimizing OpenXR for IL2.

I was absolutely blown away by the results. The visuals literally felt as if my Reverb (G1) had a significant increase in resolution, I am thoroughly impressed.

@Gus I installed OpenXR toolkit 1.2, but I will update to 1.2.1 to check the CAS sharpening vs. FSR, thanks for the heads up 👍

Posted

Installed 1.2.1 and it borked everything. Open XRtoolkit companion had "Disable the Openxr Toolkit" box checked and no amount of clicking got it to work. XRNecksafer was also inop. Labroisse had the same issue. He recommended uninstalling 1.2.1 and Necksafer. Reverting to 1.2.0 and reinstall XRNecksafer brought everything back.

Labroisse mentioned something about having to go into the Windows Registry and making some adjustments but he had to leave before I got the gist of it. I think he may have found the answer.

Before you try this be sure that you have the previous items available. I'm sure there will be a resolution soon. Jaus had no issues. Or maybe hold off until it's solved. 

Posted
6 hours ago, Vonrd said:

Installed 1.2.1 and it borked everything. Open XRtoolkit companion had "Disable the Openxr Toolkit" box checked and no amount of clicking got it to work. XRNecksafer was also inop. Labroisse had the same issue. He recommended uninstalling 1.2.1 and Necksafer. Reverting to 1.2.0 and reinstall XRNecksafer brought everything back.

Labroisse mentioned something about having to go into the Windows Registry and making some adjustments but he had to leave before I got the gist of it. I think he may have found the answer.

Before you try this be sure that you have the previous items available. I'm sure there will be a resolution soon. Jaus had no issues. Or maybe hold off until it's solved. 

Vonrd,

My updates went without a hitch. I'm available if anyone has questions.

S!

Posted

@Vonrd have you updated the companion app once in a while? Sometime ago I did that, which was also a one-click job within the companion app.
Necksafer is working after the OpenXR toolkit update. The new CAS sharpening made that update worth to me.

EDIT: oh, just figured out, that above I´ve meant to update the OpenComposite Runtime switcher and not the companion app ...

Posted
9 hours ago, Gus said:

update the OpenComposite Runtime switcher and not the companion app ...

@Gus, how to update this? I show OpenComposite.exe as version 1.0.0. Do I re-download and run the OpenComposite installer?

Posted

When you execute the OpenComposite.exe there should appear a small window on the desktop. In that window you could switch from SteamVR to OpenXR and there is also a huge button to update the application. 

Edit: Have to look for a download link by myself, but I have attached the OpenComposite App which is in use on my system. Just execute, update and switch to OpenXR.

OpenComposite (1).zip

Posted
2 hours ago, Gus said:

When you execute the OpenComposite.exe there should appear a small window on the desktop. In that window you could switch from SteamVR to OpenXR and there is also a huge button to update the application.

Got it. Updated. I'll wait to do all of the other updates until after practice tonight. Thanks!

Posted
On 11/3/2022 at 10:04 PM, Vonrd said:

Installed 1.2.1 and it borked everything. Open XRtoolkit companion had "Disable the Openxr Toolkit" box checked and no amount of clicking got it to work. XRNecksafer was also inop. Labroisse had the same issue. He recommended uninstalling 1.2.1 and Necksafer. Reverting to 1.2.0 and reinstall XRNecksafer brought everything back.

Labroisse mentioned something about having to go into the Windows Registry and making some adjustments but he had to leave before I got the gist of it. I think he may have found the answer.

Before you try this be sure that you have the previous items available. I'm sure there will be a resolution soon. Jaus had no issues. Or maybe hold off until it's solved. 

Sorry, meant to post this yesterday but drank too much and passed out.

For those having trouble with OpenXR Toolkit 1.2.1 being "disabled" (open Toolkit Companion and "disable" check box is ticked and can't untick)after loading:

   1.  Uninstall OpenXR Toolkit 1.2.1

   2.  Uninstall Necksafer (your settings for Necksafer and OpenXR Toolkit should come back after you reinstall)

   3.  Use the registry editor to go to the registry key:

               HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenXR\1\ApiLayers\Implicit

               and delete everything in that folder (the default key can't be deleted)

   4.  Reinstall OpenXR Toolkit 1.2.1

   5.  Reinstall Necksafer

Should now be working.  My problem was having two Necksafer API keys in the registry.  Once uninstalled and the duplicate key deleted, 1.2.1 installed fine and is working.

P.S. gained about 2 fps enabling "Turbo" in toolkit.

Ferd

Posted

@Labroisse That would make sense, that the Necksafe might be the cause for the issues in updating the toolkit to 1.2.1, as so far I didn´t updated to the newer OpenXR Necksafer version, which came out recently and still running the first OpenXR Necksafer version, hence no additional registry key for the Api Layer ( Necksafer ) and no issue in updating the Toolkit ...

Did you recorded the increase in perfomance by "Turbo mode" with or/and without reprojection activated? I´ve read in the DCS forums, that it should only work when reprojection is disabled, but I wouldn´t rely on the user comments made there. 

Posted
12 hours ago, Gus said:

@Labroisse That would make sense, that the Necksafe might be the cause for the issues in updating the toolkit to 1.2.1, as so far I didn´t updated to the newer OpenXR Necksafer version, which came out recently and still running the first OpenXR Necksafer version, hence no additional registry key for the Api Layer ( Necksafer ) and no issue in updating the Toolkit ...

Did you recorded the increase in perfomance by "Turbo mode" with or/and without reprojection activated? I´ve read in the DCS forums, that it should only work when reprojection is disabled, but I wouldn´t rely on the user comments made there. 

Reprojection disabled.  But, after testing a little more I think Turbo is inducing some lag so for 2FPS I just turned it off.

  • 4 weeks later...
Posted
On 11/6/2022 at 10:28 PM, Labroisse said:

Reprojection disabled.  But, after testing a little more I think Turbo is inducing some lag so for 2FPS I just turned it off.

Labroisse,

Based on video's by  Iceman VR, here is a good baseline setup for DCS VR. This is where I started, before tweaking. Override Resolution can be set to NO since it's the same as the other main setting.

QHpCTje.png

04rm0Kg.png

x2a7qml.png

zZjA3J8.png

WziAHaG.png

Ewl4IDY.png

S!

Posted

@Lipfert I have to ask back. With that setting you get 45FPS with reprojection and 70 - 90 FPS in DCS, let´s say in a free overfly with a jet over Syria? My setting is very similar, but got only around 50 FPS without reprojection.

I´m using CAS sharpening 60% in OpenXR toolkit ... could that be a FPS killer?

Posted
2 hours ago, Gus said:

@Lipfert I have to ask back. With that setting you get 45FPS with reprojection and 70 - 90 FPS in DCS, let´s say in a free overfly with a jet over Syria? My setting is very similar, but got only around 50 FPS without reprojection.

I´m using CAS sharpening 60% in OpenXR toolkit ... could that be a FPS killer?

Gus,

Last night while dogfighting, I went default VR game settings and bump up MFAA to x2.  Seemed pretty good to me. I'll try CAS and see what I get. But less seems to be better.

S!

Posted

For sure, OpenXR and toolkit options made DCS VR look impressively crisp, without nearly no shimmering ( only distant clouds ), no screendoor effects or aliasing effects in VR which bothered a lot before. VR never looked as good as at the moment to me and performance with 30FPS by reprojection feels acceptable and smooth to me. The only thing is, that it could look & feel a bit better with 45FPS with reprojection. But knowing, that it could look and feel much, much better and almost perfect without any reprojection at 90FPS still bothers a bit.
I wonder what we could get out of the system, when multithread is avaiable in DCS.

With CAS the cockpits are such crisp, maybe need to balance that out a bit. 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...