Inspired by some recent posts about the PiTool, SteamVR and application settings for the rendering quality (supersampling) I decide to have a closer look at the mechanics at play, while (ab)using some common applications - SteamVR Home and Bigscreen Beta. I did not expect what I found.
First let me state the config, even though I believe for this particular exercise it is not that important:
PiTool v126.96.36.199 (same old), headset firmware v181
PiTool rendering quality 1.0, Hidden area mask enabled.
SteamVR global manual override at 100%
OpenVR limit on max. target res raised to 8192.
With this config, the SteamVR was showing recommended target resolution for:
Parallel projection off: 3202x2633
Parallel projection on: 3851x3291
With Parallel projection turned off I had look at the image output of the application and found this:
which looked interesting. The resolution of the texture resource is 5216x4289, which is approx 1.62x (in each dimension) of the recommended res (PP off -> 3202x2633). The complete image in the top left corner has the resolution 3202x2633. This seems however to be rather a coincidence, which I explain later.
Why there are several images of the different size in the resource buffer? I believe this is because SteamVR Home tries to adjust the render target resolution to the GPU+CPU performance and renders several testing frames and when the rendering time hits the target it keeps the resolution. So the bigger images are leftovers from the testing procedure.
Then I turned parallel projection on, which raised the recommended render target resolution to 3851x3291 and again examined the output image:
Now the image resolution is 6274x5361 (which is again 1.62x dimensions of the originally recommended res) and the smallest image inside has 3128x2662, which is less than the recommended resolution.
EDIT: As pointed by @dragn09 below, Bigscreen Beta has default 1.5x supersampling option set, so the following text does not really prove the same point as the one above and therefore I leave it here just for the record. The conclusion at the end however remains.
In BSB I did not observe “stacked” images of different res in the output, so I assume the behavior was strictly application specific (i.e. limited to SteamVR Home), but what I observed was the different rendering resolution than the one suggested (and reported by SteamVR).
With parallel projection off and the recommended target res being 3202x2633, BSB rendered the output image at 4803x3950:
Which seems to be 1.5x dimension of the recommended res. With parallel projection on, the output image has the res 5778x4937 (again 1.5x dimensions of the original res).
The important conclusion of this observation is that regardless of the recommended resolution (i.e. the number SteamVR shows in the UI and OpenVR suggests to the application), the application is free to choose higher (as I also saw examples where the res was higher than the recommended one) or lower as it deems fit.
Without explicitly checking the output images, one cannot be sure which rendering resolution the application uses, and from this point of view, the numbers reported by SteamVR has to be taken for what they are - recommended.