Set Tracking Origin is not working. Always gets Staged

Hello!

I’ve been stucked with this for a long time now.

I set the tracking origin to Floor, in both CPP begin Play of my Pawn character, and in the Blueprint code. But whenever I use GetTrackingOrigin() to confirm the setting, it returns as Staged.

Code

Output Logs

[2022.08.11-21.33.31:226][  0]LogBlueprintUserMessages: [BP_MRRPawn_C_2147482526] IS HEAD MOUNTED DISPLAY ENABLED: true
[2022.08.11-21.33.31:226][  0]LogBlueprintUserMessages: [BP_MRRPawn_C_2147482526] GET TRACKING ORIGIN: Stage
[2022.08.11-21.33.31:226][  0]LogBlueprintUserMessages: [BP_MRRPawn_C_2147482526] ForceHMDTrackingOriginToFloor: 
[2022.08.11-21.33.31:226][  0]LogBlueprintUserMessages: [BP_MRRPawn_C_2147482526] IS HEAD MOUNTED DISPLAY ENABLED: true
. . . 
[2022.08.11-21.33.35:086][  2]LogBlueprintUserMessages: [BP_MRRPawn_C_2147482526] GET TRACKING ORIGIN: Stage
[2022.08.11-21.33.35:086][  2]LogBlueprintUserMessages: [BP_MRRPawn_C_2147482526] CHANGING TRACKING ORIGIN: 
[2022.08.11-21.33.35:371][  3]LogBlueprintUserMessages: [BP_MRRPawn_C_2147482526] GET TRACKING ORIGIN: Stage
[2022.08.11-21.33.35:371][  3]LogBlueprintUserMessages: [BP_MRRPawn_C_2147482526] SET TRACKING ORIGIN FINISHED: 

I am using OpenXR and OpenXR Oculus plugin.

I don’t understand why this is not being set!

I’ve done some test.

This happens when using OpenXR and Oculus OpenXR with Android stand alone build.

When testing with SteamVR, the track origin is set correctly.

If I use the OculusVR plugin instead and build for Android, the tracking origin works properly, however, it beings other shading and input issues, so it’s not a true solution.

The OpenXR spec only supports two different tracking spaces, local and stage. The stage mode is a roomscale mode where the tracking origin is set on the floor in the middle of the playspace. This matches the standing tracking space in SteamVR at least.

The Unreal OpenXR plugin will use the stage tracking space if you pick either the floor or stage modes.