VR:MotionController与插件
前言
VR设备种类繁多, 而且因为OpenXR的推出, 各种设备都有自家版本和OpenXR版本的插件, 当中也有很多差异, 所以本文记录一下开发VR时, MotionController与插件之间的关系
我们以4.27Plus版本引擎测试, 创建默认的VR模板项目
看到插件页面, 模板统一使用了OpenXR的环境, 像SteamVR和OculusVR都没有开启
下面具体对比一下当中的差别
坐标系
设备自家的插件形态各异
OpenXR的设备信息统一成了一直的3个, 即下图中的几个
从代码中也可以看到
先看steam家的指虎手柄, 也就是ValveIndex头显配套的手柄的位置信息
Valve Index
先看OpenXR
Aim的位置在手柄外, 朝向接近于顶部面板的切线方向,
另外两者都是手柄抓握的地方, 接近于质心的位置
在蓝图里的预览视图内, 如果把OpenXR插件内的预览模型直接拖进去, 那么位置就是我们运行时的位置
然后是SteamVR的
看一下SteamVR的代码可以看到
一般, 有用的只有Left和Right
Tracker应该是Vive自己的追踪器设备, 没有条件测试就先略过
按上图中显示, 只有一个位置, 这个质心是在手柄顶部, 这个就不太友善了, 需要做额外的位置匹配
目前版本的SteamVR控制器位置信息会覆盖掉OpenXR的信息
不知道V社这么想的……这个位置是干啥的…
HTC Vive
前者是OpenXR的, 后者是SteamVR
Oculus
Oculus的插件有OculusVR和OculusOpenVR, 目前是2选1的情况, 先看OculusOpenXR
Oculus只有Quest2做测试, Quest比较特别, 如果开启的是OculusOpenXR的话没有办法直接通过引擎编辑器进入VR预览(开OculusVR就可以), 那么只有打包出来看
然后如下图
实际效果与Index很接近, 但是遇到了一个可能是渲染Bug, 左眼一切正常, 右眼的Trigger的位置(上图中的球)是有偏差的, 导致上图中的球看上去不正常, 实际测试了一下逻辑是对的, 包括箭头也是正确的
用蓝图预览试图中模拟一下, 效果大概就是打包以后的效果
然后是Oculus自家的VR, OculusVR
位置和朝向都跟前者不一样
而且只有一个Left和Right的位置信息, 其他的都没有
其他
OpenXR和SteamVR下的HTC Vive和Index按键基本上都能获取到
但是2种环境下, Index的触摸板Trackpad只能检测到Axis的X和Y, 以及Action中的Touch事件, 上下左右4个反向的按下都无法接收(虽然这么小的一个触摸板确实很难保证不误触)
总结
目前版本而言, 但从MotionController的角度看(其实还有一些渲染选项问题, 暂略), 似乎SteamVR可以被OpenXR完全取代
但是Oculus这一分支还只能用OculusVR, 毕竟不能每次调试都打包一次. 而且Meta官方建议也是开启OculusVR, 估计是OculusOpenXR还不够完善吧