Skip to content

Commit d00fe7d

Browse files
committed
Minor retargeting improvements
- using enum instead of "int" in instance class and viewer code - highlighting retargeted bones in SHOW_ANIM mode with orange color, and bind-pose bones with grey one - clicking at "retargeting" label in skeletal mesh viewer toggles between enabled/disabled state (bypassing "rotation only" mode)
1 parent c37fccb commit d00fe7d

File tree

5 files changed

+32
-12
lines changed

5 files changed

+32
-12
lines changed

MeshInstance/MeshInstance.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class CAnimSet;
99
class CAnimSequence;
1010
class CStaticMesh;
1111

12+
enum class EAnimRetargetingMode;
1213

1314
/*-----------------------------------------------------------------------------
1415
Basic CMeshInstance class
@@ -142,7 +143,7 @@ class CSkelMeshInstance : public CMeshInstance
142143
int LodIndex;
143144
int MorphIndex;
144145
int UVIndex;
145-
int RetargetingModeOverride; // EAnimRetargetingMode
146+
EAnimRetargetingMode RetargetingModeOverride;
146147

147148
CSkelMeshInstance();
148149
virtual ~CSkelMeshInstance();

MeshInstance/SkelMeshInstance.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ CSkelMeshInstance::CSkelMeshInstance()
9292
: LodIndex(0)
9393
, MorphIndex(-1)
9494
, UVIndex(0)
95-
, RetargetingModeOverride((int)EAnimRetargetingMode::AnimSet)
95+
, RetargetingModeOverride(EAnimRetargetingMode::AnimSet)
9696
, LastLodIndex(-2) // initialize with value which differs from LodNum and from all other values
9797
, LastMorphIndex(-1)
9898
, MaxAnimChannel(-1)
@@ -660,13 +660,17 @@ void CSkelMeshInstance::UpdateSkeleton()
660660
{
661661
const CBoneDebugInfo& BoneDebug = BoneDebugInfos[i];
662662
if (!BoneDebug.BoneName) continue; // the bone is entirely skipped due to animation settings
663-
const char* TextColor = S_YELLOW;
663+
const char* TextColor = S_GREY;
664664
if (BoneDebug.bIsAnimated)
665665
{
666-
TextColor = BoneDebug.bSkippedOnRetargetting ? S_RED : S_GREEN;
666+
TextColor = S_GREEN;
667+
if (BoneDebug.RetargetMode != EBoneRetargetingMode::Animation)
668+
{
669+
TextColor = BoneDebug.bSkippedOnRetargetting ? S_RED : S_ORANGE;
670+
}
667671
}
668672
bool bClicked = DrawTextLeftH(NULL,
669-
"%s%s" S_HYPERLINK("%d (%s)") " : P( %8.3f %8.3f %8.3f ) Q( %6.3f %6.3f %6.3f %6.3f )",
673+
"%s%s" S_HYPERLINK("%d (%s)") " : T (%6.3f %6.3f %6.3f) R (%5.2f %5.2f %5.2f %5.2f)",
670674
HighlightBoneIndex == BoneDebug.MeshBoneIndex ? "> " : " ", // indicator of the selected bone
671675
TextColor, BoneDebug.MeshBoneIndex, BoneDebug.BoneName,
672676
VECTOR_ARG(BoneDebug.AnimPosition), QUAT_ARG(BoneDebug.AnimRotation)

Unreal/Mesh/SkeletalMesh.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ class CAnimSequence
291291
enum class EAnimRetargetingMode
292292
{
293293
// Use settings defined in each AnimSet (default)
294-
AnimSet,
294+
AnimSet = 0,
295295
// Force AnimRotationOnly enabled on all AnimSets, but for this SkeletalMesh only
296296
AnimRotationOnly,
297297
// Always pick data from the animation, no retargeting

Viewers/ObjectViewer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class USkeleton;
2222

2323
class UIMenuItem;
2424

25+
enum class EAnimRetargetingMode;
2526

2627
#define TEST_FILES 1 // comment line to disable some notifications
2728

@@ -211,6 +212,8 @@ class CSkelMeshViewer : public CMeshViewer
211212
bool bIsUE4Mesh;
212213
USkeleton* Skeleton;
213214
int HighlightMeshIndex;
215+
216+
void SetRetargetingMode(EAnimRetargetingMode NewMode);
214217
};
215218

216219

Viewers/SkelMeshViewer.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,14 @@ void CSkelMeshViewer::Draw2D()
412412
OnOffStatus = S_RED "disabled";
413413
break;
414414
}
415-
DrawTextBottomLeft(S_GREEN "Retargeting:" S_WHITE " %s", OnOffStatus);
415+
if (DrawTextBottomLeftH(NULL, S_GREEN S_HYPERLINK("Retargeting:" S_WHITE " %s"), OnOffStatus))
416+
{
417+
// Allow retargeting toggle with a mouse click
418+
if (MeshInst->RetargetingModeOverride == EAnimRetargetingMode::AnimSet)
419+
SetRetargetingMode(EAnimRetargetingMode::NoRetargeting);
420+
else
421+
SetRetargetingMode(EAnimRetargetingMode::AnimSet);
422+
}
416423

417424
const CAnimSequence* Seq = MeshInst->GetAnim(0);
418425
if (Seq)
@@ -832,11 +839,9 @@ void CSkelMeshViewer::ProcessKey(unsigned key)
832839

833840
case 'r'|KEY_CTRL:
834841
{
835-
int mode = MeshInst->RetargetingModeOverride + 1;
836-
if (mode >= (int)EAnimRetargetingMode::Count) mode = 0;
837-
MeshInst->RetargetingModeOverride = mode;
838-
for (CSkelMeshInstance* mesh : TaggedMeshes)
839-
mesh->RetargetingModeOverride = mode;
842+
EAnimRetargetingMode mode = EAnimRetargetingMode((int)MeshInst->RetargetingModeOverride + 1);
843+
if (mode >= EAnimRetargetingMode::Count) mode = EAnimRetargetingMode::AnimSet;
844+
SetRetargetingMode(mode);
840845
}
841846
break;
842847

@@ -855,6 +860,13 @@ void CSkelMeshViewer::ProcessKey(unsigned key)
855860
unguard;
856861
}
857862

863+
void CSkelMeshViewer::SetRetargetingMode(EAnimRetargetingMode NewMode)
864+
{
865+
CSkelMeshInstance *MeshInst = static_cast<CSkelMeshInstance*>(Inst);
866+
MeshInst->RetargetingModeOverride = NewMode;
867+
for (CSkelMeshInstance* mesh : TaggedMeshes)
868+
mesh->RetargetingModeOverride = NewMode;
869+
}
858870

859871
void CSkelMeshViewer::AttachAnimSet()
860872
{

0 commit comments

Comments
 (0)