Hello,
We are seeing a consistent and reproducible stereo projection issue when using CloudXR.js.
## Symptom
- Meta Quest 2: both eyes are aligned correctly.
- Meta Quest 3 / Quest Pro: both devices behave almost identically. When facing straight ahead, the left eye looks forward, while the right-eye view appears to be looking approximately 30–45 degrees to the left.
- The offset remains visible while the headset is stationary; it is not limited to head motion.
- A standalone WebXR stereo test that does not use CloudXR renders correctly on Quest 3.
## Environment
Server:
- OS: Windows Server 2022, build 10.0.20348
- GPU: NVIDIA RTX 6000 Ada Generation
- NVIDIA driver: 573.96
- Graphics API: D3D11
- CloudXR Runtime: 6.2.1
- Runtime profile: auto-webrtc
- CloudXR.js SDK: 6.2.0
- Stream Manager package: 6.1.0
> All CloudXR 6 components listed above were the latest publicly available versions at the time of testing
- OpenXR test application: Khronos hello_xr, OpenXR SDK 1.1.62
- OpenXR loader: dynamic loader packaged with hello_xr
Clients:
- Meta Quest 2 / Quest 3 / Quest Pro, all running the latest system and browser versions available at the time of testing
- IPD was set to 64 mm on all devices
Streaming:
- Per-eye resolution: 2048 × 1792
- Stereo side-by-side stream
- Codecs tested: `[add the codecs actually tested: H.264 / H.265 / AV1]`
- WebRTC routed through a TURN relay; Quest 2 is correct under the same network conditions
## Reproduction Steps
1. Start the latest CloudXR 6 Runtime with the auto-webrtc profile.
2. Connect using the latest NVIDIA CloudXR.js Simple WebGL sample.
3. Start an OpenXR server application. The NVIDIA LÖVR sample, Khronos hello_xr, and an OpenXR-compliant Unity project all reproduce the issue.
4. Connect with Quest 2: stereo alignment is correct.
5. Keep the same server, application, resolution, and streaming settings, then connect with Quest 3 or Quest Pro.
6. On Quest 3 or Quest Pro, the left eye looks forward, while the right-eye view appears to be looking approximately 30–45 degrees to the left.
## Tests Already Performed
- Pure WebXR stereo tests are correct on Quest 3, which rules out basic WebXR stereo rendering and headset optical calibration.
- The NVIDIA LÖVR sample, Khronos hello_xr, and an OpenXR-compliant Unity project all reproduce the issue, so it is not application- or engine-specific.
- Multiple codecs and rendering settings produce the same result.
- On Quest 3, the issue reproduces both with and without XR_KHR_composition_layer_depth submission.
- Quest 2 renders correctly in both depth-on and depth-off tests.
- Reprojection grids tested: default, 2×2, 8×8, and 32×32. No improvement.
- Pose smoothing disabled and posePredictionFactor set to 0. No improvement.
- We tried adjusting the various parameters exposed by the CloudXR.js WebClient, but none produced the expected result and the right-eye offset remained.
- The offset remains while stationary, making pose prediction or motion timing unlikely as the root cause.
- OpenXR consistently reports viewCount=2. Per-eye resolution, pose, orientation, and IPD data appear reasonable.
- The OpenXR session reaches FOCUSED without XR_ERROR or D3D11 errors.
## OpenXR FOV Comparison
Quest 2:
- Left: (-0.788016, 0.824668, 0.879646, -0.916298)
- Right: (-0.824668, 0.788016, 0.879646, -0.916298)
Quest 3:
- Left: (-0.989602, 0.733038, 0.806342, -1.007928)
- Right: (-0.733038, 0.989602, 0.806342, -1.007928)
Quest 2 has a nearly centered horizontal projection. Quest 3 has a substantially larger per-eye asymmetric horizontal projection center. This correlates with Quest 2 rendering correctly while Quest 3 and Quest Pro exhibit the issue.
Our current hypothesis is that either the CloudXR Runtime metadata path or the CloudXR.js per-eye projection/reprojection path may mishandle strongly asymmetric FOVs, for example by:
- reusing one projection or texture transform for both eyes;
- symmetrizing the per-eye FOV;
- ignoring the horizontal projection-matrix offset;
- applying an incorrect projection center to the right-eye reprojection mesh or decoded texture.
This is only a hypothesis based on the A/B results. We cannot verify it because the relevant CloudXR.js implementation is not exposed.
## Expected Result
Quest 3 and Quest Pro should render correctly aligned stereo views, as Quest 2 does, using the per-eye OpenXR poses and FOV values.
## Questions for NVIDIA
1. Is there a known asymmetric-FOV issue affecting Quest 3 or Quest Pro in the latest CloudXR.js or CloudXR Runtime?
2. Does CloudXR.js reuse any projection, viewport, texture, or reprojection transform between the two eyes?
3. Is there a supported option to disable depth reprojection completely, or render the stereo video without reprojection for isolation?
4. Is an updated build, hotfix, or recommended workaround available?
5. Which additional client or server diagnostic logs would be useful?
Available attachments if needed:
- Quest 2 and Quest 3 hello_xr depth-on/depth-off logs
- CloudXR Runtime server logs
- CloudXR.js Debug logs
- WebXR projection-matrix and viewport logs
- Video demonstrating the visual offset
Thanks
