June 2022
Posted 2 years ago
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.

attribute 'blocktype' not allowedattribute 'data-image-style' not allowedattribute 'title' not allowedattribute 'contenteditable' not allowed
Element 'p' not allowed

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

attribute 'blocktype' not allowedattribute 'data-image-style' not allowedattribute 'title' not allowedattribute 'contenteditable' not allowed
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.