Oculus Quest 2 and Fixed Foveated Rendering (UE5)

Did anyone manage to get Fixed Foveated Rendering work on Oculus Quest 2 in stand alone mode?

I’m using UE 5.0.1. Tested on a newly created Virtual Reality Template project and it doesn’t work under any settings I’ve tried (Vulkan, OpenGL ES3.2, Legacy/Native OpenXR plugin and so on).

Event on PC it works wrong on gun model for left eye (you can see a grid of separated dots instead of lower resolution).

1 Like

Bumping this - For me it seems like it’s working, but the whole thing is offset like 50% to the left, I can see the right edge of the rectangle cutting halfway down the right eye, and in the left eye I can clearly see the off-center circle where the center is clear and the surrounding is pixelated (Quest 2 PCVR, not mobile/standalone).

Which UE version do you use?

Any news on this ?
Currently Fixed Foveated Rendering (FFR) also not working for me on Unreal 5.1 + Quest 2 Standalone.

FFR on Quest on OpenXR is only available in UE5 w. the MetaXR Plugin: Meta XR Plugin in Code Plugins - UE Marketplace

I’m running into this issue on Meta’s 5.1 fork, so we’ve got the plugin - confirmed in Renderdoc that we’re not getting any FFR effect…

Anyone else manage to get this working?

We’ve added the XR_FB_Foveation OpenXR extension in 5.3. You can enable it in Project Settings → OpenXR Settings, and use the following CVars to configure it:

static TAutoConsoleVariable<int32> CVarOpenXRFBFoveationLevel(
	TEXT("xr.OpenXRFBFoveationLevel"),
	0,
	TEXT("Possible foveation levels as specified by the XrFoveationLevelFB enumeration.\n")
	TEXT("0 = None, 1 = Low , 2 = Medium, 3 = High.\n"),
	ECVF_Default);

static TAutoConsoleVariable<bool> CVarOpenXRFBFoveationDynamic(
	TEXT("xr.OpenXRFBFoveationDynamic"),
	false,
	TEXT("Whether dynamically changing foveation based on performance headroom is enabled.\n"),
	ECVF_Default);

static TAutoConsoleVariable<float> CVarOpenXRFBFoveationVerticalOffset(
	TEXT("xr.OpenXRFBFoveationVerticalOffset"),
	0,
	TEXT("Desired vertical offset in degrees for the center of the foveation pattern.\n"),
	ECVF_Default);
4 Likes

@VictorLerp I just tried that on a Quest 2 build in 5.3 , Without the MetaXR plugin - they dont yet have it on 5.3 . Even the OVR Metrics tool reports that there is foveation, but I cannot see any. What standalone headsets is this tested on … ?

There’s been more work done on the native foveation implementation on UE5/Main (GitHub). The change will go into 5.4 but you can try it out early if you sync and compile from Main.

2 Likes

Hi, @VictorLerp
In current UE5.3.2, I have set “xr.OpenXRFBFoveationLevel 3”, but there has no foveation effects. Will this command line be worked in UE5.4?
For now, only meta-xr plugin can enable the foveation correctly.

There were a few fixes added in 5.4 that should make it work now. However, I do recommend the use of the MetaXR plugin for Meta Quest development.

1 Like

Still broken in 5.4.2

Now it says

Error: CreateFoveationProfile() failed: required extensions not enabled: XR_FB_foveation 0

But in the OpenXR setting the box is checked.

Tried foveation with UE5.3, just fix the bug in this line:
UnrealEngine/Engine/Plugins/Runtime/OpenXR/Source/OpenXRHMD/Private/FBFoveationImageGenerator.cpp at 5.3 · EpicGames/UnrealEngine (github.com)
with the following code:

if (!bFoveationExtensionSupported || !OpenXRHMD || FoveationImages.IsEmpty())

And also, for some devices like “Android_Adreno7xx”, we need to enable the VRSFormat=3 manually:

+CVars=r.Vulkan.VRSFormat=3