vault backup: 2023-11-06 17:34:19
This commit is contained in:
parent
5537b0af2e
commit
827f38819c
40
.obsidian/plugins/various-complements/data.json
vendored
40
.obsidian/plugins/various-complements/data.json
vendored
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user