provencher / MRTK-Quest

MRTK-Quest: Mixed Reality Toolkit (MRTK) extension bridge for Oculus Quest + Rift / S
Other
389 stars 67 forks source link

The hand ray can not point downwards? #66

Closed NoviaDroid closed 4 years ago

NoviaDroid commented 4 years ago

when lower my hand,the hand ray did not follow my hand direction,and disappeared instead.

Is it by design? Because it is very inconvenient to manipulate far objects below my hand

provencher commented 4 years ago

The hand ray pointer logic is entirely managed by the Oculus OS, and it’s designed to change modes as you use it sitting down, or standing.

Here’s a diagram of it working. image

Unfortunately not much I can do improve this. However, it’s worth noting that having worked on custom hand rays in the past, it’s very difficult to do better than what the oculus ray provides in terms of stability and accuracy.

If you really wanted to better support pointing down, you could add a custom transformation offset to the spatial pointer in MRTK-Quest in the OculusHand class, but that’s not something I’m planning on officially supporting.

provencher commented 4 years ago

Actually - you said the ray disappears - that’s from the ray no longer aligning with your head gaze. It might be related the IsInPointingPose check. You may be able to increase the angle tolerance check, but this is the first I’ve heard of it being a problem.

NoviaDroid commented 4 years ago

Thanks for the replay.

I'll try to tweak angle tolerance to see if it can be better.

It indeed bother me for using hand tracking feature,personally I use controller mode 90% time during developing app (based on mrtk-quest),and only 10% time use hand tracking only for show off,less accuracy and less feedback makes hand tracking hard to use.

NoviaDroid commented 4 years ago

Hi,I followed your suggestion and made some hack to OculusQuestHand.cs to make life easier for me,here is my modification:

    public override bool IsInPointingPose
    {
        get
        {
            //simply force return true to make hand ray always show ignore rotation(didn't consider teleport case but it is ok for me)
            return true;
        }
    }

    currentGripPose = jointPoses[TrackedHandJoint.Palm];
    // let pointer rotation follow Palm rotation instead use oculus system hand ray rotation.(but it shakes a lot,maybe add some smooth damp will be better)     
    currentPointerPose.Position = currentGripPose.Position;
    currentPointerPose.Rotation = currentGripPose.Rotation;

In case someone else has the same issue,here is the workaround solution to make hand ray behaves more like controller ray.

provencher commented 4 years ago

Its worth noting that if you enable pointing pose to always true, you'll run into issues with the ray during hand menus and teleport will be unusable.

Also, I highly recommend against setting the pointer pose to the grip position, as it is much less stable can can be difficult to aim in many cases.

Julia Schwarz from Microsoft spoke about this here:

Wrist based rays https://youtu.be/Wythtg38o0M?t=4236

Shoulder based rays https://youtu.be/Wythtg38o0M?t=4420

provencher commented 4 years ago

I did some more testing, and the only time you cannot point downwards is if you try to aim with your palm directly, which is not supported.