38 lines
1.2 KiB
Markdown
38 lines
1.2 KiB
Markdown
---
|
||
title: UE5商城动画重定向插件笔记
|
||
date: 2023-09-05 12:02:29
|
||
excerpt:
|
||
tags:
|
||
- AnimationRetargeting
|
||
rating: ⭐
|
||
---
|
||
# MixamoAnimationRetargeting
|
||
主要逻辑位于:FMixamoSkeletonRetargeter
|
||
- UE4MannequinToMixamo_BoneNamesMapping
|
||
- UE4MannequinToMixamo_ChainNamesMapping
|
||
- UE5MannequinToMixamo_BoneNamesMapping
|
||
- UE5MannequinToMixamo_ChainNamesMapping
|
||
|
||
重定向逻辑位于:FMixamoSkeletonRetargeter::Retarget()
|
||
|
||
## 判断骨骼格式
|
||
```c++
|
||
bool FSkeletonMatcher::IsMatching(const USkeleton* Skeleton) const
|
||
{
|
||
// No Skeleton, No matching...
|
||
if (Skeleton == nullptr)
|
||
{ return false;
|
||
}
|
||
const int32 NumExpectedBones = BoneNames.Num();
|
||
int32 nMatchingBones = 0;
|
||
const FReferenceSkeleton & SkeletonRefSkeleton = Skeleton->GetReferenceSkeleton();
|
||
for (int32 i = 0; i < NumExpectedBones; ++i)
|
||
{ const int32 BoneIndex = SkeletonRefSkeleton.FindBoneIndex(BoneNames[i]);
|
||
if (BoneIndex != INDEX_NONE)
|
||
{ ++nMatchingBones;
|
||
} } const float MatchedPercentage = float(nMatchingBones) / float(NumExpectedBones);
|
||
|
||
return MatchedPercentage >= MinimumMatchingPerc;
|
||
}
|
||
```
|