[XR]动捕 Unreal + ControlRig + ViveTracker
转载 :
开发环境:
Windows 10 专业版; UE4.27; ue插件:LiveLink / ControlRig / SteamVR Vive Pro 套件; Vive Tracker 3.0 (4个); Steam Valve Index (2个),主要为了添加手指控制; 虚拟Avatar:Daz3D人物模型; 开发步骤:
SteamVR设备相关:参考 [XR]动捕 UnityXR + FinalIK(VRIK) + SteamVR_GrimRaider的专栏-博客 使用Final IK 控制人类骨骼实时同步动作。Unity + Final IK https://blog..net/GrimRaider/article/details/121699024?spm=1001.2014.3001.5501 获取Tracker数据:(2种方式: MotionController / LiveLinkSource,本例使用的MotionController) 拼ControlRig(全身): 6个控制节点:head / hip / left hand / right hand / left foot / right foot; 4个PoleVector:左右elbow,左右knee; 注意control节点要和骨骼初始Transform完全一致,因为后续需要使用Tracker同步数据; 简单的例子就是把手部和足使用BaseIK(TwoBonesIK)实现,头部简单处理成从Control获取Transform数据(GetTransform - Control)然后直接设置给对应骨骼( SetTransform - Bone),hip也同head; 自己不会拼ControlRig也可参考Daz3D插件自带的Genesis8SimpleCtrlRig,或ControlRigForDaz3D,如果发现模型四肢扭曲,先排除是不是导出时没勾选 "Fix bone rotations on imports" ; 拼ControlRig(手指): 主要使用DistributeRotation节点控制手指弯曲; 弯曲值从index传过来的 SteamVRFingerCurls(弯曲度)获取,Splays数据不会用; 在Tracker的MotionController下创建ControlRig里的control同步节点; 运行校准时,将所有Tracker和人物Avatar模型重合,使用GetSocketTransform提取对应骨骼世界Transform,将MotionController下的control节点设置为此数据,完成校准; 校准后,每Tick获取第6步的control节点世界Transform,设置到ControlRig对应control上,就完成动捕数据同步了,注意使用FromWorld转换一下坐标系。 面捕可以直接使用Daz3D插件自带的资源目录下找(DazToUnrealContent)Genesis81ArkitExample,看不到的同学请安装Daz3D对应插件,并开启ViewOptions中的 "Show Engine Content" ,配合上 LiveLinkFace; index和Tracker Controller模型,可以使用OpenXR插件中的left_ValveIndexController、right_ValveIndexController,和Engine/VREditor/Devices/Vive,一般OpenXR/Devies下有大部分模型; 参考: