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

    JoeStrout

    Joined:
    Jan 14, 2011
    Posts:
    9,859
    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.
    upload_2020-4-27_9-51-16.png

    Vive: also pretty close to 0.
    upload_2020-4-27_9-51-50.png

    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):
    upload_2020-4-27_9-52-26.png

    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.
    upload_2020-4-27_9-58-13.png

    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