Skip to content

Quest Pro body tracking over Link broken on Quest OS v2.3 (works on v2.1.1034) #136

@SilicoBen

Description

@SilicoBen

Unity version

6.4

Meta XR Core SDK version

201.0.0 (also reproduced on v85.0.0)

Which OS are you using?

Windows 11 (10.0.26200)

Where does the issue occur?

  • In Unity Editor
  • In Quest builds

Description

Summary

Body tracking over PCVR Link (Quest Pro) regressed between Quest OS v2.1.1034 and v2.3. Same PC, same Unity project, same Meta XR SDK — swapping only the headset firmware changes the behavior.

  • v2.1.1034 headset → body tracking works correctly over Link.
  • v2.3 headsetOVRPlugin.GetBodyState4 returns false indefinitely despite StartBodyTracking2 succeeding.

Environment

Component Version
Headset Meta Quest Pro
Connection USB Link cable
Windows Windows 11 (10.0.26200)
Meta Horizon Link desktop 85.0.0.239.552
Unity Editor 6000.4.3f1
Meta XR Core SDK 201.0.0 (also reproduced on v85.0.0)
Unity OpenXR Plugin 1.16.1
Active OpenXR Runtime Meta Horizon (oculus_openxr_64.json)
OVRProjectConfig.bodyTrackingSupport Supported
OVRRuntimeSettings.BodyTrackingJointSet FullBody (also repro with UpperBody)
OVRRuntimeSettings.BodyTrackingFidelity High (also repro with Low)

Expected behavior

OVRBody.BodyState returns a valid BodyState with JointLocations populated every frame, matching the behavior on v2.1.1034.

Actual behavior

  1. OVRPlugin.bodyTrackingSupported returns true.
  2. OVRBody.OnEnable calls OVRPlugin.StartBodyTracking2(jointSet) → returns true.
  3. OVRPlugin.RequestBodyTrackingFidelity(fidelity) returns false with "body tracking fidelity is not supported".
  4. Every subsequent frame, OVRPlugin.GetBodyState4 returns false, so OVRBody.BodyState has no value.
  5. Continues indefinitely — no data ever flows. Same result after multiple session restarts, headset remounts, Link reconnects.

Reproduction steps

  1. Set up a Unity project with Meta XR Core SDK 201 + OpenXR Plugin 1.16.1.
  2. Enable OVRProjectConfig.bodyTrackingSupport = Supported.
  3. Add an OVRBody component to a scene GameObject.
  4. Connect a Quest Pro on Quest OS v2.3 via USB Link.
  5. Enter Play mode.
  6. Observe: OVRBody.BodyState has no value every frame.
  7. Swap to a Quest Pro on Quest OS v2.1.1034 — no other changes. Body tracking works immediately.

Log snippet (broken session)

[OVRPlugin] [RequestBodyTrackingFidelity] body tracking fidelity is not supported
[OVRBody] Failed to set Body Tracking fidelity to: High
... (every frame) ovrBody.BodyState has no value

Impact

  • Blocks Link-based development of Movement SDK apps.
  • Cannot deliver client demos requiring body tracking over Link.
  • Affects research/clinical deployments where Link is used for desktop monitoring while body tracking a participant.

Notes

  • Both headsets show "Software is up to date" in System → About — v2.1.1034 was apparently skipped for update on one of the two headsets despite both being on the same account.
  • Unable to downgrade v2.3 headset since Quest bootloader rejects firmware rollback.
  • Fix is urgent for any developer shipping Movement/body-tracked content via Link.

Request

  1. Confirm this is a known regression in Quest OS v2.3.
  2. Provide a timeline for a fix.
  3. Ideally, a workaround for v2.3 (e.g. override flag, developer-mode toggle).

cc @meta-quest team

Steps to reproduce

Summary

Body tracking over PCVR Link (Quest Pro) regressed between Quest OS v2.1.1034 and v2.3. Same PC, same Unity project, same Meta XR SDK — swapping only the headset firmware changes the behavior.

  • v2.1.1034 headset → body tracking works correctly over Link.
  • v2.3 headsetOVRPlugin.GetBodyState4 returns false indefinitely despite StartBodyTracking2 succeeding.

Environment

Component Version
Headset Meta Quest Pro
Connection USB Link cable
Windows Windows 11 (10.0.26200)
Meta Horizon Link desktop 85.0.0.239.552
Unity Editor 6000.4.3f1
Meta XR Core SDK 201.0.0 (also reproduced on v85.0.0)
Unity OpenXR Plugin 1.16.1
Active OpenXR Runtime Meta Horizon (oculus_openxr_64.json)
OVRProjectConfig.bodyTrackingSupport Supported
OVRRuntimeSettings.BodyTrackingJointSet FullBody (also repro with UpperBody)
OVRRuntimeSettings.BodyTrackingFidelity High (also repro with Low)

Expected behavior

OVRBody.BodyState returns a valid BodyState with JointLocations populated every frame, matching the behavior on v2.1.1034.

Actual behavior

  1. OVRPlugin.bodyTrackingSupported returns true.
  2. OVRBody.OnEnable calls OVRPlugin.StartBodyTracking2(jointSet) → returns true.
  3. OVRPlugin.RequestBodyTrackingFidelity(fidelity) returns false with "body tracking fidelity is not supported".
  4. Every subsequent frame, OVRPlugin.GetBodyState4 returns false, so OVRBody.BodyState has no value.
  5. Continues indefinitely — no data ever flows. Same result after multiple session restarts, headset remounts, Link reconnects.

Reproduction steps

  1. Set up a Unity project with Meta XR Core SDK 201 + OpenXR Plugin 1.16.1.
  2. Enable OVRProjectConfig.bodyTrackingSupport = Supported.
  3. Add an OVRBody component to a scene GameObject.
  4. Connect a Quest Pro on Quest OS v2.3 via USB Link.
  5. Enter Play mode.
  6. Observe: OVRBody.BodyState has no value every frame.
  7. Swap to a Quest Pro on Quest OS v2.1.1034 — no other changes. Body tracking works immediately.

Log snippet (broken session)

[OVRPlugin] [RequestBodyTrackingFidelity] body tracking fidelity is not supported
[OVRBody] Failed to set Body Tracking fidelity to: High
... (every frame) ovrBody.BodyState has no value

Impact

  • Blocks Link-based development of Movement SDK apps.
  • Cannot deliver client demos requiring body tracking over Link.
  • Affects research/clinical deployments where Link is used for desktop monitoring while body tracking a participant.

Notes

  • Both headsets show "Software is up to date" in System → About — v2.1.1034 was apparently skipped for update on one of the two headsets despite both being on the same account.
  • Unable to downgrade v2.3 headset since Quest bootloader rejects firmware rollback.
  • Fix is urgent for any developer shipping Movement/body-tracked content via Link.

Request

  1. Confirm this is a known regression in Quest OS v2.3.
  2. Provide a timeline for a fix.
  3. Ideally, a workaround for v2.3 (e.g. override flag, developer-mode toggle).

cc @meta-quest team

Logs

## Unity Console log (broken session, Quest OS v2.3)


[BT-DEBUG] MetaBodyStreamProvider.Awake on 'Meta BodyTracking Provider': useFullBodyJointSet=True. OVRBody creation deferred to first Start frame to avoid stalling scene-load (compositor watchdog).
UnityEngine.Debug:Log (object,UnityEngine.Object)
Tracking.Body.MetaBodyStreamProvider:Awake () (at ./Packages/com.silicolabs.labo/Runtime/Tracking/Body/Providers/MetaBodyStreamProvider.cs:95)

[BT-DEBUG] MetaBodyStreamProvider.Start: OVRBody=attached, OVRPlugin.bodyTrackingSupported=True.
UnityEngine.Debug:Log (object,UnityEngine.Object)
Tracking.Body.MetaBodyStreamProvider:Start () (at ./Packages/com.silicolabs.labo/Runtime/Tracking/Body/Providers/MetaBodyStreamProvider.cs:107)

[OVRPlugin] [RequestBodyTrackingFidelity] body tracking fidelity is not supported
 (arvr\projects\integrations\OVRPlugin\Src\Util\CompositorOpenXR.cpp:11141)
UnityEngine.Debug:LogWarning (object)
OVRManager:OVRPluginLogCallback (OVRPlugin/LogLevel,intptr,int) (at ./Library/PackageCache/com.meta.xr.sdk.core/Scripts/OVRManager.cs:2157)
OVRPlugin:RequestBodyTrackingFidelity (OVRPlugin/BodyTrackingFidelity2) (at ./Library/PackageCache/com.meta.xr.sdk.core/Scripts/OVRPlugin.cs:10891)
OVRBody:StartBodyTracking () (at ./Library/PackageCache/com.meta.xr.sdk.core/Scripts/Movement/OVRBody.cs:167)
OVRBody:OnEnable () (at ./Library/PackageCache/com.meta.xr.sdk.core/Scripts/Movement/OVRBody.cs:130)

[OVRBody] Failed to set Body Tracking fidelity to: High
UnityEngine.Debug:LogWarning (object)
OVRBody:StartBodyTracking () (at ./Library/PackageCache/com.meta.xr.sdk.core/Scripts/Movement/OVRBody.cs:171)
OVRBody:OnEnable () (at ./Library/PackageCache/com.meta.xr.sdk.core/Scripts/Movement/OVRBody.cs:130)

[BT-DEBUG] MetaProvider.UpdateBodyState tick#1: ovrBody.BodyState has no value (Meta runtime not feeding data).
UnityEngine.Debug:LogWarning (object,UnityEngine.Object)
Tracking.Body.MetaBodyStreamProvider:BuildBodyFrame (Tracking.Body.LaboBodyStreamSample) (at ./Packages/com.silicolabs.labo/Runtime/Tracking/Body/Providers/MetaBodyStreamProvider.cs:139)
Tracking.Body.LaboBodyStreamProvider:UpdateData () (at ./Packages/com.silicolabs.labo/Runtime/Tracking/Body/Providers/LaboBodyStreamProvider.cs:49)
Tracking.Body.LaboBodyStreamManager:Update () (at ./Packages/com.silicolabs.labo/Runtime/Tracking/Body/Unity/LaboBodyStreamManager.cs:175)

[BT-DEBUG] MetaProvider.UpdateBodyState tick#120: ovrBody.BodyState has no value
[BT-DEBUG] MetaProvider.UpdateBodyState tick#240: ovrBody.BodyState has no value
[BT-DEBUG] MetaProvider.UpdateBodyState tick#3240: ovrBody.BodyState has no value
...continues indefinitely — no frame of body data ever returns.

Additional info

Key observations from the log

  1. OVRPlugin.bodyTrackingSupported = True — the runtime reports body tracking as available.
  2. OVRPlugin.StartBodyTracking2(jointSet) succeeds.
  3. OVRPlugin.RequestBodyTrackingFidelity fails with "body tracking fidelity is not supported" on v2.3 — same call succeeds on v2.1.1034.
  4. OVRPlugin.GetBodyState4 returns false every frame from that point on; OVRBody.BodyState has no value.
  5. Swapping the headset to OS v2.1.1034 on the same PC / project / SDK → body tracking works immediately, GetBodyState4 returns valid joint locations.

The RequestBodyTrackingFidelity failure correlates exactly with the GetBodyState4 data-flow failure. We suspect the v2.3 runtime's fidelity extension handshake is broken in a way that also prevents the body-tracking data stream from starting.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions