This guide covers how to implement AppSW in your Unreal application. To learn how AppSW works, and how to debug it, go here.
Application SpaceWarp (AppSW) is a feature that achieves a step function improvement in both performance and latency at a significant magnitude. It’s one of the most substantial optimizations shipped to Quest developers. In our initial testing, it gave apps up to 70 percent additional compute, potentially with little to no perceptible artifacts.
However, enabling AppSW is a serious technical commitment. It requires modifying your app’s materials and render pipeline; any materials that have not been modified to support AppSW will produce artifacts when running with AppSW.
To help you use AppSW optimally, we have created this guide to discuss the technical considerations and tradeoffs to implement it appropriately.
API and integration considerations
At the native API level, AppSW is enabled in Quest apps through the OpenXR extension XR_FB_space_warp. Our game engine integration handles that for developers, but it is good knowledge for curious developers to understand how it works. Please check our native developer guide and sample project XrSpaceWarp in the OpenXR SDK package to learn more.
How to Enable AppSW in App
AppSW is available through the Oculus-VR Unreal Engine fork for UE versions before 5.7. In UE 5.7 and later, the fork is not required because SpaceWarp has been integrated into Unreal Engine core as Frame Synthesis. To enable AppSW, follow the steps below:
Prerequisites: AppSW requires Mobile Multi-View and Vulkan. For UE versions before 5.7, the Meta XR Plugin with the OVRPlugin OpenXR backend is also required. For UE 5.7 and later, SpaceWarp support is built into the engine.
Enable AppSW support by checking the box under Engine - Rendering.
Steps 1 and 2 make your app capable of enabling AppSW on any frame. The feature is controlled at runtime by a console variable:
For UE versions before 5.7, use r.Mobile.Oculus.SpaceWarp.Enable.
For UE 5.7 and later, use xr.OpenXRFrameSynthesis (the older CVar is deprecated in 5.7 and produces errors).
Like other console variables, you can toggle this during gameplay in C++ code or Blueprints. The following example enables AppSW when the user holds the right controller trigger and disables it on release.
The console variables above control runtime toggling on a per-frame basis. To enable SpaceWarp support at the engine level from the start, add the appropriate project setting to your DefaultEngine.ini file.