Search Unity

  1. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Differences in how controllers report their orientation

Discussion in 'AR/VR (XR) Discussion' started by JoeStrout, Apr 27, 2020.

  1. JoeStrout


    Jan 14, 2011
    I'm working on a cross-platform (Vive/Rift/WMR/Quest) app, and we've run into an issue: the Rift S reports its controllers at a significantly different orientation than anybody else.

    I made a little test app that dumps all the info I could find about the controllers. Then I asked testers on each platform to hold their hands comfortably in front of them and take a screen shot. Scroll on down...

    Quest: controllers near zero rotation, as expected.

    Vive: also pretty close to 0.

    WMR: close to 0 on x and z, and the apparent difference in Y is just because the user was facing another way (as you can tell from the camera Y rotation):

    Rift S: 75° of rotation around X axis means that when the user's hands are physically relaxed, the in-game hands are pitched up; and to make the in-game hands level, the user has to turn his hands down quite a lot.

    The positions and rotations appear twice in each image because I tried both the (deprecated) InputTracking.GetLocalPosition/GetLocalRotation methods, and the newer XRNodeState.TryGetPosition/Rotation approach. But as you can see, these return the same answers.

    How am I to deal with this? The game is not really usable for Rift S users at the moment. And of course I am only assuming it is the different device that matters, but it could be something else in the system configuration (we don't have enough OS/device combinations to test exhaustively).

    Do I need some kind of calibration step, where I ask users to hold their hands neutral, and calculate a rotation offset to apply to all subsequent readings? Or is there some way I should be able to get this through XR?
    Last edited: Apr 27, 2020