How convert motion capture world space data into custom FAnimNode

我正在做一个光学的全身动画的UE4插件,我收到的数据是网络流,流里有骨骼数据(position, rotation),都是世界坐标系下的。
我用的是一个自定义的结点
USTRUCT(BlueprintType)
struct MOTIONVR_API FAnimNode_DataStream : public FAnimNode_Base
{
GENERATED_USTRUCT_BODY()
//…

然后我重写了Initialize_AnyThread, CacheBones_AnyThread, Update_AnyThread, Evaluate_AnyThread
关键就在Evaluate_AnyThread,这个结点中不知道该怎样填充数据给动画,试过几次都不能正确的产生数据

也可以说是正确的数据,更正为正确的动画姿势

FPoseContex.Pos是一个压缩之后的数据,操作的是LOD骨骼,我不知我这样是否理解对了,所以我是要把world坐标系的数据转换到CompactPose 空间中吗

我们现在不理会动捕数据,只是想在Evaluate_thread里把某个关节旋转30度,该怎么做呢

你好,整体的骨骼数据的同步的解决方案建议可以参照Livelink的代码实现。

如果不想自己实现,也可以直接使用引擎提供的LiveLink的接口,自己创建一个LiveLinkProvider,参照引擎中
MayaLiveLinkPlugin的代码,在MayaLiveLinkPlugin.cpp里,

//创建LiveLinkProvider:

LiveLinkProvider = ILiveLinkProvider::CreateLiveLinkProvider(TEXT(“Maya Live Link”));

//设定骨骼名称和父节点Index Array

LiveLinkProvider->UpdateSubject(SubjectName, JointNames, JointParents);

//同步骨骼Tranfrom和Curve以及时间数据。

LiveLinkProvider->UpdateSubjectFrame(SubjectName, JointTransforms, Curves, FPlatformTime::Seconds(), CurrentTime.value());

动捕的数据理论上也可以通过上述接口进行同步。

vicon, shadowmocap都没有这样处理,而是派生自AnimNode_Base,然后直接更新bone的transform数据

请问能否告诉我,如果我在
void FAnimNode_DataStream::Evaluate_AnyThread(FPoseContext& Output)
{
TArray TempBones = Output.Pose.GetBoneContainer().GetRefPoseArray();

TempBones[29].SetRotation(FRotator(0, 0, 30).Quaternion());

Output.Pose.CopyBonesFrom(TempBones);

}
请问这段代码的效果是什么,能把boneIndex29的骨骼绕x轴30吗