LibreVR / Revive

Play Oculus-exclusive games on the HTC Vive or Valve Index, scroll down for downloads and installation instructions.
Other
3.59k stars 332 forks source link

Revive and reprojection settings - any rules? #577

Open SimplexPL opened 7 years ago

SimplexPL commented 7 years ago

Please label it a question, thanks.

There are three reprojection related settings that I am aware of: 1) Interleaved reprojection - old deprecated method, superseded by Asynchronous Reprojection, no longer used, I think 2) Asynchronous Reprojection - currently best reprojection method available for Vive, for native Vive titles it is recommended to have it enabled (unless you have some kind of monster rig) 3) Always-on reprojection - this is the most "mysterious" option, available in developer settings. It has a confusing name, many Vivers (me included) thought that it forces 45fps at all times, but it turns out it does not. Enabling this option somehow... changes how long CPU is waiting for GPU to render frames? I'm not sure I get it, here's some technical explanation: https://www.reddit.com/r/Vive/comments/53j4v3/til_always_on_reprojection_looks_way_better_than/d8237fx/

My question is - are there any universal rules when using Revive, such as which reprojection options should be enabled or disabled at all times, or does it totally depend on the game? Do reprojection settings affect all games run through Revive, or does it depend on the game?

CrossVR commented 7 years ago

Good question and I'd definitely like to write a Wiki article on it, since this is an important subject when running Revive. Some Oculus games rely heavily on Timewarping, which is something that needs to be handled properly by Reprojection.

  1. Interleaved reprojection - this is not deprecated and is still in use. This is necessary for games that just can't get 90fps either due to CPU or GPU bottlenecks. The Climb benefits a lot from interleaved reprojection, since it can't reliably get 90fps even on an Oculus Rift.
  2. Asynchronous reprojection - this should be used for most games, as it is nearly equivalent to Asynchronous Timewarp in the Oculus SDK. However there is one notable difference, Asynchronous Reprojection can cause judder (sudden jumps in the tracking) in games that use multiple frames of prediction. Games that use multiple frames of prediction are: The Climb, The Unspoken, Edge of Nowhere and Chronos.
  3. Always-on reprojection - like interleaved reprojection this option resolves CPU bottlenecks, but it comes at the cost of extra positional tracking latency. It should be used in seated games that are bottle-necked by the CPU, a good example would be Dirt Rally.

Thus the rule is: Use Asynchronous Reprojection unless you notice judder. When you notice judder disable Asynchronous Reprojection so you can fallback to Interleaved reprojection.

If it is a seated game and you think the game could run at more than 45fps if you remove the CPU bottleneck, then turn on Always-on reprojection. Only use it in specific situations.

SimplexPL commented 7 years ago

Great write-up, thanks! I had no idea that interleaved still makes sense under certain circumstances.

lghtanddrk commented 7 years ago

I haven't seen the Always On option listed in the developer settings in a long time. I just have interleaved and asynchronous. where did the other option go?

SimplexPL commented 7 years ago

It should be in developers options. It's also available in OpenVR Advanced Settings.

lghtanddrk commented 7 years ago

I see it now. I don't know how I missed it. Thanks.