Why am I getting different results and what can I do to ensure that the hands in my game are properly aligned in all scenarios? I can’t have the hands in my game change position like that
I think the only way is to manually rotate them based on the VR system name. IIRC the VR template 4.26 and older had an example that switched of names from the GetHMDDeviceName node.
Thanks for answering, not sure what we would do without you around here
The thing is both of these examples are with a Quest headset so that node would return “OculusHMD” in both cases which wouldn’t help unless I can also know if Oculus Link or SteamVR is running so that if it’s “OculusHMD” + “SteamVR” then I can offset the controllers, but not if it’s “OculusHMD” + “Oculus Link”
Now that Steam Link is available, I feel that many Quest users are going to use it over Oculus Link and they’ll end up with the hands in a wrong position
For the legacy Oculus and SteamVR plugins, the GetHMDDeviceName node will just return the name of the plugin instead of a headset name. The hand offsets should be (mostly) reliant on if it’s using the OculusHMD or SteamVR plugin.
You’re right, testing it while on Steam Link returns “SteamVR”
I could offset the controllers when it’s using SteamVR but I have no Index/HTC controllers to see if the offset is causing an issue with these controllers, that’s my concern, I have a feeling that the offset is meant to align those controllers properly which in turn messes with the Quest controllers alignment if using Steam Link, I guess I’ll just have to ask people to test it for me
What are they doing in the template to align the controller meshes perfectly, are they just checking which plugin is used and offsetting the meshes like you describe? Do Oculus and SteamVR controllers all share the same orientation and position?
The controller models provided w. the OpenXR Plugin are modeled with their origin to match the offset that the OpenXR runtime provides. However, since you’re not using OpenXR you can either use the old controller models provided by Meta/Valve/etc, or offset them manually. I suggest the former!
So I used Openxr for a year and had many issues which is the reason I’m now going back to the old plugins
My only issue now is that depending on the plugin, the position and rotation of the MotionController changes, In my game I use my own hand skeletal mesh which is attached to the MotionController
So if the controller models shown in the template are always aligned because they have an offset to their origin I guess in my case the only solution is to offset the hands based on the plugin used, and I’ll have to test on a non Meta headset to make sure that my offset isn’t messing with the alignment of the SteamVR supported controllers
I guess my main question is still unanswered, why do the MotionControllers have a different position and rotation when switching to SteamVR, is it a bug? Is it done on purpose because the SteamVR supported controllers (Index,HTC etc) have a different orientation than the Oculus controllers?
An answer to that would really help clarify things
I think it’s just that the legacy APIs use different non-standardized orientations, and the Unreal XR system just returns the raw transforms passed by the APIs.
SteamVR has all the supported controller models available as OBJ files in the installation. Looking at them, the transforms are consistent across different ones, even the Oculus controllers (note that this gives them a different orientation in SteamVR than the Oculus API).
Also, I think it would be a better idea to get OpenXR working (if possible) than fighting the idiosyncrasies of the legacy plugins.
If the transforms are consistent even with the oculus ones then I might risk it and add an offset when SteamVR is in use, worst case people will recalibrate in my game, I’ve made that user friendly
I ditched Openxr because of the runtime bug with Steam Link but Victor said he’ll look into it, I do enjoy being able to change the pixeldensity / screenpercentage which allows me to use plugins like fsr / dlss, and have the ability to recenter manually with the legacy plugins though so this will be a tough decision
I wish I could upgrade to UE5 but with VR and a graphically intensive project like mine UE4 is the only logical solution, I try every once in a while and the performance loss is severe