diff --git a/.obsidian/plugins/various-complements/data.json b/.obsidian/plugins/various-complements/data.json index 62c1d9b..6385330 100644 --- a/.obsidian/plugins/various-complements/data.json +++ b/.obsidian/plugins/various-complements/data.json @@ -47,22 +47,6 @@ }, "showLogAboutPerformanceInConsole": false, "selectionHistoryTree": { - "ShaderLab笔记": { - "ShaderLab笔记": { - "internalLink": { - "count": 1, - "lastUpdated": 1695796563725 - } - } - }, - "github": { - "github": { - "currentFile": { - "count": 1, - "lastUpdated": 1696078782607 - } - } - }, "以垂直关系依次旋转每个轴。": { "以垂直关系依次旋转每个轴。": { "currentFile": { @@ -70,6 +54,30 @@ "lastUpdated": 1698213001403 } } + }, + "设置Skeleton与PreviewMesh资产。": { + "设置Skeleton与PreviewMesh资产。": { + "currentFile": { + "count": 1, + "lastUpdated": 1699256932874 + } + } + }, + "。里面初始化了SourceSkeleton、TargetSkeleton、根骨骼重定向器、UIKRigProcessor、": { + "。里面初始化了SourceSkeleton、TargetSkeleton、根骨骼重定向器、UIKRigProcessor、": { + "currentFile": { + "count": 1, + "lastUpdated": 1699258408430 + } + } + }, + "TargetSkeleton、根骨骼重定向器、UIKRigProcessor、": { + "TargetSkeleton、根骨骼重定向器、UIKRigProcessor、": { + "currentFile": { + "count": 2, + "lastUpdated": 1699258527676 + } + } } } } \ No newline at end of file diff --git a/03-UnrealEngine/Animation/UE5动画重定向核心逻辑笔记.md b/03-UnrealEngine/Animation/UE5动画重定向核心逻辑笔记.md index e5279c3..9c4acc3 100644 --- a/03-UnrealEngine/Animation/UE5动画重定向核心逻辑笔记.md +++ b/03-UnrealEngine/Animation/UE5动画重定向核心逻辑笔记.md @@ -6,12 +6,36 @@ tags: rating: ⭐ --- # 前言 +最近研究过了一下UE的重定向逻辑,所以写点笔记作为记录。(IK部分没有去看) +- FIKRetargetBatchOperation::RunRetarget():编辑器调用的重定向函数。主要是复制对应需要重定向资产并且进行重定向,之后通知UI。 +- FIKRetargetBatchOperation::RetargetAssets():重定向资产逻辑。 + - 复制所有曲线轨道(不含数值)。 + - 设置Skeleton与PreviewMesh资产。 + - 提前调用重定向资产的PostEditChange(),以避免编辑后钩子函数被调用,产生依赖顺序问题。 + - ConvertAnimation() + - 替换动画蓝图并且编译。 # ConvertAnimation() -主要逻辑位于`UAnimationEditorUtilityLibrary::ConvertAnimation()`或者`FIKRetargetBatchOperation::ConvertAnimation()`。核心重定向逻辑为`UIKRetargetProcessor::RunRetargeter()`。 +一开始是一些初始化逻辑,主要的是调用UIKRetargetProcessor的Initialize()。里面初始化了 +- SourceSkeleton & TargetSkeleton:用于重定向计算用的数据载体,存储了骨骼链、骨骼、当前重定向Pose等数据。 +- RootRetargeter:根骨骼重定向器。 +- ChainPairsIK、ChainPairsFK:用于FK与IK的骨骼链数据。 +- UIKRigProcessor:IK重定向处理器。 +- 所有FIKRigGoal +从FRetargetSkeleton& SourceSkeleton & FTargetSkeleton& TargetSkeleton获取对应参数来进行之后的动画资产重定向循环,循环逻辑如下: +- 获取动画帧数,并且重新构建骨骼动画数据轨道。 +- 取得速度曲线。 +- 之后对每一帧Pose进行重定向,主要是的逻辑是: + - 取得当前帧Pose,并将其转化WorldSpace。 + - UIKRetargetProcessor Processor->RunRetargeter() + - 将重定向完的结果转化成LocalSpace,并且将每个骨骼的数据放入对应骨骼动画数据轨道。 + - 调用IAnimationDataController的AddBoneTrack() & SetBoneTrackKeys()给资产设置上关键帧。 -FRetargetSkeleton: +# RunRetargeter() +此为核心重定向逻辑,分为RunRootRetarget()、RunFKRetarget()、RunIKRetarget()、RunPoleVectorMatching()。 + +重定向数据会直接修改TargetSkeleton的Pose数据。Root与FK重定向执行完之后会调用UpdateGlobalTransformsBelowBone()更新后续骨骼的WorldSpace Transform。 ## RunRootRetarget() FRootRetargeter::EncodePose(): @@ -34,12 +58,3 @@ FChainEncoderFK::EncodePose(): FChainDecoderFK::DecodePose(): -## RunIKRetarget() - -## RunPoleVectorMatching() - - -# UIKRetargetProcessor - - -