7
$\begingroup$

I'm interested in virtual reality, but according to some sources, less than 1% of computers in use today have the necessary performance to run modern VR games, granted many of them are not intended for gaming, that's still a huge barrier for the widespread adoption of VR headsets into the market. So I was wondering what could be done to reduce the performance requirements of a VR game that hasn't been implemented with such optimizations in mind.

I'm talking about technologies like foveated rendering, which (ab)uses the fact that we only ever perceive a few degrees in the center of our field of vision as sharp while everything else is blurry. This can be combined with eye tracking so that only the areas where the player is looking are rendered in full quality, while we can reduce the render quality and therefore the performance requirements everywhere else. This seems like a great advantage and I honestly wonder why none of the major VR companies have implemented eye tracking into their headsets and foveated rendering into their SDKs into their headsets. The technology exists and I can't imagine that it would add much to the price tag. Paper about foveated rendering

There's also instanced stereo rendering which basically renders things to both eyes at the same time rather than rendering it for each eye individually. Example gif for Instanced Stero Rendering - Epic Games, Unreal Engine 4.11 release notes

It's also possible to use just one frustum for both eyes rather than two as discussed here. VR and frustum culling

But are there other approaches to the performane problem?

$\endgroup$
  • $\begingroup$ Temporal algorithms ought to help, by reusing information from frame to frame, thus amortizing rendering costs over time. $\endgroup$ – Alan Wolfe Apr 18 '16 at 4:45
  • $\begingroup$ The question states "acoording to some sources, less than 1% of computers in use...". Could you be more precise in what sources you are thinking of? $\endgroup$ – Andreas Apr 26 '16 at 18:50
  • 1
    $\begingroup$ @Andreas goo.gl/YqMpwQ goo.gl/2oQBPw I did not believe that this statement was relevant enough to the question to require a source. Especially considering that (while the actual numbers are debatable), it is obvious and well known that VR is performance heavy and thus won't run on slower PCs. $\endgroup$ – Syzygy Apr 26 '16 at 19:29
  • $\begingroup$ I was not sure if "some" were some guys you met on reddit rambling or, as the links points out, quite respectable companies and news networks. As for obvious well that is matter of today and tomorrow. Today is 1%. 2020 is estimated 8%. The latter may well cover everyone still interested in VR by that time so it may or may not be a problem. $\endgroup$ – Andreas Apr 26 '16 at 19:55
9
$\begingroup$

Avoid stereo when possible

There was some research published recently measuring when users can or cannot tell whether the specular contribution, which is view point dependent, is different between eyes.

Perception of Highlight Disparity at a Distance in Consumer Head-Mounted Displays

In the future, this could be use to share some computation between the two eye renders. Unfortunately this sounds hard to take advantage of in a typical rasterization pipeline.

Some games already avoid stereo when rendering far objects and background.


Reduce shading when possible

Lens distortion

Part of the NVidia VRWorks SDK is a feature, Multi-Res Shading, that allow to reduce the amount of shading, to take into account the fact that some pixels contribute less to the final image due to lens distortion.

In Alex Vlachos' GDC 2015 presentation, he also mentions the idea of rendering the image in two parts of different resolution, to achieve the same goal.

Foveated rendering

Finally, like your question mentions, foveated rendering aims at scaling the resolution to take into account the fact that eyes have more precision in the fovea and less in the periphery. There is some research on the topic, but this requires eye tracking like in the Fove HMD.

$\endgroup$
8
$\begingroup$

Alex Vlachos from Valve has had two great GDC talks about this:

Other than that (and what you have linked yourself), there isn't much left to do than to simply optimize your app until you spend at most 10 ms per frame (100 Hz, targeting a 90 Hz display + margin). Standard rendering optimizations apply. Apply a technique, profile, determine its impact on performance, rinse, repeat.

You may also exercise caution with that UE4 stereo instancing from Epic. In my experience, its performance boost depends heavily on the game's rendering workload. I had a statically lit game with lots of instanced foliage and this feature has actually been a net loss, probably due to the overhead of left/right eye dynamic branching in the shaders; while a fully dynamically-lit scene may benefit from it all right. As I said before: profile to ensure that a technique actually helps performance.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.