Neos-Metaverse / NeosPublic

A public issue/wiki only repository for the NeosVR project
195 stars 9 forks source link

Map HapticPointMapper locations to the mid-point between bones #2953

Open shiftyscales opened 3 years ago

shiftyscales commented 3 years ago

Is your tweak request related to a problem? Please describe.

Presently, the HapticPointMapper components, e.g. TorsoHapticPointMapper, ArmHapticPointMapper, etc. are positioned right at the bones they reference, producing inaccurate/inconsistent results compared to what a user might expect, e.g. to touch one's forearm, they need to touch at the elbow, to touch one's hand, it needs to be at the wrist, etc.

Describe what would you like tweaked

If the HapticPointMapper components could place the haptic points at the mid point between the bone its referencing and the next bone down the hierarchy, it would produce considerably more accurate and intuitive results.

Describe alternatives you've considered

Users could take the time to map these points themselves- but the goal of this issue is to improve the baseline accuracy of haptics for avatar interactions.

Additional context

Observed by Shifty, Cataena#3067 and others alongside #2952.

Frooxius commented 3 years ago

This isn't actually how they work, positioning of the component itself doesn't matter, their assigned references do. What they do is get all the bones of the given body part (e.g. spine bones in case of torso, or upper arm and forearm for arms) and then position the locations based on normalized positions along those.

The actual normalized positions also depend on the haptic device being used, to create the final mapping between where the device is on the body and where it maps on the avatar.

We can tweak the values a bit to be more accurate, but I'd need the following:

E.g. for the bHaptics arm, the points should be positioned near the end of the forearm towards the hand.

shiftyscales commented 3 years ago

Interesting. In this case it was just using Index Controllers as the haptic device, and in how they respond to each limb- as mentioned, I had noticed that every one seemed to be positioned directly at the bone I can try to see if I notice this happening with any specific avatars, or more generally.

E.g. while I was testing it out as per #2952 I had noticed that on the user I was touching at the time, the vibrations would occur in a small range right at the wrist, elbow, and shoulder of the avatar rather than on the middle of the hand, forearm, and upper arm as I would have expected.

No other haptic devices were being used as I don't currently own any other haptic devices.

Is there anything in particular that needs to be done to enable the debug visuals if there isn't a haptic device connected for that body part? I'd noticed that when trying to visualize it by using the debug visuals none seemed to be generated despite there definitely still being haptic points placed directly on top of the bones the component was referencing.

Frooxius commented 3 years ago

If you go to the user's root and to Left/RightController, there's ControllerHapticPointMapper, which allows you to visualize the debug visuals.

I'm actually a bit confused, why are there two issues for this? This one and #2952 seem the same issue if both are concerning the controller haptic point.

shiftyscales commented 3 years ago

I'm probably mis-using some terminology, #2952 is about the HapticPointSampler/where the user has to position their hand relative to a haptic collider to trigger the haptics.

This issue is because it was noticed that after finding out where the HapticPointSampler is placed by default, and accommodating for it, the haptic triggers/colliders on other user's avatars was discovered to also not be in the positioning expected.

(It's possible I'm also misunderstanding how the process works.) But I'm specifically referring to the default/auto-set-up haptic volumes you can trigger when you feel someone's avatar with your controllers.