vault backup: 2023-08-08 20:21:14
This commit is contained in:
parent
40bed23a56
commit
656f24a986
@ -58,11 +58,15 @@ Epic网站上也有一篇文章作为参考[[1]](https://zhuanlan.zhihu.com/p/61
|
||||
- Initialize_AnyThread:用于初始化数据,初始化ComponentPose、AlphaBoolBlend、AlphaScaleBiasClamp。
|
||||
- CacheBones_AnyThread:用于缓存Pose。
|
||||
- GatherDebugData:获取Debug数据。
|
||||
- Evaluate:
|
||||
- EvaluateSkeletalControl_AnyThread
|
||||
- IsValidToEvaluate
|
||||
- Evaluate:计算动画结果。
|
||||
- EvaluateSkeletalControl_AnyThread:在其他线程计算骨骼结果。
|
||||
|
||||
# VMC4UE
|
||||
***存在问题***:
|
||||
1. 只做了简单的BoneTransform与Morph适配。没有针对VMC协议的其他内容进行适配。
|
||||
|
||||
## AnimNode_ModifyVMC4UEBones
|
||||
继承自FAnimNode_SkeletalControlBase。
|
||||
- Initialize_AnyThread:调用InitializeBoneReferences()
|
||||
- InitializeBoneReferences:初始化了之后需要用到BoneReferences、InitialBones。
|
||||
- CacheBones_AnyThread:**重写函数**,ComponentPose.CacheBones()。
|
||||
@ -74,17 +78,31 @@ Epic网站上也有一篇文章作为参考[[1]](https://zhuanlan.zhihu.com/p/61
|
||||
- 计算根骨骼Transform。
|
||||
- 获取FComponentSpacePoseContext.Pose与BoneContainer的引用,开始遍历所有骨骼(使用BoneIndex)。
|
||||
- 根据BoneIndex,从`TArray<FBoneReference> BoneReferences`获取BoneName。
|
||||
- 根据BoneName,判断BoneMappingSkeletonToVMC是否
|
||||
- 容错处理,
|
||||
- 根据BoneName,判断BoneMappingSkeletonToVMC是否包含该骨骼。如包含该骨骼则提取对应的骨骼数据;不包则从InitialBones中取对应骨骼的值(RefPose)。
|
||||
- 获取ParentBoneIndex,并将父骨骼的Transform乘上;如果父骨骼是根骨骼则乘以之前计算的RootTransform。
|
||||
- 因为骨骼Index是从Root开始算的,这样相当将之前整个骨骼链的数据都乘上了。
|
||||
- 将计算完成的新值替换OutBoneTransforms中的。
|
||||
- IsValidToEvaluate
|
||||
- BuildMapping:
|
||||
|
||||
成员变量作用:
|
||||
- `TArray<FBoneReference> BoneReferences`:
|
||||
- `TMap<FName, FName> BoneMappingSkeletonToVMC`:
|
||||
|
||||
- `TArray<FBoneReference> BoneReferences`:存储BoneIndex、BoneName、CachedCompactPoseIndex。
|
||||
- `TMap<FName, FName> BoneMappingSkeletonToVMC`:VRM角色骨骼映射表。VRM4U可以生成(不确定)。
|
||||
- `UVMC4UEVRMMapping* PrevVRMMapping`:上一个VRMMaping,用来检测是否需要重新驱动VRMMaping。
|
||||
- `UVMC4UEVRMMapping* VRMMapping`:用于指定VRMMaping资源。
|
||||
- `TArray<FTransform> InitialBones`:记录初始RefPose的骨骼形变,找不到骨骼的情况会使用。
|
||||
|
||||
### VRMMaping的作用
|
||||
|
||||
VMC软件只用于驱动VRM角色或者与VRM骨骼结构相同的角色,角色的骨骼数量、排序大概率不同,会使得Index不同。所以需要搞一个BoneName映射表,用来寻找驱动的骨骼。
|
||||
|
||||
## GetStreamingSkeletalMeshTransform
|
||||
|
||||
|
||||
## FAnimNode_ModifyVMC4UEMorph
|
||||
继承自FAnimNode_Base。大致逻辑与AnimNode_ModifyVMC4UEBones相似。
|
||||
主要逻辑位于Evaluate_AnyThread():
|
||||
1. 判断是否需要重新构建VRMMaping,如有需要调用BuildMapping()进行构建。
|
||||
2. 调用UVMC4UEBlueprintFunctionLibrary::GetStreamingSkeletalMeshTransform()。
|
||||
3. 从AnimInstanceProxy取得Skeleton。
|
||||
4. 相关有效性判断。
|
||||
5.
|
||||
|
Loading…
x
Reference in New Issue
Block a user