diff --git a/Content/SaveSequenceRig.uasset b/Content/SaveSequenceRig.uasset index 566ad715273ebb84a46ae52dd32698d4e28b52bc..6bc7ca435410a74298ed82b2d09824642df9f79f 100644 --- a/Content/SaveSequenceRig.uasset +++ b/Content/SaveSequenceRig.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1024a63471871a8b6cea1ffab82d7b0307ddd41bafeb6dc78d33546297616fc2 -size 3954514 +oid sha256:29a5de877c6fd233d0416e428dd532fed364376333c5fd7d47eba29a07779288 +size 4080636 diff --git a/Source/MoCapPlugin/Private/MCRigUnits.cpp b/Source/MoCapPlugin/Private/MCRigUnits.cpp index a7dbd3956155374b8f206e5370eb6ac1a80abacd..72cfa982bd6a50cb055c286d59920daad4a8fc7b 100644 --- a/Source/MoCapPlugin/Private/MCRigUnits.cpp +++ b/Source/MoCapPlugin/Private/MCRigUnits.cpp @@ -39,54 +39,76 @@ void AddRotation(const FName& BoneName, float Angle, FRigBoneHierarchy* Hierarch FRigUnit_ApplyFingerData_Execute() { DECLARE_SCOPE_HIERARCHICAL_COUNTER_RIGUNIT() + FVector Scale(AngleScale, 0.7f * AngleScale, 0.4f * AngleScale); + FVector ThumbScale(AngleScale, AngleScale, AngleScale); + if (AngleScale >= 1.f) { + 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; + + 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; + FRigBoneHierarchy* Hierarchy = ExecuteContext.GetBones(); if (Hierarchy) { //CURLS - AddRotation("thumb_01_l", FingerData.LeftHand.Thumb * -15.f, Hierarchy); - AddRotation("thumb_01_l", FingerData.LeftHand.Thumb * ThumbAngles.X, Hierarchy, "Z"); - AddRotation("thumb_02_l", FingerData.LeftHand.Thumb * ThumbAngles.Y, Hierarchy); - AddRotation("thumb_03_l", FingerData.LeftHand.Thumb * ThumbAngles.Z, Hierarchy); + float Thumb01YAngle = ThumbAngles_N.X; + if (AngleScale >= 1.f) { + Thumb01YAngle = -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.X, Hierarchy); - AddRotation("index_02_l", FingerData.LeftHand.Index * IndexAngles.Y, Hierarchy); - AddRotation("index_03_l", FingerData.LeftHand.Index * IndexAngles.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.X, Hierarchy); - AddRotation("middle_02_l", FingerData.LeftHand.Middle * MiddleAngles.Y, Hierarchy); - AddRotation("middle_03_l", FingerData.LeftHand.Middle * MiddleAngles.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); - AddRotation("ring_01_l", FingerData.LeftHand.Ring * RingAngles.X, Hierarchy); - AddRotation("ring_02_l", FingerData.LeftHand.Ring * RingAngles.Y, Hierarchy); - AddRotation("ring_03_l", FingerData.LeftHand.Ring * RingAngles.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); - AddRotation("pinky_01_l", FingerData.LeftHand.Pinky * PinkyAngles.X, Hierarchy); - AddRotation("pinky_02_l", FingerData.LeftHand.Pinky * PinkyAngles.Y, Hierarchy); - AddRotation("pinky_03_l", FingerData.LeftHand.Pinky * PinkyAngles.Z, 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); - AddRotation("thumb_01_r", FingerData.RightHand.Thumb * -15.f, Hierarchy); - AddRotation("thumb_01_r", FingerData.RightHand.Thumb * ThumbAngles.X, Hierarchy, "Z"); - AddRotation("thumb_02_r", FingerData.RightHand.Thumb * ThumbAngles.Y, Hierarchy); - AddRotation("thumb_03_r", FingerData.RightHand.Thumb * ThumbAngles.Z, 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); - AddRotation("index_01_r", FingerData.RightHand.Index * IndexAngles.X, Hierarchy); - AddRotation("index_02_r", FingerData.RightHand.Index * IndexAngles.Y, Hierarchy); - AddRotation("index_03_r", FingerData.RightHand.Index * IndexAngles.Z, 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); - AddRotation("middle_01_r", FingerData.RightHand.Middle * MiddleAngles.X, Hierarchy); - AddRotation("middle_02_r", FingerData.RightHand.Middle * MiddleAngles.Y, Hierarchy); - AddRotation("middle_03_r", FingerData.RightHand.Middle * MiddleAngles.Z, 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); - AddRotation("ring_01_r", FingerData.RightHand.Ring * RingAngles.X, Hierarchy); - AddRotation("ring_02_r", FingerData.RightHand.Ring * RingAngles.Y, Hierarchy); - AddRotation("ring_03_r", FingerData.RightHand.Ring * RingAngles.Z, 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); - AddRotation("pinky_01_r", FingerData.RightHand.Pinky * PinkyAngles.X, Hierarchy); - AddRotation("pinky_02_r", FingerData.RightHand.Pinky * PinkyAngles.Y, Hierarchy); - AddRotation("pinky_03_r", FingerData.RightHand.Pinky * PinkyAngles.Z, 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); //SPLAYS @@ -98,11 +120,11 @@ FRigUnit_ApplyFingerData_Execute() { Thumb = -15.0f; Ring = 3.0f; Pinky = 7.0f; - Index = (Index + 0.7f * Index_Middle_Angle * FingerData.LeftHand.Index_Middle) * (1.f - FingerData.LeftHand.Index); - Middle = (Middle + -0.3f * Index_Middle_Angle * FingerData.LeftHand.Index_Middle) * (1.f - FingerData.LeftHand.Middle); - Thumb = (Thumb + Index + Thumb_Index_Angle * FingerData.LeftHand.Thumb_Index) * ((1.f - FingerData.LeftHand.Thumb) * (1.f - FingerData.LeftHand.Index)); - Ring = (Ring + Middle - Middle_Ring_Angle * FingerData.LeftHand.Middle_Ring) * (1.f - FingerData.LeftHand.Ring); - Pinky = (Pinky + Ring - Ring_Pinky_Angle * FingerData.LeftHand.Ring_Pinky) * (1.f - FingerData.LeftHand.Pinky); + Index = (Index + 0.7f * Index_Middle_Angle_N * FingerData.LeftHand.Index_Middle) * (1.f - FingerData.LeftHand.Index); + Middle = (Middle + -0.3f * Index_Middle_Angle_N * FingerData.LeftHand.Index_Middle) * (1.f - FingerData.LeftHand.Middle); + Thumb = (Thumb + Index + Thumb_Index_Angle_N * FingerData.LeftHand.Thumb_Index) * ((1.f - FingerData.LeftHand.Thumb) * (1.f - FingerData.LeftHand.Index)); + Ring = (Ring + Middle - Middle_Ring_Angle_N * FingerData.LeftHand.Middle_Ring) * (1.f - FingerData.LeftHand.Ring); + Pinky = (Pinky + Ring - Ring_Pinky_Angle_N * FingerData.LeftHand.Ring_Pinky) * (1.f - FingerData.LeftHand.Pinky); AddRotation("thumb_01_l", Thumb, Hierarchy, "Z"); AddRotation("index_01_l", Index, Hierarchy, "Z"); @@ -116,11 +138,11 @@ FRigUnit_ApplyFingerData_Execute() { Thumb = -15.0f; Ring = 3.0f; Pinky = 7.0f; - Index = (Index + 0.7f * Index_Middle_Angle * FingerData.RightHand.Index_Middle) * (1.f - FingerData.RightHand.Index); - Middle = (Middle + -0.3f * Index_Middle_Angle * FingerData.RightHand.Index_Middle) * (1.f - FingerData.RightHand.Middle); - Thumb = (Thumb + Index + Thumb_Index_Angle * FingerData.RightHand.Thumb_Index) * ((1.f - FingerData.RightHand.Thumb) * (1.f - FingerData.RightHand.Index)); - Ring = (Ring + Middle - Middle_Ring_Angle * FingerData.RightHand.Middle_Ring) * (1.f - FingerData.RightHand.Ring); - Pinky = (Pinky + Ring - Ring_Pinky_Angle * FingerData.RightHand.Ring_Pinky) * (1.f - FingerData.RightHand.Pinky); + Index = (Index + 0.7f * Index_Middle_Angle_N * FingerData.RightHand.Index_Middle) * (1.f - FingerData.RightHand.Index); + Middle = (Middle + -0.3f * Index_Middle_Angle_N * FingerData.RightHand.Index_Middle) * (1.f - FingerData.RightHand.Middle); + Thumb = (Thumb + Index + Thumb_Index_Angle_N * FingerData.RightHand.Thumb_Index) * ((1.f - FingerData.RightHand.Thumb) * (1.f - FingerData.RightHand.Index)); + Ring = (Ring + Middle - Middle_Ring_Angle_N * FingerData.RightHand.Middle_Ring) * (1.f - FingerData.RightHand.Ring); + Pinky = (Pinky + Ring - Ring_Pinky_Angle_N * FingerData.RightHand.Ring_Pinky) * (1.f - FingerData.RightHand.Pinky); AddRotation("thumb_01_r", Thumb, Hierarchy, "Z"); AddRotation("index_01_r", Index, Hierarchy, "Z"); diff --git a/Source/MoCapPlugin/Public/MCRigUnits.h b/Source/MoCapPlugin/Public/MCRigUnits.h index 2cf0288b7797a8a489a66f8c817fcb1013981930..e1edeacd160b6700a46681a26e73647ff47afcde 100644 --- a/Source/MoCapPlugin/Public/MCRigUnits.h +++ b/Source/MoCapPlugin/Public/MCRigUnits.h @@ -38,6 +38,9 @@ struct FRigUnit_ApplyFingerData : public FRigUnitMutable RIGVM_METHOD() virtual void Execute(const FRigUnitContext& Context) override; + UPROPERTY(meta = (Input)) + float AngleScale; + UPROPERTY(meta = (Input)) FFingerData FingerData;