implement the SenseGlove grab/touch sockets one-click-setup ability on any Epic-compliant virtual hand mesh from within the Unreal Editor's Content Browser, Skeleton Editor, or Skeletal Mesh Editor

This commit is contained in:
Mamadou Babaei
2024-08-16 16:37:26 +02:00
parent b33d7a364d
commit 506999f690
43 changed files with 1788 additions and 967 deletions
@@ -899,10 +899,12 @@ USGHandPose* FSGXRTracker::FImpl::GetHandPose(const bool bRight)
FTransform FSGXRTracker::FImpl::GetMeshRawBoneRefTransform(const bool bRight, const FName& BoneName)
{
const FSGVirtualHandMeshSettings& MeshSettings{GetVirtualHandSettings().MeshSettings};
const TSoftObjectPtr<USkeletalMesh>& HandMesh{
bRight
? GetVirtualHandSettings().MeshSettings.LeftHandReferenceMesh
: GetVirtualHandSettings().MeshSettings.RightHandReferenceMesh
? MeshSettings.LeftHandReferenceMesh
: MeshSettings.RightHandReferenceMesh
};
if (HandMesh.IsValid())
@@ -924,26 +926,24 @@ FTransform FSGXRTracker::FImpl::GetMeshRawBoneRefTransform(const bool bRight, co
return Transform;
}
const FSGVirtualHandMeshSettings& Settings{GetVirtualHandSettings().MeshSettings};
ensureAlwaysMsgf(
bRight
? Settings.RightHandDefaultReferenceBoneTransforms.Contains(BoneName)
: Settings.LeftHandDefaultReferenceBoneTransforms.Contains(BoneName),
? MeshSettings.RightHandDefaultReferenceBoneTransforms.Contains(BoneName)
: MeshSettings.LeftHandDefaultReferenceBoneTransforms.Contains(BoneName),
TEXT("Invalid bone name '%s'!"), *BoneName.ToString());
const FTransform& Transform{
bRight
? Settings.RightHandDefaultReferenceBoneTransforms[BoneName]
: Settings.LeftHandDefaultReferenceBoneTransforms[BoneName]
? MeshSettings.RightHandDefaultReferenceBoneTransforms[BoneName]
: MeshSettings.LeftHandDefaultReferenceBoneTransforms[BoneName]
};
return Transform;
}
FTransform FSGXRTracker::FImpl::GetMeshWristChildBoneRefTransform(const bool bRight, const FName& BoneName)
{
FQuat RootRotationCorrection{
GetVirtualHandSettings().MeshSettings.RootBoneRotationCorrection
};
const FSGVirtualHandMeshSettings& MeshSettings{GetVirtualHandSettings().MeshSettings};
FQuat RootRotationCorrection{MeshSettings.RootBoneRotationCorrection};
const FTransform& RootBoneRefTransform{GetMeshRawBoneRefTransform(bRight, EHandKeypoint::Wrist)};
const FTransform& RawTransform{GetMeshRawBoneRefTransform(bRight, BoneName)};
FQuat CorrectedRootBoneRefRotation{MoveTemp(RootRotationCorrection) * RootBoneRefTransform.GetRotation()};
@@ -956,9 +956,8 @@ FTransform FSGXRTracker::FImpl::GetMeshWristChildBoneRefTransform(const bool bRi
FTransform FSGXRTracker::FImpl::GetMeshFingerStartBoneRefTransform(
const bool bRight, const EHandKeypoint Parent, const FName& BoneName)
{
FQuat RootRotationCorrection{
GetVirtualHandSettings().MeshSettings.RootBoneRotationCorrection
};
const FSGVirtualHandMeshSettings& MeshSettings{GetVirtualHandSettings().MeshSettings};
FQuat RootRotationCorrection{MeshSettings.RootBoneRotationCorrection};
const FTransform& RootBoneRefTransform{GetMeshRawBoneRefTransform(bRight, EHandKeypoint::Wrist)};
FQuat CorrectedRootBoneRefRotation{MoveTemp(RootRotationCorrection) * RootBoneRefTransform.GetRotation()};
FTransform CorrectedRootBoneRefTransform{