After having received my replacement 5K+ I have finally had the time to dive back into VR for a bit and am dealing with a bit of a conundrum right now, hope you guys might have some insights.
First my specs:
i7 6700K @4.8Ghz
16GiB DDR 4 3200
2080Ti @2.100 Mhz sustained
500 GiB nvme m.2
2x 500 GiB SSD in RAID0
PiTool .112 beta
Now I’m noticing that at any given SS and PiTool multiplier, I’m not hitting the 11ms render time on the GPU, but strangely enough, neither is my GPU being utilized fully. It fluctuates between 60-70% load, observed via fpsVR and neither is the CPU being used at 100%, not even per core.
I really noticed this when giving Zero Calilber a whirl, I’m getting around 70 fps and it does feel uncomfortable.
I’m running the latest nVidia drivers and all benchmarks are indicating that the system is running at full load, so it’s only in VR that I can only get around 60-70% of performance.
Is this something others might have noticed as well? Any idea how to remedy this?
I remember that in the first videos @SweViver did with the final version of the headset people were noticing (myself included) that neither CPU nor GPU was ever maxed out in any of his videos. I also remember that with OG Vive the situation was usually different, the GPU was maxed out (even to 99%) and CPU was following with whatever load it could produce (while waiting on the GPU). I have disconnected my Vive long time ago, so I cannot immediately verify it, but simply running the same game with the same game/visual settings in both the OG Vive and Pimax could give some indication.
The naïve approach would suggest that with the bigger FOV of the Pimax HMD (i.e. the higher resolution) the GPU has to work more, so it should hit max load easier than with OG Vive, and so the game which is able to max out GPU on Vive should max it on Pimax too. The only question is that bigger FOV also produces more objects to render, which does not include only more geometry (for the rendering), but possibly also more game logic to be run for those objects, so it can task the CPU more too.
Now, coming back to your (our) situation, I guess Pimax is the most qualified to answer as they should be able to profile the rendering pipeline including their software, but I am not very optimistic on this front.
In general however, I can imagine that it is perfectly possible to have both CPU and GPU idling at the different times in the frame (rendering) if they block each other. I.e. the CPU waits for the GPU to finish its task and then GPU waits for the CPU to finish its (for example, passing the geometry or calculating the game logic).
Unfortunately, it is not possible to tell just from observing the CPU (GPU) load, if you do not know how many threads are actually scheduled and if they are blocking.
Imagine single-threaded task which could max the single core to 100% utilization. If the system scheduler (for whatever reason) decides to round-robin this task over all the cores what you would observe, when looking at the task manager, would be each core loaded 1/N (each at the different time) and the overall CPU load to be 1/N too. The games are not purely single-threaded, but this is basically the idea. Once the scheduler decides to task the blocking thread over several cores, there is no way to tell what is blocking from simply observing the core/overall CPU load.
My first suspect would be the Pimax compositor being the blocking point, but it is purely based on the observation of Pimax prowess in the software development.
My guess is that PiTool is somehow causing an overhead that stops further performance gains.
So really I should rephrase my questionto: is anyone else observing similar behaviour, i.e. not hitting 11ms although neither GPU nor CPU are being taxed fully?
I did break out my trusty OG Vive to verify this wasn’t a general VR related issue on my system and can confirm that with sufficient SS, running e.g. Zero Caliber ‘natively’ in SteamVR does fully tax my GPU.
In contrast, I can progressivley increase SS on the fly when running my 5K+ in Zero Caliber and can observe my frametimes going up without any change in GPU utilisation.
Anyone else making similar or opposite observations?
I was having this on a less powerful setup (Vega64, Ryzen5) and managed to get around this issue. I think its cause by having multiple super sampling running one after the other.
Open steam VR and go into the settings. Set the Video down to 20%. This is effectively turning super sampling off. Then just use the PiMax at 1.5 supersampling.
If the game looks out of focus, switch this around and have Pimax at 1 (off) and then the SteamVR at 2x your native resolution whatever by * 2880 (or as close as you can get to being that or just over)
Either way this makes the game look amazing whilst dropping the loads and frame time dramatically.
A different approach: When I play Fallout I get around 35-40 fps and smart smoothing is active almost all the time. What happens if you crank up your graphics settings so high that you also get low fps and smart smoothing has to kick in?
SteamVR is a piece of customer-hating excrement and that’s as nice as I can put it.
How this works.
“Video” sets the default rendering resolution. The “application” one is then an adjustment on the current general setting.
(With pitool set at 1)
So if "Video"Steam VR is set to 20% that should give ~25601440 per eye (which is what the PiTool is kicking out at 1.0) Yep 20% is off in steamVR terms!
In steamVR Application, 100% will be the same 25601400per eye. 200% will make just that one game render at double the res.
If you adjust the SteamVR Video setting, whatever that new resolution is will be the 100% on the application screen.
Its meant to allow you to say have 20% for most things but say set a video player to a much higher resolution.
Please note that with SteamVR if the resolution isn’t a multiple of the PiMax native resolution I get very blurry screens (looks like double imaging on each screen)
And don’t get me started on the massive rant about Steams Controller remapping disasters.
May lower utilisazion, but if it gets your frame rate up whilst having nice quality then you are golden.
If that doesn’t work, do it the other way around. Elite Dangerous for me seems to like PiTool at 1 and Steam SS at ~5120 x 2880 (or just over) for the best quality.
My unproven theory is multiple super sampling rounds is an issue.
No it is not. PiTool at 1.0 is kicking out the resolution which already includes the supersampling needed for the pre-lens warp transformation. The actual values depend on:
The headset type (5k+ vs 8k)
The FOV set in PiTool (Small, Normal, Large)
Parallel projection (ON vs OFF)
But it has no direct relation to the native panel resolution (2560x1440). If you are interested in which values are reported by Pimax 5k+ for different options check this post (https://community.openmr.ai/t/all-the-parallel-fovs-of-pimax-5k/18700) and look for “HMD recommended render target resolution”.
SteamVR superesampling factor does not factor the resolution but the pixel count. So setting SteamVR to 200% means rendering twice as many pixels. The resolutions (dimensions) scale by the factor of sqrt(2).
This must be some other problem as there is no direct dependency or “favorite” factor related to the native panel res.
Seems from those posts we are all shooting in the dark as to what’s doing what, why and how.
Cant see how it’s not related to what’s going down the cable to the headset of 2560x1440 x 2.
Would be nice to be able to totally disable SteamVRs messing with things and just use the pitools SS.
Am I at least right in its
Game Engine renders => SteamVR messes => PiTool messes and applies lens warp => image is downsized to the native res of the Pimax => sent to the headset.
Rendering has to be synchronized with the panels refresh. This means that if the GPU frame time exceeds the target, say 11ms for 90Hz, it will idle after it’s done until the next frame starts.
For instance, if it takes 15ms to render a frame, that leaves 7 ms idle time until the next frame starts, giving a disappointing 68% utilization.
You can verify all the figures and formulas on your headset. The resolution recommended by HMD is written into the log file vrcompositor.txt. The same value is displayed in SteamVR video setting pane, when you set the manual SS override to 100%.
Then you can play with PiTool rendering quality (FOV and parallel projection settings) and SteamVR supersampling override and see how it impacts the displayed res in SteamVR.
Maybe try the new driver, looks promising, fixed many things this time, for me display flickering on 144hz-165hz g-sync, took over a year now but it works great again^^
had no time to test this driver with Pimax yet, but as i said looks promising, worth a try
p.s. also fixed the overheating prob from the last driver