WoodXLT
(WoodXLT)
1
我正在做一个光学的全身动画的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,这个结点中不知道该怎样填充数据给动画,试过几次都不能正确的产生数据
WoodXLT
(WoodXLT)
4
FPoseContex.Pos是一个压缩之后的数据,操作的是LOD骨骼,我不知我这样是否理解对了,所以我是要把world坐标系的数据转换到CompactPose 空间中吗
WoodXLT
(WoodXLT)
5
我们现在不理会动捕数据,只是想在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());
动捕的数据理论上也可以通过上述接口进行同步。
WoodXLT
(WoodXLT)
7
vicon, shadowmocap都没有这样处理,而是派生自AnimNode_Base,然后直接更新bone的transform数据
WoodXLT
(WoodXLT)
8
请问能否告诉我,如果我在
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吗