PiTool "Rendering Quality" option

I have watched @SweViver section about PiTool and SteamVR settings for rendering but I am no wiser after that.

Does anyone know, what actually “Rendering Quality” option sets exactly, and how it impacts SteamVR settings? I had a feeling that it should work actually the opposite way @SweViver said, since it somehow sets some res for SteamVR from which SteamVR then derives “recommended” SS setting (increasing Rendering Quality reduces SteamVR recommendation).

I would also like to know if there is a way to figure out what is the real rendering resolution (for the purpose of estimating the GPU processing power). Is it the one suggested by SteamVR, or some kind of product of SteamVR res and PiTool Rendering quality?

Anyway, I guess we need some clarification about how PiTool plugs-in and affects rendering pipeline.


From what I could gather, the PiTools multiplier changes the render output from SteamVR (and Oculus I guess?).
per eye:
0.75 = 1920x1080
1.0 = 2560x1440
1.25 3200x1800
1.5 = 3840x2160
1.75 = 4480x2520

I can’t figure out exactly what 100% is in SteamVR, but I think it’s another 1x multiplier. Maybe 200% is a 2x multiplier?


This could be a good guess, I guess :). This would however mean that PiTool just adds another (up/down-sampling) to the pipe, which, if not accompanied by any additional benefit, might as well be left at 1.

The SteamVR set at 100% (I believe) renders at 1.96 SS factor (as it is the native SS factor for HTC Vive for lens compensation). Where 1.96 is factoring absolute number of pixels in the render target.

So rendering at 2560x1440 at SS 1.96 would give
256014401.96 = 3686400*1.96 = 7225344 pixels, which transformed back into 16:9 aspect ratio gives approximately: 3586x2016

1 Like

I have a suspicion that the steam VR SS setting doesn’t play well with the pimax specific render area as it seems to be set up specifically for the HTC vive to at least some extent. Sweviver indicates that setting the pitool quality to 1.5 makes a large difference to the perceived quality while dropping the steamVR SS setting down to 50% made little difference. I suspect that there is some kind of optimisation in the way that the pitool upscales that is specific to their own headset.

With that in mind then the optimum would be to set the pimax slider as high as you can and the steamVR slider to whatever setting matches the hdmi resolution (2560x1440x2). If Risa’s numbers above are correct then that would be 100/1.96 = 51.02%.

Suspiciously close to swevivers recommended figures via his trial and error.

What I don’t understand is why they haven’t just worked with Valve to incorporate the Pimax settings directly into Steam so we get the benefit of the native reprojection etc. I’m pretty sure that valve has set up the system as an open standard. Pitool is certainly required to make it work with with the oculus store. I don’t get why they need it to work with Steam. Maybe communication difficulties?


Reading through SteamVR’s auto-res stuff… it looks like the percentage you set is a “no higher than this” setting because folks report cranking it up and see no change in FPS or quality. PiTools seems to be a hard multiplier though.

Edit: this appears to be wrong. Sorry.

Isin’t the manual override button supposed to supersede that?

I think you’re right and I’m confused (read through several forum posts on steam that indicated changing the settings didn’t change performance, but they were dated before Steam changed the UI around April).

I addressed exactly this subject here: http://community.openmr.ai/t/dear-reviewers-i-still-have-some-questions/8286/3

Your suspicion is right, for example on the 4k is better to raise the piplay rendering value then the steam VR %


The question is which part of the chain runs the pre-lens warp transformation. If PiTool uses SteamVR compositor, then I would expect it would be preferable to use SteamVR to set up the SS factor as the SteamVR compositor will benefit from that, while PiTool will just provide the down/up-sampling.

On the other hand, if the pre-lens warp transformation is done by PiTool then I would assume the SS factor in PiTool will determine the final resolution/clarity.

The other possibility is that the rendering is done completely by SteamVR and PiTool (in its Rendering Quality) just sets the target resolution of VR device (i.e. really just the display res of the virtual hardware). I wonder, if, when Pimax is connected to the PC (and PiTool is running), if the HMD is exposed as the display (in the hardware list) and what is its reported resolution.

This would however be contradicted by the observation of @Matrioska70.

The only way I can make sense of what SweViver said, is with the assumption that PiTool tells SteamVR that it wants a resolution that is founded, at 1.0, on 4k (times whatever is mandated by the properties of the lens), rather than the 1440p transport image.

This means that you have to undersample in SteamVR settings, to get down to more practical and reasonable levels.

It would also explain SteamVR’s auto-setting global SS lower for higher PiTool quality: It sees the greatly increased bitmap size demand, determines: “Your machine can not handle this”, and reduces its own SS accordingly.

(My understanding on the auto setting, is that it exists pretty much a baseline virtual performance target for application developers. -If I make my game run consistently at 90fps with the auto-determined amount of supersampling on my machine, it will run ok on any machine that uses auto-determined supersampling. This assumes that Valve will increase this baseline performance profile over time, as more powerful hardware proliferates across the Steam user base.)

Everything we have heard suggests that PiMax’s runtime handles the (possibly rather complicated) pre-distortion, and not SteamVR, although I am sure SteamVR still composites its overlays onto the intermediate image, before handing it over to pimax for distortion.

So, in short, my guess (values picked right out of the air):

Pimax: “I want 4000x3000”

SteamVR: “No way! -You’ll get 2000x1500… Here, game, render me 2000x1500”

Game: “Ok, ok… Done! Here you go.”

SteamVR: “Great! Hang on while I slap some stuff on top of this. There! Here’s 2000x1500 for you, Pimax”

Pimax: “Grumble, grumble, very well… Copies the 2000x1500 intermediate image to its assigned space on the 1440p transport one (EDIT2: …determined by screen utilisation and IPD), taking its samples from the source in such a way that the picture is distorted and reduced in bitmap size in the process (EDIT: We always want this all as the last step, with as little preceeding generation loss as possible)”

EDIT: It is also worth remembering that depending on the sampling algorithm, at some point it will begin to skip potential samples from the source, and then the efficacy improvement of increasing the render target will go down rapidly. (Maybe the image from SteamVR to Pimax could also be upscaled to the original requested size during the handover, but that would be kind of pointless.)

Would be nice if we could get some hard answers from Pimax. :7

You are right that it is not at all clear what is the reference point for PiTool (= 1.0 Rendering Quality). Could as well be UHD (4K). But it may also be QHD and it is just SteamVR which is so scared of such high res for one eye that it defaults to so small SS (maybe as you wrote because it is just an indication to the developer what is feasible with the currently deployed graphics card).

Having PiTool doing the final warp would also make sense, much more control over the algorithm on Pimax side. I do however believe that PiTool really presents virtual target resolution based on Rendering Quality settings.

So at the end, following your example, i would just change the last step. SteamVR passes the upsampled image (even if it was rendered at 2000x1500 only, it will upsample it to 4000x3000) to PiTool, which, in turn, will perform the warp and downsampling again. This would make sense too. But why this artificial upsampling in SteamVR and downsampling of this image again in PiTool should give better quality than the more straightforward approach is still a mystery to me.

Presenting artificially larger render target and instruct SteamVR to not do any warp and set supersampling to basically 1:1 (SS factor ~50%) mapping then leave all the work at PiTool. Then it would make even more sense, to set SS factor in SteamVR for exactly 1:1 mapping and thus avoid SS in SteamVR completely, as right now it looked like @SweViver was shooting for this by trial and error and might have just ended with SS factor which will up/down sample the image by few pixels (=completely useless op).


A lot of games (Elite and many others) completely ignore the SteamVR SS. What about PiTools? I think it’s always the game’s graphics engine that decides, isn’t it?

I actually made an edit to my post just a few minutes ago, which mentioned the possibility of upsampling happening when going from SteamVR to Pimax, and some other stuff. but must disagree that it would be in any way useful - in fact, I’d class it detrimental, since to my mind it would not just waste cycles on nothing, but also introduce scaling artefacts (kind depending on algorithm). :7

…as for supersampling… The “boiling down” (downsizing and distorting in one step) of the extra supersized rendered intermediate image, to the final output, should of course only happen once – as the last operation, with the small caveat that if one exceed the max sampling of the algo, one could do it in two steps, like using the internal SS in Elite Dangerous, on top of HMD Quality, after the latter is already maxed out. :stuck_out_tongue:

I would say the base resolution for PiTool 1.0 and onwards has changed in practically every update on PiTool. And most of the times it has lead to better performance and better image clarity. So obviously Pimax team is doing improvements here -and since the early m1 testings, the difference is HUGE.

Hmm… Elite most certainly does not ignore SteamVR SS: It takes it, and adds its own “HMD Quality” on top (…and then its own “Supersampling” on top of that - this last is downsampled by the game itself, before handing over the resulting BaseRenderTarget * SteamVR SS * HMD Quality bitmap). (EDIT: Both “sum of HMDQ and SteamVR SS” and in-game SS at 2.0 is gorgeous, by the way, even though the game turns into a slideshow, and, which is worse, streams out high mipmap textures. :7)

And yes - the game engine can ulitmately do whatever the heck it wants. I don’t know whether anything has changed on that front, but UE4 titles for the longest time totally disregarded the render target size requested by SteamVR, and substituted its own hardcoded one – whether one could supersample was down to whether the individual developer offered the option, or one dived into .ini files, to increase the engine’s: “screen percentage” setting…

Hmm… Elite most certainly does not ignore SteamVR SS

In the past, for sure, but recent builds ignore it. I can be wrong and I’ll do more tests to be sure, but that’s what I saw

Few months ago, after an update, I got a very bad picture, my 1.8 SS didn’t work anymore, and I had to use the internal HMD Quality setting. Performance was much better with SS 1.8 and HMD Quality 1.0, but in the meantime I replaced my GTX 980 with a GTX 1080Ti so I didn’t worry anymore

[quote=“mmorselli, post:17, topic:8311”]
In the past, for sure, but recent builds ignore it.

Hmm, unfortunate if true. :frowning:

(EDIT: I have fallen back on my Rift, for the last couple of months, because I broke my Vive, so I wouldn’t have noticed, :frowning: )

Hmm, unfortunate if true.

this thread confirm the issue:


maybe a change in SteamVR and not in Elite code. Here suggest to disable advanced super sample filtering, the way supersampled images are downsampled. Sharper images but more shimmering without it, bad choice for Vive, but maybe not for Pimax

@SweViver could try with or without this option if the image gets better and if the performance increases with higher SS and lower HMD quality

1 Like

That was my original perception as well. What however I forgot that 50% supersampling in SteamVR may in fact correspond to 1:1 mapping (as 1.96 is 100%). So I would guess considering all this, the rule of thumb should be, never set SteamVR below 51% (to avoid any upsampling) and if possible keep it at the value 51% (100/1.96) which should avoid also any downsampling and adjust the visual quality in PiTool. Only when the PiTool settings is too coarse, use SteamVR to give a bit more SS.