diff --git a/Content/SaveSequenceRig.uasset b/Content/SaveSequenceRig.uasset index cc62a6754b96431b828120ab7bee100223780218..255653dcfdab48af6ae1da0b471947ba0f69620f 100644 --- a/Content/SaveSequenceRig.uasset +++ b/Content/SaveSequenceRig.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e140be55357a682f3c7ac027bc8bfa52cdc6458d4442d75231e022321eb320c -size 5131100 +oid sha256:1270973e8c657ea0f5839472906687bded88448c7400428210b1777db48a655c +size 5035646 diff --git a/Source/MoCapPlugin/Private/MCRigUnits.cpp b/Source/MoCapPlugin/Private/MCRigUnits.cpp index 5c0391ce17ad190aab4f4e3a9f879f9c394c4538..4357c12f4fc554d8f6e87010f81c5131b15c4038 100644 --- a/Source/MoCapPlugin/Private/MCRigUnits.cpp +++ b/Source/MoCapPlugin/Private/MCRigUnits.cpp @@ -44,71 +44,161 @@ FRigUnit_ApplyFingerData_Execute() { Scale = FVector(1.f, 1.f, 1.f); ThumbScale = FVector(1.f, 1.f, 1.f); } - FVector ThumbAngles_N = ThumbScale * ThumbAngles; - FVector IndexAngles_N = Scale * IndexAngles; - FVector MiddleAngles_N = Scale * MiddleAngles; - FVector RingAngles_N = Scale * RingAngles; - FVector PinkyAngles_N = Scale * PinkyAngles; + FVector ThumbAnglesClosed_N = ThumbScale * ThumbAnglesClosed; + FVector IndexAnglesClosed_N = Scale * IndexAnglesClosed; + FVector MiddleAnglesClosed_N = Scale * MiddleAnglesClosed; + FVector RingAnglesClosed_N = Scale * RingAnglesClosed; + FVector PinkyAnglesClosed_N = Scale * PinkyAnglesClosed; + FVector ThumbAnglesOpen_N = ThumbAnglesOpen; + FVector IndexAnglesOpen_N = IndexAnglesOpen; + FVector MiddleAnglesOpen_N = MiddleAnglesOpen; + FVector RingAnglesOpen_N = RingAnglesOpen; + FVector PinkyAnglesOpen_N = PinkyAnglesOpen; float Thumb_Index_Angle_N = Thumb_Index_Angle; float Index_Middle_Angle_N = Index_Middle_Angle; float Middle_Ring_Angle_N = Middle_Ring_Angle; float Ring_Pinky_Angle_N = Ring_Pinky_Angle; + float ReverseFactor = 0.5f; + FFingerData FingerDataTransformed = FingerData; + FingerDataTransformed.LeftHand.Thumb = FingerDataTransformed.LeftHand.Thumb * (1.f + ReverseFactor) - ReverseFactor; + FingerDataTransformed.LeftHand.Index = FingerDataTransformed.LeftHand.Index * (1.f + ReverseFactor) - ReverseFactor; + FingerDataTransformed.LeftHand.Middle = FingerDataTransformed.LeftHand.Middle * (1.f + ReverseFactor) - ReverseFactor; + FingerDataTransformed.LeftHand.Ring = FingerDataTransformed.LeftHand.Ring * (1.f + ReverseFactor) - ReverseFactor; + FingerDataTransformed.LeftHand.Pinky = FingerDataTransformed.LeftHand.Pinky * (1.f + ReverseFactor) - ReverseFactor; + FingerDataTransformed.RightHand.Thumb = FingerDataTransformed.RightHand.Thumb * (1.f + ReverseFactor) - ReverseFactor; + FingerDataTransformed.RightHand.Index = FingerDataTransformed.RightHand.Index * (1.f + ReverseFactor) - ReverseFactor; + FingerDataTransformed.RightHand.Middle = FingerDataTransformed.RightHand.Middle * (1.f + ReverseFactor) - ReverseFactor; + FingerDataTransformed.RightHand.Ring = FingerDataTransformed.RightHand.Ring * (1.f + ReverseFactor) - ReverseFactor; + FingerDataTransformed.RightHand.Pinky = FingerDataTransformed.RightHand.Pinky * (1.f + ReverseFactor) - ReverseFactor; + FRigBoneHierarchy* Hierarchy = ExecuteContext.GetBones(); if (Hierarchy) { //CURLS - float Thumb01YAngle = ThumbAngles_N.X; + float Thumb01YAngleClosed = ThumbAnglesClosed_N.X; if (AngleScale >= 1.f) { - Thumb01YAngle = -15.f; + Thumb01YAngleClosed = -15.f; } - AddRotation("thumb_01_l", FingerData.LeftHand.Thumb * Thumb01YAngle, Hierarchy); - AddRotation("thumb_01_l", FingerData.LeftHand.Thumb * ThumbAngles_N.X, Hierarchy, "Z"); - AddRotation("thumb_02_l", FingerData.LeftHand.Thumb * ThumbAngles_N.Y, Hierarchy); - AddRotation("thumb_03_l", FingerData.LeftHand.Thumb * ThumbAngles_N.Z, Hierarchy); - - AddRotation("index_01_l", FingerData.LeftHand.Index * IndexAngles_N.X, Hierarchy); - AddRotation("index_02_l", FingerData.LeftHand.Index * IndexAngles_N.Y, Hierarchy); - AddRotation("index_03_l", FingerData.LeftHand.Index * IndexAngles_N.Z, Hierarchy); - - AddRotation("middle_01_l", FingerData.LeftHand.Middle * MiddleAngles_N.X, Hierarchy); - AddRotation("middle_02_l", FingerData.LeftHand.Middle * MiddleAngles_N.Y, Hierarchy); - AddRotation("middle_03_l", FingerData.LeftHand.Middle * MiddleAngles_N.Z, Hierarchy); + if (FingerDataTransformed.LeftHand.Thumb >= 0.f) { + AddRotation("thumb_01_l", FingerDataTransformed.LeftHand.Thumb * Thumb01YAngleClosed, Hierarchy); + AddRotation("thumb_01_l", FingerDataTransformed.LeftHand.Thumb * ThumbAnglesClosed_N.X, Hierarchy, "Z"); + AddRotation("thumb_02_l", FingerDataTransformed.LeftHand.Thumb * ThumbAnglesClosed_N.Y, Hierarchy); + AddRotation("thumb_03_l", FingerDataTransformed.LeftHand.Thumb * ThumbAnglesClosed_N.Z, Hierarchy); + } + else { + //AddRotation("thumb_01_l", FingerDataTransformed.LeftHand.Thumb * Thumb01YAngleClosed, Hierarchy); + //AddRotation("thumb_01_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * -ThumbAnglesOpen_N.X, Hierarchy, "X"); + AddRotation("thumb_01_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * -ThumbAnglesOpen_N.X, Hierarchy); + AddRotation("thumb_01_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * ThumbAnglesOpen_N.X, Hierarchy, "Z"); + AddRotation("thumb_02_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * ThumbAnglesOpen_N.Y, Hierarchy); + AddRotation("thumb_03_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * ThumbAnglesOpen_N.Z, Hierarchy); + } - AddRotation("ring_01_l", FingerData.LeftHand.Ring * RingAngles_N.X, Hierarchy); - AddRotation("ring_02_l", FingerData.LeftHand.Ring * RingAngles_N.Y, Hierarchy); - AddRotation("ring_03_l", FingerData.LeftHand.Ring * RingAngles_N.Z, Hierarchy); + if (FingerDataTransformed.LeftHand.Index >= 0.f) { + AddRotation("index_01_l", FingerDataTransformed.LeftHand.Index * IndexAnglesClosed_N.X, Hierarchy); + AddRotation("index_02_l", FingerDataTransformed.LeftHand.Index * IndexAnglesClosed_N.Y, Hierarchy); + AddRotation("index_03_l", FingerDataTransformed.LeftHand.Index * IndexAnglesClosed_N.Z, Hierarchy); + } + else { + AddRotation("index_01_l", FingerDataTransformed.LeftHand.Index * IndexAnglesOpen_N.X / ReverseFactor, Hierarchy); + AddRotation("index_02_l", FingerDataTransformed.LeftHand.Index * IndexAnglesOpen_N.Y / ReverseFactor, Hierarchy); + AddRotation("index_03_l", FingerDataTransformed.LeftHand.Index * IndexAnglesOpen_N.Z / ReverseFactor, Hierarchy); + } - AddRotation("pinky_01_l", FingerData.LeftHand.Pinky * PinkyAngles_N.X, Hierarchy); - AddRotation("pinky_02_l", FingerData.LeftHand.Pinky * PinkyAngles_N.Y, Hierarchy); - AddRotation("pinky_03_l", FingerData.LeftHand.Pinky * PinkyAngles_N.Z, Hierarchy); + if (FingerDataTransformed.LeftHand.Middle >= 0.f) { + AddRotation("middle_01_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesClosed_N.X, Hierarchy); + AddRotation("middle_02_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesClosed_N.Y, Hierarchy); + AddRotation("middle_03_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesClosed_N.Z, Hierarchy); + } + else { + AddRotation("middle_01_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesOpen_N.X / ReverseFactor, Hierarchy); + AddRotation("middle_02_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesOpen_N.Y / ReverseFactor, Hierarchy); + AddRotation("middle_03_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesOpen_N.Z / ReverseFactor, Hierarchy); + } + if (FingerDataTransformed.LeftHand.Ring >= 0.f) { + AddRotation("ring_01_l", FingerDataTransformed.LeftHand.Ring * RingAnglesClosed_N.X, Hierarchy); + AddRotation("ring_02_l", FingerDataTransformed.LeftHand.Ring * RingAnglesClosed_N.Y, Hierarchy); + AddRotation("ring_03_l", FingerDataTransformed.LeftHand.Ring * RingAnglesClosed_N.Z, Hierarchy); + } + else { + AddRotation("ring_01_l", FingerDataTransformed.LeftHand.Ring * RingAnglesOpen_N.X / ReverseFactor, Hierarchy); + AddRotation("ring_02_l", FingerDataTransformed.LeftHand.Ring * RingAnglesOpen_N.Y / ReverseFactor, Hierarchy); + AddRotation("ring_03_l", FingerDataTransformed.LeftHand.Ring * RingAnglesOpen_N.Z / ReverseFactor, Hierarchy); + } - AddRotation("thumb_01_r", FingerData.RightHand.Thumb * Thumb01YAngle, Hierarchy); - AddRotation("thumb_01_r", FingerData.RightHand.Thumb * ThumbAngles_N.X, Hierarchy, "Z"); - AddRotation("thumb_02_r", FingerData.RightHand.Thumb * ThumbAngles_N.Y, Hierarchy); - AddRotation("thumb_03_r", FingerData.RightHand.Thumb * ThumbAngles_N.Z, Hierarchy); + if (FingerDataTransformed.LeftHand.Pinky >= 0.f) { + AddRotation("pinky_01_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesClosed_N.X, Hierarchy); + AddRotation("pinky_02_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesClosed_N.Y, Hierarchy); + AddRotation("pinky_03_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesClosed_N.Z, Hierarchy); + } + else { + AddRotation("pinky_01_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesOpen_N.X / ReverseFactor, Hierarchy); + AddRotation("pinky_02_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesOpen_N.Y / ReverseFactor, Hierarchy); + AddRotation("pinky_03_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesOpen_N.Z / ReverseFactor, Hierarchy); + } - AddRotation("index_01_r", FingerData.RightHand.Index * IndexAngles_N.X, Hierarchy); - AddRotation("index_02_r", FingerData.RightHand.Index * IndexAngles_N.Y, Hierarchy); - AddRotation("index_03_r", FingerData.RightHand.Index * IndexAngles_N.Z, Hierarchy); + if (FingerDataTransformed.RightHand.Thumb >= 0.f) { + AddRotation("thumb_01_r", FingerDataTransformed.RightHand.Thumb * Thumb01YAngleClosed, Hierarchy); + AddRotation("thumb_01_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesClosed_N.X, Hierarchy, "Z"); + AddRotation("thumb_02_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesClosed_N.Y, Hierarchy); + AddRotation("thumb_03_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesClosed_N.Z, Hierarchy); + } + else { + AddRotation("thumb_01_r", FingerDataTransformed.RightHand.Thumb * Thumb01YAngleClosed, Hierarchy); + AddRotation("thumb_01_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesOpen_N.X / ReverseFactor, Hierarchy, "Z"); + AddRotation("thumb_02_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesOpen_N.Y / ReverseFactor, Hierarchy); + AddRotation("thumb_03_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesOpen_N.Z / ReverseFactor, Hierarchy); + } - AddRotation("middle_01_r", FingerData.RightHand.Middle * MiddleAngles_N.X, Hierarchy); - AddRotation("middle_02_r", FingerData.RightHand.Middle * MiddleAngles_N.Y, Hierarchy); - AddRotation("middle_03_r", FingerData.RightHand.Middle * MiddleAngles_N.Z, Hierarchy); + if (FingerDataTransformed.RightHand.Index >= 0.f) { + AddRotation("index_01_r", FingerDataTransformed.RightHand.Index * IndexAnglesClosed_N.X, Hierarchy); + AddRotation("index_02_r", FingerDataTransformed.RightHand.Index * IndexAnglesClosed_N.Y, Hierarchy); + AddRotation("index_03_r", FingerDataTransformed.RightHand.Index * IndexAnglesClosed_N.Z, Hierarchy); + } + else { + AddRotation("index_01_r", FingerDataTransformed.RightHand.Index * IndexAnglesOpen_N.X / ReverseFactor, Hierarchy); + AddRotation("index_02_r", FingerDataTransformed.RightHand.Index * IndexAnglesOpen_N.Y / ReverseFactor, Hierarchy); + AddRotation("index_03_r", FingerDataTransformed.RightHand.Index * IndexAnglesOpen_N.Z / ReverseFactor, Hierarchy); + } - AddRotation("ring_01_r", FingerData.RightHand.Ring * RingAngles_N.X, Hierarchy); - AddRotation("ring_02_r", FingerData.RightHand.Ring * RingAngles_N.Y, Hierarchy); - AddRotation("ring_03_r", FingerData.RightHand.Ring * RingAngles_N.Z, Hierarchy); + if (FingerDataTransformed.RightHand.Middle >= 0.f) { + AddRotation("middle_01_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesClosed_N.X, Hierarchy); + AddRotation("middle_02_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesClosed_N.Y, Hierarchy); + AddRotation("middle_03_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesClosed_N.Z, Hierarchy); + } + else { + AddRotation("middle_01_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesOpen_N.X / ReverseFactor, Hierarchy); + AddRotation("middle_02_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesOpen_N.Y / ReverseFactor, Hierarchy); + AddRotation("middle_03_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesOpen_N.Z / ReverseFactor, Hierarchy); + } - AddRotation("pinky_01_r", FingerData.RightHand.Pinky * PinkyAngles_N.X, Hierarchy); - AddRotation("pinky_02_r", FingerData.RightHand.Pinky * PinkyAngles_N.Y, Hierarchy); - AddRotation("pinky_03_r", FingerData.RightHand.Pinky * PinkyAngles_N.Z, Hierarchy); + if (FingerDataTransformed.RightHand.Ring >= 0.f) { + AddRotation("ring_01_r", FingerDataTransformed.RightHand.Ring * RingAnglesClosed_N.X, Hierarchy); + AddRotation("ring_02_r", FingerDataTransformed.RightHand.Ring * RingAnglesClosed_N.Y, Hierarchy); + AddRotation("ring_03_r", FingerDataTransformed.RightHand.Ring * RingAnglesClosed_N.Z, Hierarchy); + } + else { + AddRotation("ring_01_r", FingerDataTransformed.RightHand.Ring* RingAnglesOpen_N.X / ReverseFactor, Hierarchy); + AddRotation("ring_02_r", FingerDataTransformed.RightHand.Ring* RingAnglesOpen_N.Y / ReverseFactor, Hierarchy); + AddRotation("ring_03_r", FingerDataTransformed.RightHand.Ring* RingAnglesOpen_N.Z / ReverseFactor, Hierarchy); + } + if (FingerDataTransformed.RightHand.Pinky >= 0.f) { + AddRotation("pinky_01_r", FingerDataTransformed.RightHand.Pinky * PinkyAnglesClosed_N.X, Hierarchy); + AddRotation("pinky_02_r", FingerDataTransformed.RightHand.Pinky * PinkyAnglesClosed_N.Y, Hierarchy); + AddRotation("pinky_03_r", FingerDataTransformed.RightHand.Pinky * PinkyAnglesClosed_N.Z, Hierarchy); + } + else { + AddRotation("pinky_01_r", FingerDataTransformed.RightHand.Pinky* PinkyAnglesOpen_N.X / ReverseFactor, Hierarchy); + AddRotation("pinky_02_r", FingerDataTransformed.RightHand.Pinky* PinkyAnglesOpen_N.Y / ReverseFactor, Hierarchy); + AddRotation("pinky_03_r", FingerDataTransformed.RightHand.Pinky* PinkyAnglesOpen_N.Z / ReverseFactor, Hierarchy); + } //SPLAYS diff --git a/Source/MoCapPlugin/Public/MCDefines.h b/Source/MoCapPlugin/Public/MCDefines.h index 49400bf80a8135f10e0f4e2aa4052aab9cfacf47..bf94618b6a98a87fa31917dc1fee75c206486a17 100644 --- a/Source/MoCapPlugin/Public/MCDefines.h +++ b/Source/MoCapPlugin/Public/MCDefines.h @@ -374,4 +374,39 @@ public: UPROPERTY(BlueprintReadWrite) bool loaded = false; +}; + +USTRUCT(BlueprintType) +struct FFingerAngles { + GENERATED_BODY() + +public: + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FVector Thumb; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FVector Index; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FVector Middle; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FVector Ring; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FVector Pinky; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float Thumb_Index; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float Index_Middle; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float Middle_Ring; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float Ring_Pinky; + }; \ No newline at end of file diff --git a/Source/MoCapPlugin/Public/MCRigUnits.h b/Source/MoCapPlugin/Public/MCRigUnits.h index 80edb1031f3ee31b25dbde7fb66ece2b54e7fb17..06b49ad4118d2f52733c3951f825142e9ae2c619 100644 --- a/Source/MoCapPlugin/Public/MCRigUnits.h +++ b/Source/MoCapPlugin/Public/MCRigUnits.h @@ -45,19 +45,34 @@ struct FRigUnit_ApplyFingerData : public FRigUnitMutable FFingerData FingerData; UPROPERTY(meta = (Input)) - FVector ThumbAngles; + FVector ThumbAnglesOpen; UPROPERTY(meta = (Input)) - FVector IndexAngles; + FVector IndexAnglesOpen; UPROPERTY(meta = (Input)) - FVector MiddleAngles; + FVector MiddleAnglesOpen; UPROPERTY(meta = (Input)) - FVector RingAngles; + FVector RingAnglesOpen; UPROPERTY(meta = (Input)) - FVector PinkyAngles; + FVector PinkyAnglesOpen; + + UPROPERTY(meta = (Input)) + FVector ThumbAnglesClosed; + + UPROPERTY(meta = (Input)) + FVector IndexAnglesClosed; + + UPROPERTY(meta = (Input)) + FVector MiddleAnglesClosed; + + UPROPERTY(meta = (Input)) + FVector RingAnglesClosed; + + UPROPERTY(meta = (Input)) + FVector PinkyAnglesClosed; UPROPERTY(meta = (Input)) float Thumb_Index_Angle;