Monoscopic Virtual Reality (VR)

Yep, that’s the idea to only have one view computed for both eyes. A kind of TrackIR in VR Headset. Additionally I have a friend who can only see with one eye so it will definitively help for people like him.
As you asked first, can OpenXR Toolkit propose such feature? :stuck_out_tongue_winking_eye:

We’re thinking about it but I honestly don’t get it. I need to try an app that does it perhaps. I would think that displaying the same image in both eyes would just not look right.

For people with low/partial vision, the OpenXR Toolkit 1.1 released today has an options to do “eye bias” with the foveated rendering feature to lower the resolution more in one eye (it’s available through the Expert settings menu).

1 Like

Also to be transparent, if we do it outside of the game in OpenXR toolkit, the performance gain will be limited because we won’t be able to entirely remove the second eye pass, but just make it faster on the GPU. Unfortunately the CPU load will likely not decrease too much.

1 Like

I understand. the concept is really between TrackIR and VR. Did you ever tried spherical cinema like I saw when I was young, where you are standing on the middle of a half dome and 2D spherical movies is projected with special lenses? You really have the feeling to be inside the movie, very spectacular with racing or chasing video, or flying one. Usually people fall on the ground at one point, really immersive. I agree VR 3D is far better, but that’s an interresting step under exploited, and it can unleash fps if managed at the source (I understand what you explained obviously).

Hmm OK, I’m not exactly sure what you’re describing can be done in OpenXR Toolkit. Needs digging.

Would be great. My left eye ia nearly blind and i dont need stereoscopic View.

Ist there any solution?

I spent about an hour creating a monoscopic mode in the OpenXR Toolkit. It basically does the following:

  • Tell MSFS that the left eye is in between the 2 eyes (this is to avoid weird distortion when moving your head)
  • Takes the image rendered for the left eye and project it as a virtual screen in front of the user
  • Remove the hidden area mask (the black mask around the edges)

The real challenge here is to create FPS saving… The way most VR engines (and including MSFS apparently) are set up is to always assume you will render 2 eyes. There is no good way to make them render only one eye only. So as described above, you do get monoscopic VR… but absolutely no performance improvement.

Here’s a few tricks I tried:

  1. Pretend that the resolution of the right eye is very small → Engine did not care and still rendered right eye full res (meaning that the engine only looks at the rendering properties for the left eye and assume right eye is the same)
  2. We can’t use a FOV trick to cause the engine to cull all geometry, because as we’ve learned before (and this is the cause of the Pimax FOV issues), the engine only looks at the FOV for the left eye → no opportunity here
  3. What actually worked was to use foveated rendering to put the entire right eye in “cull” mode (meaning don’t execute pixel shading). There’s probably a way to do this with the hidden area mask logic (so it could work even for people who don’t have support for foveated rendering).

So with approach 3), I can reduce the amount of GPU work, but unfortunately, this is nowhere near “doubling the FPS”! Just sitting on the runway I go from 39 FPS to 46 FPS in this monoscopic mode.

So I sort of have something working, but if you ask me… it’s not the same without the 3D effect. Everything is flat as expected. It’s not really a great experience.

I’ll try to put something out for people to try when I have a little bit more time. But I wouldn’t be so hyped about it.

2 Likes

As an update: I’ve tested using the hidden area mask to completely block off the right eye for rendering. It’s blocked off… but it makes no difference in performance, so I guess something must be broken in the engine with it. This means that for now, the only monoscopic mode that I can come up with to boost performance will require VRS support (GTX 16xx & RTX GPUs).

I’m going to swim against the tide here. :slight_smile:

I’m not in favour of this as I think it detracts from the VR experience. I’ve setup MSFS in VR on several machines for my family using a variety of headsets and you really don’t need as powerful a rig as you think if you setup the options carefully. The graphics actually scale pretty well.

The lowest spec system was a 2600 Sandybridge Intel CPU paired with a Nvidia GTX 1070 GPU running on a Oculus Rift and I managed to get pretty smooth frames with reprojection enabled. The stereoscopic 3D depth perception was a huge part of that experience, so I’m not sure it’s a good idea to offer a free pass to less authentic VR.

I appreciate the hard work you did here for sure. Reading your technical approach just confirmed you’re definitively very smart :slight_smile: The switch in between both eyes to center the view, the use of mask and resolution and so on is definitively nice tests you made, thanks for your time!

I still think it’s a valuable solution in between TrackIR and VR (let’s call it “TrackVR”). IMHO far better than TrackIR where you must keep your eyes straight on the monitor when turning your head which is really unnatural IMO (i tried hard to like it during weeks but give-up and sold the TrackIR I had).

@sneaky74 I understand your point of view obviously. Proposing this is interesting for persons (like a friend of mine) having only one eye. If it can provide some fps gain it’s cherry on the cake. Some system may benefit from it (like on GTX970 on systems from friends). If it could save really more fps, I thought about a way to switch on the fly on heavy zone.
Anyway don’t spend too much time on it please @mbucchia , you have so much work to do right now :slight_smile:
Thanks again for all your work so far (without forgetting other ones like @CptLucky8) :+1: :smiley:

2 Likes

So nothing new here i guess :frowning:

If you have a GTX 1660 or an RTX series card, using OpenXR Toolkit with Fixed Foveated Rendering and an eye bias is still your best option to grab a few FPS.

Unfortunately there will be no solution for monoscopic with a perf gain until the game engine properly uses the hidden area mesh given by OpenXR (and I’m not really sure what the bug is with that).

Just checked SU10 - and the engine bug is still there.

What is the bug you are referring to with that hidden area mesh?

The hidden area mesh is typically used for stenciling (meaning create a region where nothing is rendered to), in the case of VR one of the reason you want to do that is to avoid rendering unnecessary pixels (meaning less invocation of the pixel shaders) that are not visible due to the lens distortion.

However, I’ve observed that if I make OpenXR Toolkit return a hidden area mesh that covers one entire eye (meaning don’t render anything for that eye), there is nothing rendered indeed, but the performance is unchanged. This would indicate that somehow the stenciling isn’t correctly applied, and pixel shaders are still called for these pixels, even though they are discarded.

The whole idea of this monoscopic implementation outside of the game engine is to prevent the game engine from drawing one of the 2 eyes, saving performance, and only use the image rendered through the other eye. However, with the hidden area mesh issue described, well only rendering one eye saves absolutely no performance. Defeating the purpose of the monoscopic mode.

By contrast, if I use a different technique (VRS instead of stenciling), only rendering one eye is indeed saving on performance, however VRS is only available on high-end GPUs, which defeats the purpose of monoscopic as a way to to improve performance on low-end systems.

1 Like

Not quite monoscopic, but OpenXR Toolkit 1.2.0 added support for “blind eye” mode for folks who only need left or right display in their VR headset. It helps you gain a few FPS (I measured +5 FPS on my setup) and it works with all GPUs and headsets.

The option is under the System tab of OpenXR Toolkit and takes effect immediately.

1 Like