diff --git a/02-Note/DAWA/ASoul/动画相关/动捕逻辑.md b/02-Note/DAWA/ASoul/动画相关/动捕逻辑.md index 77edaa9..1dff82a 100644 --- a/02-Note/DAWA/ASoul/动画相关/动捕逻辑.md +++ b/02-Note/DAWA/ASoul/动画相关/动捕逻辑.md @@ -424,17 +424,39 @@ public: 2. GetModelBones() 1. 主要在FAnimNode_FullBody::Initialize_AnyThread()被调用。 2. 填充`TArray BoneRefList;`,顺带初始化SampledFullBodyData。 - 3. InitBoneRefIndex(),初始化BoneRefList中每个FBoneReference的BoneIndex(通过骨骼名称找到) + 3. InitBoneRefIndex(),初始化BoneRefList中每个FBoneReference的BoneIndex(通过骨骼名称找到),如果没有找到会提示对应的Log。 4. FAnimNode_FullBody::Evaluate_AnyThread(),作用在[[#ApplyDataToPose()]]。 3. GetMorphTargets() 1. 主要在FAnimNode_FullBody::Initialize_AnyThread()被调用。 ## ApplyDataToPose() ### BoneTransform -遍历BoneRefList(从UMotionUtils::GetModelBones()获得) +1. 遍历BoneRefList(从UMotionUtils::GetModelBones()获得) +2. 对BoneIndex有效的骨骼进行一些操作。 + 1. 取得当前动画蓝图输出Pose的**骨骼Index**以及**采样后动捕数据的旋转值**。 + 2. 如果骨骼名是Hips,就将当前Index设置给HipsIndex。 + 3. 将旋转值应用到OutputPose中。 + 4. 判断当前骨骼名是否为MoveableBones中的名称,将这些骨骼的Location设置到OutputPose中。 ### MorphValues - Apply Morph Values - +将对应MorphTarget数据应用到对应的CurveChannel上。 ### RootMotion -bUseHipsTranslation \ No newline at end of file +根据bUseHipsTranslation变量执行不同的逻辑: + +#### MapTranslationToHips +调用函数形参如下: +```c++ +MapTranslationToHips(Output, EvaluatedFullBodyData, 0, HipsIndex); +``` + +1. 获取Joints骨骼的Locaiton作为RootMotion数据 +2. 判断Joints骨骼是不是根骨骼,如果**是**则调整RootMotion数据轴向。 +3. 将Joints骨骼的Location归零。 +4. 如果Hips骨骼有效,则将RootMotion数据加到其Location上。 + +#### ExtractRootMotionInfo +1. 获取Joints骨骼的Locaiton作为RootMotion数据。 +2. 判断Joints骨骼是不是根骨骼,如果**不是**则调整RootMotion数据轴向。(**轴向与MapTranslationToHips()不同**) +3. 将Joints骨骼的Location归零。 +4. 将RootMotion设置给AnimInstance的RootMotionLocation。 +5. 如果Hips骨骼有效,进行一堆计算,最终将Rotation设置AnimInstance的RootMotionRotation。 \ No newline at end of file