Target VR performance?

What is the target rendering time in milliseconds (ms) for a PC VR game (ie Vive and Rift)? Either for the value that “stat fps” returns, or the value that the GPU profiler returns? I know you have to hit 90fps, and obviously the smaller time to render the better, but what value is too high?

Best I could find when Googling is Michael Abrash talking about 20ms at most, and ideally something closer to 7ms? But that might be about hardware delay, instead of software (or both?). Regardless, input from UE4 devs or Epic would be most welcome.

Right now, I am getting about 11.2ms for my “stat fps” output, and I’m getting about 6ms for the GPU profiler. Is this okay? I am getting no dropped frames or error/safety screens from SteamVR or motion sickness when testing. Everything looks great and is running nicely. So I’m pleased, but I’d still like to have a technical number to aim for or to avoid.

I am asking in general, but here are some details about my game’s technical setup, with respect to graphics/etc, in case it’s relevant:

  • Low poly, only static meshes, no lights, no textures, relatively small scenes (many levels, but small).
  • Using only one material for everything – using material instances for different colors/etc. It is a Lit material, but I set Base Color/Roughness/Spec/Metal to 0, and I only use the Emissive Color pin. I calculate a fake directional light to get a look that seems lit, but really isn’t. I use this instead of any lights in my scene (“Force No Precomputed Lighting” is enabled). UE4 is telling me this material is 29 instructions.
  • Using TemporalAA.
  • Using SSAO (Screen Space Ambient Occlusion) via an unbound Post Processing Volume – default SSAO settings at the moment (will tweak soon). All other features have been disabled via this post processing volume, as recommended by the UE4 VR Best Practices guide.
  • Currently not using Instanced Stereo Rendering. Will experiment with it soon for potential performance savings (though I’ve read that it can cost extra until you actually have many actors and get savings from it? so it might not work for my minimal worlds).

The TemporalAA and the SSAO definitely cost the most. Probably close to 90% of the ms cost. But they don’t seem to be killing the program by any means and they really add a lot visually, so they’re definitely worth it. Will stress test soon to see how far my current setup scales. Again, knowing the ideal time to render would be nice, so I can compare actor-count/tri-count to time and note when I hit the limit.

Thanks for any tips!

The target performance is 90fps, if we just break down that number I think you’ll see why you are getting 11.2ms.
90fps = 90 frames per second = 90 frames in 1 second = 90 frames / 1 second
to get that in seconds you flip the fraction = 1 second / 90 frames = 0.01111 seconds = 11.11ms
each frame needs to be rendered in 11.11 ms for a 90fps display

A lot of headsets have different refresh rates though so you’ll have to make sure you know what frame rate and therefor frame time you need to hit

Of course! Thanks, Mitch! Wow, I feel kind of silly for not making that now obvious connection (I studied number theory! lol).

So, to summarize for myself and anybody that might find this: For a headset like the Vive and the Rift the target is 90fps. This translates into 11.11ms per frame. But if you are having trouble hitting 90fps then you can use a tool like the UE4 GPU Profiler, which will break down exactly how long (in milliseconds) you are spending on different parts of the render. You might discover a feature you enabled (TemporalAA or SSAO, for example) is costing too much time and you need to disable it or tone it down etc. Or, in my case, the GPU Profiler says my frames take 6ms to render, which means I might have about 5ms of free time which I could spend on other fancy graphics settings if I wanted. Of course, there are other non-GPU factors such as game logic (which is why you have to be careful of tick) that will add time to a frame, so you can’t just rely on the GPU Profiler.

Hope this helps somebody else, as it has me.