Skip to content
Snippets Groups Projects
Commit d2692666 authored by Patrick Nossol's avatar Patrick Nossol
Browse files

Added Angle open finger

parent fc0def6e
Branches
No related tags found
No related merge requests found
No preview for this file type
...@@ -44,71 +44,161 @@ FRigUnit_ApplyFingerData_Execute() { ...@@ -44,71 +44,161 @@ FRigUnit_ApplyFingerData_Execute() {
Scale = FVector(1.f, 1.f, 1.f); Scale = FVector(1.f, 1.f, 1.f);
ThumbScale = FVector(1.f, 1.f, 1.f); ThumbScale = FVector(1.f, 1.f, 1.f);
} }
FVector ThumbAngles_N = ThumbScale * ThumbAngles; FVector ThumbAnglesClosed_N = ThumbScale * ThumbAnglesClosed;
FVector IndexAngles_N = Scale * IndexAngles; FVector IndexAnglesClosed_N = Scale * IndexAnglesClosed;
FVector MiddleAngles_N = Scale * MiddleAngles; FVector MiddleAnglesClosed_N = Scale * MiddleAnglesClosed;
FVector RingAngles_N = Scale * RingAngles; FVector RingAnglesClosed_N = Scale * RingAnglesClosed;
FVector PinkyAngles_N = Scale * PinkyAngles; 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 Thumb_Index_Angle_N = Thumb_Index_Angle;
float Index_Middle_Angle_N = Index_Middle_Angle; float Index_Middle_Angle_N = Index_Middle_Angle;
float Middle_Ring_Angle_N = Middle_Ring_Angle; float Middle_Ring_Angle_N = Middle_Ring_Angle;
float Ring_Pinky_Angle_N = Ring_Pinky_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(); FRigBoneHierarchy* Hierarchy = ExecuteContext.GetBones();
if (Hierarchy) { if (Hierarchy) {
//CURLS //CURLS
float Thumb01YAngle = ThumbAngles_N.X; float Thumb01YAngleClosed = ThumbAnglesClosed_N.X;
if (AngleScale >= 1.f) { if (AngleScale >= 1.f) {
Thumb01YAngle = -15.f; Thumb01YAngleClosed = -15.f;
} }
AddRotation("thumb_01_l", FingerData.LeftHand.Thumb * Thumb01YAngle, Hierarchy); if (FingerDataTransformed.LeftHand.Thumb >= 0.f) {
AddRotation("thumb_01_l", FingerData.LeftHand.Thumb * ThumbAngles_N.X, Hierarchy, "Z"); AddRotation("thumb_01_l", FingerDataTransformed.LeftHand.Thumb * Thumb01YAngleClosed, Hierarchy);
AddRotation("thumb_02_l", FingerData.LeftHand.Thumb * ThumbAngles_N.Y, Hierarchy); AddRotation("thumb_01_l", FingerDataTransformed.LeftHand.Thumb * ThumbAnglesClosed_N.X, Hierarchy, "Z");
AddRotation("thumb_03_l", FingerData.LeftHand.Thumb * ThumbAngles_N.Z, Hierarchy); AddRotation("thumb_02_l", FingerDataTransformed.LeftHand.Thumb * ThumbAnglesClosed_N.Y, Hierarchy);
AddRotation("thumb_03_l", FingerDataTransformed.LeftHand.Thumb * ThumbAnglesClosed_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); else {
AddRotation("index_03_l", FingerData.LeftHand.Index * IndexAngles_N.Z, Hierarchy); //AddRotation("thumb_01_l", FingerDataTransformed.LeftHand.Thumb * Thumb01YAngleClosed, Hierarchy);
//AddRotation("thumb_01_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * -ThumbAnglesOpen_N.X, Hierarchy, "X");
AddRotation("middle_01_l", FingerData.LeftHand.Middle * MiddleAngles_N.X, Hierarchy); AddRotation("thumb_01_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * -ThumbAnglesOpen_N.X, Hierarchy);
AddRotation("middle_02_l", FingerData.LeftHand.Middle * MiddleAngles_N.Y, Hierarchy); AddRotation("thumb_01_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * ThumbAnglesOpen_N.X, Hierarchy, "Z");
AddRotation("middle_03_l", FingerData.LeftHand.Middle * MiddleAngles_N.Z, Hierarchy); 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); if (FingerDataTransformed.LeftHand.Index >= 0.f) {
AddRotation("ring_02_l", FingerData.LeftHand.Ring * RingAngles_N.Y, Hierarchy); AddRotation("index_01_l", FingerDataTransformed.LeftHand.Index * IndexAnglesClosed_N.X, Hierarchy);
AddRotation("ring_03_l", FingerData.LeftHand.Ring * RingAngles_N.Z, 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); if (FingerDataTransformed.LeftHand.Middle >= 0.f) {
AddRotation("pinky_02_l", FingerData.LeftHand.Pinky * PinkyAngles_N.Y, Hierarchy); AddRotation("middle_01_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesClosed_N.X, Hierarchy);
AddRotation("pinky_03_l", FingerData.LeftHand.Pinky * PinkyAngles_N.Z, 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); if (FingerDataTransformed.LeftHand.Pinky >= 0.f) {
AddRotation("thumb_01_r", FingerData.RightHand.Thumb * ThumbAngles_N.X, Hierarchy, "Z"); AddRotation("pinky_01_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesClosed_N.X, Hierarchy);
AddRotation("thumb_02_r", FingerData.RightHand.Thumb * ThumbAngles_N.Y, Hierarchy); AddRotation("pinky_02_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesClosed_N.Y, Hierarchy);
AddRotation("thumb_03_r", FingerData.RightHand.Thumb * ThumbAngles_N.Z, 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); if (FingerDataTransformed.RightHand.Thumb >= 0.f) {
AddRotation("index_02_r", FingerData.RightHand.Index * IndexAngles_N.Y, Hierarchy); AddRotation("thumb_01_r", FingerDataTransformed.RightHand.Thumb * Thumb01YAngleClosed, Hierarchy);
AddRotation("index_03_r", FingerData.RightHand.Index * IndexAngles_N.Z, 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); if (FingerDataTransformed.RightHand.Index >= 0.f) {
AddRotation("middle_02_r", FingerData.RightHand.Middle * MiddleAngles_N.Y, Hierarchy); AddRotation("index_01_r", FingerDataTransformed.RightHand.Index * IndexAnglesClosed_N.X, Hierarchy);
AddRotation("middle_03_r", FingerData.RightHand.Middle * MiddleAngles_N.Z, 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); if (FingerDataTransformed.RightHand.Middle >= 0.f) {
AddRotation("ring_02_r", FingerData.RightHand.Ring * RingAngles_N.Y, Hierarchy); AddRotation("middle_01_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesClosed_N.X, Hierarchy);
AddRotation("ring_03_r", FingerData.RightHand.Ring * RingAngles_N.Z, 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); if (FingerDataTransformed.RightHand.Ring >= 0.f) {
AddRotation("pinky_02_r", FingerData.RightHand.Pinky * PinkyAngles_N.Y, Hierarchy); AddRotation("ring_01_r", FingerDataTransformed.RightHand.Ring * RingAnglesClosed_N.X, Hierarchy);
AddRotation("pinky_03_r", FingerData.RightHand.Pinky * PinkyAngles_N.Z, 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 //SPLAYS
......
...@@ -375,3 +375,38 @@ public: ...@@ -375,3 +375,38 @@ public:
bool loaded = false; 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
...@@ -45,19 +45,34 @@ struct FRigUnit_ApplyFingerData : public FRigUnitMutable ...@@ -45,19 +45,34 @@ struct FRigUnit_ApplyFingerData : public FRigUnitMutable
FFingerData FingerData; FFingerData FingerData;
UPROPERTY(meta = (Input)) UPROPERTY(meta = (Input))
FVector ThumbAngles; FVector ThumbAnglesOpen;
UPROPERTY(meta = (Input)) UPROPERTY(meta = (Input))
FVector IndexAngles; FVector IndexAnglesOpen;
UPROPERTY(meta = (Input)) UPROPERTY(meta = (Input))
FVector MiddleAngles; FVector MiddleAnglesOpen;
UPROPERTY(meta = (Input)) UPROPERTY(meta = (Input))
FVector RingAngles; FVector RingAnglesOpen;
UPROPERTY(meta = (Input)) 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)) UPROPERTY(meta = (Input))
float Thumb_Index_Angle; float Thumb_Index_Angle;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment