cancel
Showing results for 
Search instead for 
Did you mean: 

Oculus Link Resolution with v12

volgaksoy
Level 5
With the release of v12 for the Oculus PC runtime, we now allow overriding the default Oculus Link Resolution using the Oculus Debug Tool (ODT) which is located under the .\Support\oculus-diagnostics\ folder of the Oculus PC runtime install path (e.g. c:\program Files\Oculus). Keep in mind, this is not the final solution for performance tuning of Oculus Link. It is recommended that only advanced users with powerful GPUs experiment with the ODT settings as changing them without a good understanding could potentially lead to a poor VR experience.

In ODT, find the "Oculus Link" section with "Encode Resolution Width" and "Distortion Curvature". Also note the "Pixels Per Display Pixel Override" (short "Pixel Density") value up top.
  • For most fields in ODT, 0 or "Default" means "do not override the value".
  • Changes to the "Oculus Link" values require an Oculus Server restart to take effect, which can be done directly inside the ODT menu option, or from the "Beta" tab in the Oculus desktop application.
  • Depending on the VR app, changes to the "Pixels Density" might require the VR app to be restarted, but won't require the Oculus Server to be restarted.
  • "Oculus Link" fields will persist after the Oculus Server is restarted.
  • "Pixel Density" will not persist after the Oculus Server is restarted.

Initial tuning recommendations - start with these and adjust as needed:
NVidia RTX 2070+ or comparable GPUs - Curvature "Low", Encode Resolution "2912", Pixel Density "1.2"
NVidia GTX 1070+ or comparable GPUs - Curvature "High", Encode Resolution "2352", Pixel Density "1.1"
NVidia GTX 970+ or comparable GPUs - Curvature "Default", Encode Resolution "2016", Pixel Density "1.0"

When tuning, keep in mind:
  • "Pixel Density" is per-dimension. e.g. a setting of 1.2x means 1.44x in 2D, which means 44% more rendered pixels. 2.0x means 300% more rendered pixels.
  • Higher "Pixel Density" can cause dropped VR app frames and will vary based on the performance characteristics of the VR app.
  • Higher "Encoder Resolution" can lead to dropped compositor frames as well as visible tearing. This is mostly tied to the encoding capabilities of the PC GPU and Quest.
  • Higher resolutions in general can also lead to higher latency.
  • Unnecessarily high resolutions (especially "Encode Resolution") can lead to aliasing artifacts (i.e. pixel crawling) on high frequency details.
  • To revert changes, set them back to 0 or "Default" where applicable.
123 REPLIES 123

Kung-Foo-Kamel
Level 4
Couple of questions.

  1. I assume that pixel density is similar to SS in Steam?
  2. Is there any point to increasing the video encoding resolution without increasing the pixel density?
  3. Would it be better to match the encoding resolution with the rendered resolution?
  4. Does the height scale with width and I assume that the encode resolution is both eyes combined?
  5. What pixel density or rendered resolution does the Oculus Rift software use by default?
  6. Is there anyway to lock in the pixel density?

I just tested the following

Low, 3648, 1.3 with native Rift games and performs perfectly
Low, 3648, 1.3 with 2 x SS in SteamVR and Pavlov ran perfectly, no lag or issues perceived, played for about 30mins

I noticed a massive improvement to viewing things further away and everything up close looks possible better than my WMR headset, really impressed with the image quality.

If the Rift software is rendering the game by default at 1440 x 1600 per eye, then I would assume we would want to encode at 2880 at a minimum.

SteamVR at 1 x SS (100%) seems to be rendering at 1800 x 2000, is the default it detects from the Rift software?

My System:

Ryzen 7 @ 3800mhz Per Core
16GB DDR4 3000mhz
Nvidia GTX 1080 TI HOF



volgaksoy
Level 5
- I assume that pixel density is similar to SS in Steam?
I don't know if Steam's SS is per-dimension or full 2D. Do not change both SteamVR and Oculus values though. Otherwise I suspect the effect will be combined.

- Is there any point to increasing the video encoding resolution without increasing the pixel density?
In general, no. However, in some circumstances, it can help shrink the video compression artifacts if that is a concern.

- Would it be better to match the encoding resolution with the rendered resolution?
A
form of fixed-foveated distortion is applied before generating the encoded buffer. So
the app render resolution and encode resolutions should
definitely not be the same. That would be a waste of performance
and bandwidth as well as potentially hurting the final quality. See our "AADT" section in the blog post for more info here:
 
- Does the height scale with width and I assume that the encode resolution is both eyes combined?
That is correct.

- What pixel density or rendered resolution does the Oculus Rift software use by default?
Pixel density is a multiplier on the base app resolution defined per-HMD type. So the runtime by default is always set to 1.0x.

-
Is there anyway to lock in the pixel density?
There isn't a way to lock
pixel density via ODT. Some games such as Elite Dangerous provide this option
in their graphics settings. I've heard the unofficial "Oculus Tray Tool"
might do this but haven't tried it myself. While we could expose a way to lock the app render resolution via ODT, we are planning to streamline resolution & performance tuning which will eliminate the need for using ODT.

- If the Rift software is rendering the game by default at 1440 x 1600 per
eye, then I would assume we would want to encode at 2880 at a minimum.
- SteamVR at 1 x SS (100%) seems to be rendering at 1800 x 2000, is the default it detects from the Rift software?
Per
my comment above about "AADT", by default the Rift software is not
rendering the game at 1440x1600 per-eye, but at the resolution SteamVR
is showing.

Shadowmask72
Level 16
Would be great to hear some feedback from users how much of an impact this has on visual quality & performance.


System Specs: ASUS NVIDIA RTX 3090 TUF GAMING OC 24GB , i9 9900K CPU, 16 GB DDR 4 RAM, Win 10 64 Bit OS.

Kung-Foo-Kamel
Level 4
Thank you for the detail reply volgaksoy, much appreciated, when I get more time I will play more and post my results.

Shadowmask72, For me, no impact so far on performance, but visuals are hugely improved with just Low, 2912 and 1.2, I can aim much better with distant shots in Pavlov, so its winner for me, I noticed the clarity straight away.

TurinTurambar
Level 3
Could you explain a bit better the curvature setting? I guess Low is better than High, less curvature, less reduction of resolution in the outside area. But What's the difference between High and Default? Is 'Default' value being something like 'very High' ?

volgaksoy
Level 5


Could you explain a bit better the curvature setting? I guess Low is better than High, less curvature, less reduction of resolution in the outside area. But What's the difference between High and Default? Is 'Default' value being something like 'very High' ?



Yes, "low" is better than "high". At the moment, "Default" curvature is the same as "High". However, in the future this won't necessarily be the case.

Kung-Foo-Kamel
Level 4
I find the Low setting fantastic when looking at the edge of your FOV, things are much clearer now, the work you guys have done on this is like pure magic, the only thing that could make the Link better is Unlink (Wireless Link :smile:)

GingerMcAle
Level 3
Thank you for this detailed explanation and recommendations.

I got one additional question, how did you come up with Encode Resolution "2912" for Pixel Density "1.2"? Is there a ratio you apply based on Encode Resolution "2016", Pixel Density "1.0"?

Thanks.

volgaksoy
Level 5
I got one additional question, how did you come up with Encode Resolution "2912" for Pixel Density "1.2"? Is there a ratio you apply based on Encode Resolution "2016", Pixel Density "1.0"?
There are certainly ratios involved, but also the distortion curvature modifies said ratios. These particular values are derived to achieve roughly a 1:1 app-render-to-encode-pixel-density at the center of the display when addressing the resolution of the Quest display while also accounting for chroma subsampling.