Using Fixed Foveated Rendering
Updated: Apr 14, 2026
This section covers how to implement Fixed Foveated Rendering (FFR) in your Unreal application. To learn how FFR works, and how to debug it, see [Fixed Foveated Rendering (FFR)](/documentation/unreal/os-fixed-foveated-rendering/).
When dynamic foveation is enabled, the system automatically adjusts the foveation level based on GPU utilization, up to but never exceeding the specified maximum level. You should use Dynamic FFR instead of Unreal’s Dynamic Resolution feature.
There are multiple ways to set the FFR level and turn on dynamic foveation.
You can set the FFR level in your Unreal project settings. To access these settings:
- In Unreal go to Edit > Project Settings
- Display the settings by clicking Meta XR under Plugins, and on the Plugins - Meta XR page, find Mobile
- Use the Foveated Rendering Level to set the desired foveation level
- Check Dynamic Foveated Rendering to turn on dynamic FFR (it will be unchecked by default)
The following image shows an example of the project settings:
You can set the FFR level using the following method:
void UOculusXRFunctionLibrary::SetFoveatedRenderingLevel(EOculusXRFoveatedRenderingLevel level, bool isDynamic)
The parameters are:
level is one of the following values:
- EOculusXRFoveatedRenderingLevel::Off (index = 0): Default
- EOculusXRFoveatedRenderingLevel::Low (index = 1)
- EOculusXRFoveatedRenderingLevel::Medium (index = 2)
- EOculusXRFoveatedRenderingLevel::High (index = 3)
- EOculusXRFoveatedRenderingLevel::HighTop (index = 4): High foveation setting with more detail toward the bottom of the view and more foveation near the top. Treated like
High when using OpenXR backend.
isDynamic is true to indicate dynamic FFR is on, or false to indicate dynamic FFR is off
Blueprints to Get and Set the FFR Level
The Blueprints to get and set FFR are located under the Unreal Blueprints folder path OculusLibrary.

Use the
Set Foveated Rendering Level Blueprint to set the FFR level to one of the five possible values, and to select whether FFR is dynamic. The following image shows an example:
