Valve Index and haptic feedback with OpenXR

UE5.0.3 here and can confirm Index haptics are pretty broken with OpenXR. I can sometimes get it to play once, but then I will have to restart the editor completely to get it to play again.

Yeah, I’m not sure what I expect from Epic, here. I’d love a magic fix but we can’t provide a sample project that will reproduce the issue consistently for everyone. On my machine, for example, I can consistently reproduce the issue but if I send that same project to someone else, with the exact same hardware and software configuration, it’s a 50/50 chance they’ll have the problem. But to make it worse not all projects have the issue on my machine.

The only change that’s common appears to be the switch to OpenXR, so somewhere in that chain something became fragile and inconsistent.

For now we’ve given up and disabled haptics entirely, which is unfortunate because it’s a regression for our software. But we also can’t abandon OpenXR, either.

I found a work-around if you’re building from source:

OpenXRInput.cpp

void FOpenXRInputPlugin::FOpenXRInput::SetHapticFeedbackValues(int32 ControllerId, int32 Hand, const FHapticFeedbackValues& Values)
...
HapticValue.duration = MaxFeedbackDuration/20.0; 
...

What’s happening is that the Haptic duration is always set to 2.5 seconds. On the Vive Wands they are continuing to rumble for this time.

This is a work-around as the stop haptics function (xrStopHapticFeedback) should work for the Vive OpenXR implementation and isn’t stopping the haptics.

1 Like

Can confirm haptics are broken in 5.0.3 for vive wands. They always vibrate for 2s and there’s no control over it. What’s strange is that vr template has this working most of the time, but even there it sometimes breaks and haptics don’t stop.

I also have problems with haptic effects on Valve Index Controllers using OpenXR plugin in UE 5.0.3 and SteamVR 1.24.3 (same with the current official SteamVR 1.23 release).

The haptic effect (curve or direct values) is playing correctly once. After that, it is no longer possible to play a haptics effect until you either press the trigger or activate the grab sensor on the controller. After that, you can play a single haptics effect before it stops again. And so on.

This also happens in the VR-Shooter template.

So it looks like, after playing a haptic feedback, the controller ignores the following requests until the “internal” haptics are played by the controller (by pressing the trigger until it plays the small haptics when the trigger is about half way in or by activating the grab haptics when you open then close your hand).

I can easily reproduce this on my system. Has anyone found a solution or at least a workaround for that problem?

1 Like

Having the same issue with 4.27.2, haptics play only once, and then you have to wait until they are reset by the thumbpad’s or trigger’s default haptics to be able to run again.

170hz fixed it for me, thanks!

After a quick test of the 5.1 VR template, seems like we can use the “Play Haptic Effect” function call now without issue when using SteamVR and Index controllers.
The “Set Haptics By Value” node seems bugged, so best to avoid it and only set up haptics via Haptic Event Objects instead of manually entering values. Kind of a shame since I did like the old SteamVR way of “Play this freq and this amp for this long” haptic function call but oh well, this works a treat.

To test, I added a “Set Haptics by Value” node to the pickup and drop events within the vr template’s gun bp, followed by a 0.5s delay and a "Stop Haptic Effect.

The “Set Haptics by Value” node never fired on pickup, and only fired on drop if I launched a projectile while holding it, thus allowing the “Play Haptic Effect” node to fire before attempting to “Set Haptics by Value.”

The “Play Haptic Effect” node worked every time without issue.

I’m having the same issue in 5.1 with OpenXR, Play Haptic Effect does not trigger on Valve Index Controllers until you press the trigger and the internal haptic handler takes over, after that you can Play Haptic Effect once and then becomes unresponsive. Does anyone have found a workaround? the 170 hz freq did not work for me.

Can someone confirm haptics work with Valve Index in 5.1?

Haptics are not working for me either with Index controllers in 5.1. None of the solutions above have helped. Any update from Epic, when could we expect this to be fixed?

Another Index related issue with OpenXR is that there seems to be no way to get the finger data from the Index controllers. Has anyone found a solution for that?

The finger tracking data should be available from the Get Motion Controller Data node and IHandTracker if you enable the OpenXR Hand Tracking Addon.

I also have some pull requests that add an AnimGraph node for directly animating hand models, and support for the joint motion range extension. Any feedback on them would be appreciated.
https://github.com/EpicGames/UnrealEngine/pull/9748
https://github.com/EpicGames/UnrealEngine/pull/9747

3 Likes

Any updates on this issue @VictorLerp ?

Thanks

I’ve verified this problem on my system as well (UE5.1, OpenXR, Valve Index controllers).

As a workaround until the bug is fixed, I’ve found that you can avoid using Stop Haptic Feedback and instead call Start Haptic Feedback with very small Amplitude and Frequency (I used 0.000001).

The controller will still vibrate for the 2.5 hardcoded seconds but (probably) it isn’t perceptible to the user except audibly (if you hold it up to your ear). Hardly ideal and it will result in faster battery drain, but if used sparingly maybe not the worst thing in the world.

Any updates from Epic to the haptic issue? XR development (or at least building a finished product) is impossible at the moment in 5.1 because of this. Could we have an update whether this will be fixed in 5.1.1 or do we have to wait longer?

We’re tracking down whether the issue is with the runtime or application - no ETA yet. Just wanted ya’ll to know we’re working on it and I’ll update the thread as soon as we know more.

5 Likes

That’s great to hear! Right now it’s impossible to implement any haptics for vive.

There seems to be fixes for the haptics in the latest SteamVR beta that released yesterday:

https://steamcommunity.com/games/250820/announcements/detail/3671029700618043046

Fixed some haptic issues including pre-set minimum duration to resolve issue with Vive Wands not responding to xrStopHapticFeedback.

2 Likes

When updating to this beta version we were still unable to get any vibration at all on the index

I’m unable to reproduce this in 5.1 VR Template w. the latest SteamVR update, using Index and Index controllers. Is SteamVR set as the active OpenXR runtime?