Interleaved Reprojection now enabled for all applications by default

if (lockPhysicsUpdateRateToRenderFrequency) { var vr = SteamVR.instance; if (vr != null) { var timing = new Compositor_FrameTiming(); timing.m_nSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(Compositor_FrameTiming)); vr.compositor.GetFrameTiming(ref timing, 0); Time.fixedDeltaTime = Time.timeScale / vr.hmd_DisplayFrequency; Time.maximumDeltaTime = Time.fixedDeltaTime * timing.m_nNumFramePresents; } }

Alex Vlachos talked a bit about this at GDC 2016 two weeks ago during his presentation, “Advanced VR Rendering Performance”. We are treating this as a last resort safety net against poorly performing applications. If you get too close to using up the available frame time (either due to cpu or gpu work) the compositor will drop into half-time mode where we reproject every other frame -- thus "interleaved reprojection".The important thing for developers to keep in mind is that when this happens, your game will be updating at 45hz instead of the normal 90hz, and you need to be robust to this dynamically changing while your app is running. So anywhere you have hardcoded assumptions about running at 90fps should check to see if we are currently presenting frames multiple times or not. This is done by checking Compositor_FrameTiming's m_nNumFramePresents, which will normally be 1, but will jump to 2 when interleaved reprojection is active.The latest Unity SteamVR plugin does this when setting fixedDeltaTime for physics updates, and it is a good example of how to check for this situation.Automatic interleaved reprojection can be disabled for development purposes by unchecking the "Allow reprojection" checkbox under the Performance settings in SteamVR.The frame timing graph draws a red line on the stacked gpu view when interleaved reprojection is active.Slides for Alex's talk can be found here:To force reprojection on for testing, use shift+r in the mirror window. Then you can toggle between presenting each frame once or twice using the r key. Use shift+r again to go back to automatic mode.