Known Issues, FAQ, and Debugging Guide

Known Issues (Unity Plugin)

  • Controller Support limited to Oculus Quest
    • Other controllers will function, but not display correctly

  • Issues in Sample Code
    • Autoconnect sample requires specifying IP address at compile-time

    • Lobby UI sample only tested working on Oculus Quest (uses Quest on-screen keyboard)

    • CxruReprojection.shader issues
      • Vertical banding distortion: some or all platforms exhibit a “blurriness” in the form of 6-10 regularly spaced vertical bands of distortion

      • Speckling: small number of pixels showing random noise, noticeable in dark scenes

      • Turnaround with stalled input: If the input pose is frozen and the HMD turns “all the way around”, the shader shows a distorted version of the frame rather than the correct black

  • Requires Unity OpenXR-based plugin provider
    • Currently, this plugin uses Unity’s OpenXR plugin to get performance-critical pose information directly from a runtime

    • Plugin providers such as ARCore and OculusXR that do not use OpenXR are not supported at this time

  • CloudXR 4.0 only
    • This plugin will not work with previous versions of CloudXR, and is only tested with CloudXR 4.0

  • Incompatible with Unity Multithreaded Rendering
    • On by default, this will cause various issues and will not work properly.

  • Unity’s runInBackground setting in

    ProjectSettings/ProjectSettings.asset needs to be set to 1 in order for HMD transform to be correct during Oculus system menu

  • HTC VIVE OpenXR (Mobile) plugin for Unity 2.0 - No longer includes libc++_shared.so - Now requires “standard” version of package (not sans-libc++ variant)

Frequently Asked Questions

  • Can I make tablet AR clients?
    • Not yet. Tablet AR support is our highest priority upcoming feature.

Debugging Guide

  • CXRU_HMD not defined
    • Symptoms
      • Compilation error on first import of CloudXR package

    • Issue
      • Either CXRU_HMD or (in future) CXRU_TABLET must be defined to select the right code paths in the plugin

    • Resolution
      • Project Settings > Player > Other Settings

      • Define a new symbol CXRU_HMD in the list of conditional compilation defines

  • CloudXR Tuned Pose Capture not enabled
    • Symptoms
      • logcat: Error Unity DllNotFoundException: Unable to load DLL ‘libCloudxrClientlibCsharp.so’ (continuous)

    • Issue
      • Unity has failed to determine that the libraries in the provided AAR are required, and has not included them

    • Resolution
      • Ensure that the “CloudXR Tuned Pose Capture” feature is enabled in Project Settings > OpenXR > OpenXR Feature Groups

  • HMD Origin incorrect
    • Symptoms
      • HMD is located on the “floor” of the remote environment

    • Issue
      • OpenXR poses are not aligned to Unity poses

    • Resolution
      • Set “Tracking Origin Mode” to “Device” on XR Rig/Origin object in scene

  • Render Order Incorrect
    • Symptoms
      • Objects in (local) scene fail to render during streaming (e.g., Mixed Reality Toolkit UI objects)

    • Issue
      • CloudXR sample renderer features/shaders are “overwriting” other rendered objects

    • Resolution
      • Option 1: Use the “UI” layer on all objects to be rendered “over top of”

      • Option 2: Add the “Render Objects” renderer to URP-Performant-Renderer (or the correct URP renderer settings in the Project Window > Settings)
        • Set Event to “AfterRenderingTransparents”, which will force this to be after CxruRendererFeature runs, rendering local objects over top of the streamed pixels

  • MainCamera issues
    • Symptoms:
      • logcat has many of this error:
        • Unity NullReferenceException: Object reference not set to an instance of an object.

        • Unity at CxruClientSampleOculusUI.UpdatePlatform () [0x00000] in <00000000000000000000000000000000>:0

        • Unity at CxruClientSampleOculusUI.Update () [0x00000] in <00000000000000000000000000000000>:0

      • Inside HMD, view may be “locked”

    • Issue:
      • MainCamera is not configured properly

    • Resolution:
      • Ensure only one MainCamera tagged camera in the scene

      • Ensure that MainCamera is attached to an XR Origin or XR Rig

      • Ensure that CloudXRManager.cs is active on that camera object

  • Android Internet permission missing
    • Symptoms
      • Build for Android HMD

      • Undebuggable failure to connect to CloudXR server

      • In Package Manager, the version of the OpenXR plugin is 1.8.2 (or possibly higher)

      • Examine exported Android Studio project, AndroidManifest.xml does not contain Internet permission
        • Even if this permission is enabled in Project > Player Settings

    • Issue
      • As of OpenXR Plugin 1.8.2, Unity has added drill-down settings for the built-in Android Meta Quest Support feature, which includes a “Force Disable Internet Permission” that is on by default (why, I don’t know).

      • Unfortunately, this force disable internet feature is (incorrectly) applied to any Android platform, whether or not the Quest Support feature itself is enabled. So any APK produced by this will never ever connect to a CloudXR server.

    • Resolution
      • Project Settings > XR Plug-in Management > OpenXR

      • OpenXR Feature Groups > Meta Quest support
        • Look for the gear icon to the right of this

      • Find and disable “Force Remove Internet Permission”

  • libc++_shared.so collisions
    • Symptoms
      • Build for these Android platforms:
        • HTC VIVE OpenXR - Android

        • Qualcomm Spandragon Spaces SDK for Unity

        • any other that includes libc++_shared.so

      • Build fails with a Gradle error
        • More than one file was found with OS independent path ‘lib/arm64-v8a/libc++_shared.so’

    • Issue
      • The CloudXR combined AAR library includes a library that ships with a version of lib_c++_shared.so`

      • These platforms’ Unity plugin packages also ship with a version of lib_c++_shared.so

      • Only one can be included

    • Resolution
      • Use the sans-libc++ variant of the main CloudXR Client Unity Plugin (which excludes libc++_shared.so)

    • Justification
      • Assumption: all libc++_shared.so files come from Android NDK of similar versions

      • Observation: there is an actual name collision on libc++_shared.so (i.e., no libstdc++_shared.so or similar)

      • Result: All libc++_shared.so libraries are from the same implementation, and are both ABI and implementation compatible

      • Thus: Any of the libc++_shared.so files will work as the one, singular, permitted shared libc++ implemenation in a combined AAR or final APK.

  • Android run-in-background unset
    • Symptoms
      • On Oculus (and possibly other Android platforms), press (right hand) system menu

      • Move head

      • System menu “tracks” correctly, Unity tracks wrongly

    • Issue
      • Uncertain; something between Unity, Android, XR runtime

    • Resolution
      • Edit this file: ProjectSettings/ProjectSettings.asset

      • Change the value of runInBackground from 0 to 1