Maximum Steam VR resolution vs HMD resolution

After having read your first post concerning those two settings, I did a trial:
PiTool / SteamVR-SS : 1.00 / 100% => 1.50 / 56% (56% was the %-snap SteamVR proposed)

I played the ETS2 with it for an hour which needs PP turned on - and although the resolution was noticeably higher with 1.50 / 56 (4888x4432) as with 1.00 / 100 (4356x3948), I admit I was not able to detect any major improvement here - and I have a visual acuity of ~120%. On the other hand, FPS decreased significantly by 10-15%, which of course, can be explained by the fact, that the modified settings’ resolution didn’t match the old one.
The only thing I noticed further, is, that small objects such as fences, grids or power supply lines seemed to be a bit “calmer”, a little less flickering.

In total, as you mentioned, I don’t think that every situation is benefitting from adapted PiTool and SteamVR-SS-settings, especially if it has such an impact on FPS.
Of course, I could try to reduce SS from 56% to exact 50% in order to match the resolution exactly - but I expect the loss of that additional resolution probably won’t make image quality better ;), and in the end, I have almost the same I have with “standard” native settings.

I doubt a verification with Elite Dangerous would work in my case, as it needs PP, too.
The only game I could do another trial with, is Dirt Rally 2.0 - as far as I know, it doesn’t need PP even with SteamVR. Unfortunately, it still needs to be installed :wink:

2 Likes

The supersampling factor (or the ratio between the two) may play some role in how it ends up in the headset. Could you try setting PiTool to 2.0 (which corresponds to 400% supersampling in SteamVR) and counter it with 25% in SteamVR? This should produce the same rendering resolution as 1.0 & 100% setting, but could force SteamVR to do a heavy upsampling, which might then help Pimax to produce a better final image.

The upsampling however may have an impact on performance (even if the rendering resolution will be the same). Just producing such big textures takes some time, so I would expect the frame time may increase for few milliseconds.

On the side note, if you would want to go for PiTool at 1.5 (to have a smaller byproduct), then the corresponding SteamVR SS factor should be 1 / (1.5)^2 = 44.44% :wink:.

6 Likes

I re-read Gared’s thread and tested stuff again. I wonder if 2.0 vs 1.0 matters only with HMDs that use upscaled image (he uses 8k). On 5K XR:

  • I see no perf difference with 2.0 vs 1.0 (0.25 vs 1.00SS)
  • I don’t think I see visual difference

That said, his logic makes sense, and all the algorithms will likely work best if things devide by the exact number. Meaning with Pitool 1.0, image should be most correct at 0.50, 1.0, 2.0, 4.0 SS.

2 Likes

This is a good point. I have no idea. I wanted to test it on my 5k+, but eventually did not bother. It all depends on how IVRDriverDirectModeComponent driver interface (which Pimax uses for its headsets) is implemented by SteamVR and if and how it re-samples the rendered image on the output.

SteamVR upsampling could produce “nicers” results if the multiplier was an integer (by dimension), which only gives one “nice” value in the SteamVR range = 400% (which is 2x2 scaling). Anything else leads to some kind of “smudging” (for example 1.5 PiTool and 44% SteamVR).

4 Likes

I read Gared’s thread at the time and tested the 5k+ using ED with PT 2.0 + Steam VR 0.25 and felt it was a better balance of performance and visuals, so I stuck with it. PP is required of course.

2 Likes

I did some tests on my 5k+, using SteamVR Home and Elite Dangerous and changing PiTool RQ and SteamVR SS factors to different ratios, while trying to keep the same rendered resolution.

I can confirm (to my surprise) that there is no impact on SteamVR functionality, whether RQ=1.0 and SS=100%, or whether the RQ=2.0 and SS=24% (as I could not set exactly 25%). In both cases the app renders the image in the recommended resolution (it is a bit complicated for SteamVR Home, which dynamically changes the res, but for this particular test it did not matter) and passes the rendered image to the Pimax driver.

This also contradicts the original explanation from @Gared I mentioned above, so I am a bit confused right now, because it was the only explanation which looked reasonable.

In other words, for both settings, the Pimax software receives basically the same res (minus the 1% SS difference) and can only do as much as warp it. Now the only remaining unknown is what Pimax does with the image. It could (hypothetically), use better warping (sampling) algorithm when RQ is higher, but it does not really make sense, because it would be in everyone’s interest to simply use the best algorithm in both cases since the source resolution is the same.

Technical explanation of what I did

I traced two calls (which both are implemented by Pimax SteamVR driver and called by SteamVR runtime):

  • IVRDriverDirectModeComponent::CreateSwapTextureSet
  • IVRDriverDirectModeComponent::SubmitLayer

The first function is called by SteamVR runtime at the start to ask Pimax driver to create texture “swap chain”, which are then used by the application for rendering. In this call SteamVR runtime specifies different aspects of the textures it requests, including theirs dimensions (width and height).

There I was able to confirm that the requested resolution was the one corresponding to the recommended resolution advertised by SteamVR to the app (and in the settings).

The second function is called when the SteamVR runtime passes the rendered texture to the Pimax driver. These passed textures are the ones created earlier in the first function. This call is only interesting because SteamVR may actually use only a portion of the texture resource for smaller resolution. If it does, it would mean that the application rendered the image at the smaller resolution than at which the textures were originally created. But it cannot pass a bigger resolution this way, without recreating the swap chain first.

The traces provide a solid proof that as far as SteamVR functionality is concerned it does not depend on PiTool RQ.

6 Likes

Just in case you did not know you could set exact 0.25 in Steam\config\steamvr.vrsettings, though it won’t make difference in this case.

One vague thing I remember, I recall some games refused to render with Pitool at 2.0 vs 1.0, same recommended resolution. But don’t remember the details, I’ll updated this thread if I catch an example.

3 Likes

From what I observed the game should not know about PiTool RQ setting, as it is completely blocked by SteamVR runtime. The only info the game has is the recommended render target res. which is advertised by SteamVR API (and is already a combined value from PiTool RQ and SteamVR SS).

SteamVR runtime however knows the original recommended res, advertised by the headset and could act on it. However form what I observed, it seems it does not (it would not make any sense if it does).

1 Like

It most definitely does, you can observe this behaviour e.g. in SteamVR Home.

I run one of the Alyx environments (City17, alley) as a SteamVR Home and once I select PiTool 2.0, it will only load into a black screen at 100% GPU load irrespective of how much I lower the Steam VR SS setting.

So e.g. PiTool 1.75 at SteamVR SS 200% works although reprojected, PiTool 2.0 at SteamVR SS 10% doesn’t.

3 Likes

SteamVR Home (if not configured explicitly) allocates textures with are scaled by a factor of cca 1,62 (in each dimension). You would not see it in SteamVR settings, because it only shows the recommended res, but SteamVR Home will internally ask for 1,62x1,62 of this res. If it goes out of hardware limit, it may simply crash (the limit for D3D11 is 16kx16k). I do not know if it is your case though.

BTW: Do you have “Advanced filtering” turned on? Could try with and without this feature, if it still crashes?

EDIT I should add that while SteamVR Home (and possibly any other game/app based on Valve’s VR engine) tries to allocate the target buffers for rendering of the bigger size (as mentioned above), it does not necessarily uses the full resolution for the rendering. It just allocates the resources with sufficient margin so it could scale the resolution in both directions - up and down.

Typically however it uses just a portion of the allocated texture, depending on the actual game performance, but because the resources have to be allocated right at the start, it starts with bigger ones just to be safe, even if will never use them fully.

The consequence is it could crash when hitting a hardware limit, without an explanation to the user.

2 Likes

Interesting, I did not know this, thanks!

I’ll see how advanced filtering affects this and report back.

2 Likes

Unreal games I have found that. Some even want pitool at 0.75 or they crash.

In the old piplay we had an option via editing pixel density.

2 Likes

I have also ran into this issue in some unreal games. Really annoying not being able to get the best picture out of the 8kx

1 Like

Bigger question why it is happening, considering recommended resolution is the same.

If anyone working on his VR project has time/desire, it might be possible that something will be visible in RenderDoc frame capture (DX11+ only). I would’ve done that, but my hobby project is DX9/DX11 mix and I am not aware of any rendering debugger to support mix :frowning: Pix crashes…

1 Like

If it is related only to Unreal (engine based) games, I am pretty sure it is a problem with the engine, not SteamVR, or you may be (unknowingly) running the game over Oculus API, where PiTool RQ directly determines the recommended render target res for the app, without SteamVR supersampling intervention. I believe @jojon has observed that.

1 Like

I have never drawn the logical hypotheisis that maybe Unreal Engine favours Oculus’s API (much like Elite Dangerous, which seems to check for availability of an Oculus headset first, before moving on to see if one has SteamVR), or impostors thereof, but have indeed often noticed how Unreal Engine appears to “do its own thing”, almost always, until very recently, leaving applications based on it totally ignoring any SteamVR resolution settings. :7

Given this happened with my old Vive, before there was such a thing as ReVive, I still can not say I feel any closer to having half a clue as to where and how UE finds out the resolution it uses with different HMDs, but maybe you are on to something, there… :7

3 Likes

Hi,ThelronWolf,

I think everyone has different senses. Some people think the resolution is enough, while others are more sensitive and think the picture is not fine enough and there is no absolute value

Apple

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.