Whilst working on a simple VR game the performance was really unplayable.
So this month Sam and I have reduced the VR frame time by as much as half in some circumstances, my simple VR game went from ~9ms to ~4ms on average.
Memory usage should be also much more manageable on VR
Frame time is super important in VR, if we can't do it fast enough we're gonna end up
reprojecting - not nice.
I ripped a load of over-complicated shit out, mainly multi GPU because nobody is going to ever use that. Simplifying the render pipeline lets us identify pain points a lot easier as well as makes maintenance much more manageable.
multiview instancing
We broke multi-view instancing early on in development with a push on desktop rendering. Sam has recently redone the transform system again making transform instances much easier to do, so he also spent time fixing that.
This means VR rendering draws on both eyes simultaneously for each draw call command instead of having to draw for each eye.
He's also refactored most of the code for it so any custom shader should be able to use it without much thought, as long as they keep within the correct contract from the base shader.
oculus hidden areas
Most VR headsets have a fair amount of the display that your eyes
will never see, this is called a hidden area. We can avoid rendering
these for a nice performance boost.
We were already doing this for non-Oculus devices, unfortunately SteamVR doesn't provide the hidden meshes for Oculus devices.
So I created a quick tool and with the help of the community dumped the hidden area meshes.
These
hidden area meshes manage to reduce the amount needed to draw anywhere
between 9-14%, on an Oculus Quest 2 the rendering area is reduced by
9.13% - that's 633,000 less pixels the GPU has to slave away rendering.
User Comments