vault backup: 2023-11-06 17:34:19

This commit is contained in:
BlueRose 2023-11-06 17:34:19 +08:00
parent 5537b0af2e
commit 827f38819c
2 changed files with 50 additions and 27 deletions

View File

@ -47,22 +47,6 @@
}, },
"showLogAboutPerformanceInConsole": false, "showLogAboutPerformanceInConsole": false,
"selectionHistoryTree": { "selectionHistoryTree": {
"ShaderLab笔记": {
"ShaderLab笔记": {
"internalLink": {
"count": 1,
"lastUpdated": 1695796563725
}
}
},
"github": {
"github": {
"currentFile": {
"count": 1,
"lastUpdated": 1696078782607
}
}
},
"以垂直关系依次旋转每个轴。": { "以垂直关系依次旋转每个轴。": {
"以垂直关系依次旋转每个轴。": { "以垂直关系依次旋转每个轴。": {
"currentFile": { "currentFile": {
@ -70,6 +54,30 @@
"lastUpdated": 1698213001403 "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
}
}
} }
} }
} }

View File

@ -6,12 +6,36 @@ tags:
rating: ⭐ rating: ⭐
--- ---
# 前言 # 前言
最近研究过了一下UE的重定向逻辑所以写点笔记作为记录。IK部分没有去看
- FIKRetargetBatchOperation::RunRetarget()编辑器调用的重定向函数。主要是复制对应需要重定向资产并且进行重定向之后通知UI。
- FIKRetargetBatchOperation::RetargetAssets():重定向资产逻辑。
- 复制所有曲线轨道(不含数值)。
- 设置Skeleton与PreviewMesh资产。
- 提前调用重定向资产的PostEditChange(),以避免编辑后钩子函数被调用,产生依赖顺序问题。
- ConvertAnimation()
- 替换动画蓝图并且编译。
# ConvertAnimation() # ConvertAnimation()
主要逻辑位于`UAnimationEditorUtilityLibrary::ConvertAnimation()`或者`FIKRetargetBatchOperation::ConvertAnimation()`。核心重定向逻辑为`UIKRetargetProcessor::RunRetargeter()` 一开始是一些初始化逻辑主要的是调用UIKRetargetProcessor的Initialize()。里面初始化了
- SourceSkeleton & TargetSkeleton用于重定向计算用的数据载体存储了骨骼链、骨骼、当前重定向Pose等数据。
- RootRetargeter根骨骼重定向器。
- ChainPairsIK、ChainPairsFK用于FK与IK的骨骼链数据。
- UIKRigProcessorIK重定向处理器。
- 所有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() ## RunRootRetarget()
FRootRetargeter::EncodePose(): FRootRetargeter::EncodePose():
@ -34,12 +58,3 @@ FChainEncoderFK::EncodePose():
FChainDecoderFK::DecodePose(): FChainDecoderFK::DecodePose():
## RunIKRetarget()
## RunPoleVectorMatching()
# UIKRetargetProcessor