diff --git a/Plugins/Smartsuit/Content/Mesh/NewtonFace/NewtonFace_AnimBlueprint.uasset b/Plugins/Smartsuit/Content/Mesh/NewtonFace/NewtonFace_AnimBlueprint.uasset index b78b8b4..98dbc31 100644 Binary files a/Plugins/Smartsuit/Content/Mesh/NewtonFace/NewtonFace_AnimBlueprint.uasset and b/Plugins/Smartsuit/Content/Mesh/NewtonFace/NewtonFace_AnimBlueprint.uasset differ diff --git a/Plugins/Smartsuit/Content/Mesh/NewtonFace/RokokoFaceRemapAsset.uasset b/Plugins/Smartsuit/Content/Mesh/NewtonFace/RokokoFaceRemapAsset.uasset new file mode 100644 index 0000000..c7555be Binary files /dev/null and b/Plugins/Smartsuit/Content/Mesh/NewtonFace/RokokoFaceRemapAsset.uasset differ diff --git a/Plugins/Smartsuit/Source/Smartsuit/Private/SmartsuitBlueprintLibrary.cpp b/Plugins/Smartsuit/Source/Smartsuit/Private/SmartsuitBlueprintLibrary.cpp index 00df49e..191d7f0 100644 --- a/Plugins/Smartsuit/Source/Smartsuit/Private/SmartsuitBlueprintLibrary.cpp +++ b/Plugins/Smartsuit/Source/Smartsuit/Private/SmartsuitBlueprintLibrary.cpp @@ -80,6 +80,11 @@ FQuat USmartsuitBlueprintLibrary::GetQuaternionField(TSharedPtr jso return ReturnVal; } +double USmartsuitBlueprintLibrary::ParseMorphTargetValue(TSharedPtr jsonObject, const FString& FieldName) +{ + return FMath::GetMappedRangeValueClamped(FVector2D(0.f, 100.f), FVector2D(0.f, 1.f), jsonObject->GetNumberField(FieldName)); +} + void USmartsuitBlueprintLibrary::CreateVirtualProductionSource() { FVirtualProductionSource::CreateLiveLinkSource(); diff --git a/Plugins/Smartsuit/Source/Smartsuit/Private/VirtualProductionFrame.cpp b/Plugins/Smartsuit/Source/Smartsuit/Private/VirtualProductionFrame.cpp index e420828..893d3b2 100644 --- a/Plugins/Smartsuit/Source/Smartsuit/Private/VirtualProductionFrame.cpp +++ b/Plugins/Smartsuit/Source/Smartsuit/Private/VirtualProductionFrame.cpp @@ -74,56 +74,109 @@ FFace::FFace(TSharedPtr jsonObject) provider = jsonObject->GetStringField("provider"); faceId = jsonObject->GetStringField("faceId"); - eyeBlinkLeft = jsonObject->GetNumberField("eyeBlinkLeft"); - eyeLookDownLeft = jsonObject->GetNumberField("eyeLookDownLeft"); - eyeLookInLeft = jsonObject->GetNumberField("eyeLookInLeft"); - eyeLookOutLeft = jsonObject->GetNumberField("eyeLookOutLeft"); - eyeLookUpLeft = jsonObject->GetNumberField("eyeLookUpLeft"); - eyeSquintLeft = jsonObject->GetNumberField("eyeSquintLeft"); - eyeWideLeft = jsonObject->GetNumberField("eyeWideLeft"); - eyeBlinkRight = jsonObject->GetNumberField("eyeBlinkRight"); - eyeLookDownRight = jsonObject->GetNumberField("eyeLookDownRight"); - eyeLookInRight = jsonObject->GetNumberField("eyeLookInRight"); - eyeLookOutRight = jsonObject->GetNumberField("eyeLookOutRight"); - eyeLookUpRight = jsonObject->GetNumberField("eyeLookUpRight"); - eyeSquintRight = jsonObject->GetNumberField("eyeSquintRight"); - eyeWideRight = jsonObject->GetNumberField("eyeWideRight"); - jawForward = jsonObject->GetNumberField("jawForward"); - jawLeft = jsonObject->GetNumberField("jawLeft"); - jawRight = jsonObject->GetNumberField("jawRight"); - jawOpen = jsonObject->GetNumberField("jawOpen"); - mouthClose = jsonObject->GetNumberField("mouthClose"); - mouthFunnel = jsonObject->GetNumberField("mouthFunnel"); - mouthPucker = jsonObject->GetNumberField("mouthPucker"); - mouthLeft = jsonObject->GetNumberField("mouthLeft"); - mouthRight = jsonObject->GetNumberField("mouthRight"); - mouthSmileLeft = jsonObject->GetNumberField("mouthSmileLeft"); - mouthSmileRight = jsonObject->GetNumberField("mouthSmileRight"); - mouthFrownLeft = jsonObject->GetNumberField("mouthFrownLeft"); - mouthFrownRight = jsonObject->GetNumberField("mouthFrownRight"); - mouthDimpleLeft = jsonObject->GetNumberField("mouthDimpleLeft"); - mouthDimpleRight = jsonObject->GetNumberField("mouthDimpleRight"); - mouthStretchLeft = jsonObject->GetNumberField("mouthStretchLeft"); - mouthStretchRight = jsonObject->GetNumberField("mouthStretchRight"); - mouthRollLower = jsonObject->GetNumberField("mouthRollLower"); - mouthRollUpper = jsonObject->GetNumberField("mouthRollUpper"); - mouthShrugLower = jsonObject->GetNumberField("mouthShrugLower"); - mouthShrugUpper = jsonObject->GetNumberField("mouthShrugUpper"); - mouthPressLeft = jsonObject->GetNumberField("mouthPressLeft"); - mouthPressRight = jsonObject->GetNumberField("mouthPressRight"); - mouthLowerDownLeft = jsonObject->GetNumberField("mouthLowerDownLeft"); - mouthLowerDownRight = jsonObject->GetNumberField("mouthLowerDownRight"); - mouthUpperUpLeft = jsonObject->GetNumberField("mouthUpperUpLeft"); - mouthUpperUpRight = jsonObject->GetNumberField("mouthUpperUpRight"); - browDownLeft = jsonObject->GetNumberField("browDownLeft"); - browDownRight = jsonObject->GetNumberField("browDownRight"); - browInnerUp = jsonObject->GetNumberField("browInnerUp"); - browOuterUpLeft = jsonObject->GetNumberField("browOuterUpLeft"); - browOuterUpRight = jsonObject->GetNumberField("browOuterUpRight"); - cheekPuff = jsonObject->GetNumberField("cheekPuff"); - cheekSquintLeft = jsonObject->GetNumberField("cheekSquintLeft"); - cheekSquintRight = jsonObject->GetNumberField("cheekSquintRight"); - noseSneerLeft = jsonObject->GetNumberField("noseSneerLeft"); - noseSneerRight = jsonObject->GetNumberField("noseSneerRight"); - tongueOut = jsonObject->GetNumberField("tongueOut"); + //eyeBlinkLeft = jsonObject->GetNumberField("eyeBlinkLeft"); + //eyeLookDownLeft = jsonObject->GetNumberField("eyeLookDownLeft"); + //eyeLookInLeft = jsonObject->GetNumberField("eyeLookInLeft"); + //eyeLookOutLeft = jsonObject->GetNumberField("eyeLookOutLeft"); + //eyeLookUpLeft = jsonObject->GetNumberField("eyeLookUpLeft"); + //eyeSquintLeft = jsonObject->GetNumberField("eyeSquintLeft"); + //eyeWideLeft = jsonObject->GetNumberField("eyeWideLeft"); + //eyeBlinkRight = jsonObject->GetNumberField("eyeBlinkRight"); + //eyeLookDownRight = jsonObject->GetNumberField("eyeLookDownRight"); + //eyeLookInRight = jsonObject->GetNumberField("eyeLookInRight"); + //eyeLookOutRight = jsonObject->GetNumberField("eyeLookOutRight"); + //eyeLookUpRight = jsonObject->GetNumberField("eyeLookUpRight"); + //eyeSquintRight = jsonObject->GetNumberField("eyeSquintRight"); + //eyeWideRight = jsonObject->GetNumberField("eyeWideRight"); + //jawForward = jsonObject->GetNumberField("jawForward"); + //jawLeft = jsonObject->GetNumberField("jawLeft"); + //jawRight = jsonObject->GetNumberField("jawRight"); + //jawOpen = jsonObject->GetNumberField("jawOpen"); + //mouthClose = jsonObject->GetNumberField("mouthClose"); + //mouthFunnel = jsonObject->GetNumberField("mouthFunnel"); + //mouthPucker = jsonObject->GetNumberField("mouthPucker"); + //mouthLeft = jsonObject->GetNumberField("mouthLeft"); + //mouthRight = jsonObject->GetNumberField("mouthRight"); + //mouthSmileLeft = jsonObject->GetNumberField("mouthSmileLeft"); + //mouthSmileRight = jsonObject->GetNumberField("mouthSmileRight"); + //mouthFrownLeft = jsonObject->GetNumberField("mouthFrownLeft"); + //mouthFrownRight = jsonObject->GetNumberField("mouthFrownRight"); + //mouthDimpleLeft = jsonObject->GetNumberField("mouthDimpleLeft"); + //mouthDimpleRight = jsonObject->GetNumberField("mouthDimpleRight"); + //mouthStretchLeft = jsonObject->GetNumberField("mouthStretchLeft"); + //mouthStretchRight = jsonObject->GetNumberField("mouthStretchRight"); + //mouthRollLower = jsonObject->GetNumberField("mouthRollLower"); + //mouthRollUpper = jsonObject->GetNumberField("mouthRollUpper"); + //mouthShrugLower = jsonObject->GetNumberField("mouthShrugLower"); + //mouthShrugUpper = jsonObject->GetNumberField("mouthShrugUpper"); + //mouthPressLeft = jsonObject->GetNumberField("mouthPressLeft"); + //mouthPressRight = jsonObject->GetNumberField("mouthPressRight"); + //mouthLowerDownLeft = jsonObject->GetNumberField("mouthLowerDownLeft"); + //mouthLowerDownRight = jsonObject->GetNumberField("mouthLowerDownRight"); + //mouthUpperUpLeft = jsonObject->GetNumberField("mouthUpperUpLeft"); + //mouthUpperUpRight = jsonObject->GetNumberField("mouthUpperUpRight"); + //browDownLeft = jsonObject->GetNumberField("browDownLeft"); + //browDownRight = jsonObject->GetNumberField("browDownRight"); + //browInnerUp = jsonObject->GetNumberField("browInnerUp"); + //browOuterUpLeft = jsonObject->GetNumberField("browOuterUpLeft"); + //browOuterUpRight = jsonObject->GetNumberField("browOuterUpRight"); + //cheekPuff = jsonObject->GetNumberField("cheekPuff"); + //cheekSquintLeft = jsonObject->GetNumberField("cheekSquintLeft"); + //cheekSquintRight = jsonObject->GetNumberField("cheekSquintRight"); + //noseSneerLeft = jsonObject->GetNumberField("noseSneerLeft"); + //noseSneerRight = jsonObject->GetNumberField("noseSneerRight"); + //tongueOut = jsonObject->GetNumberField("tongueOut"); + + eyeBlinkLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeBlinkLeft"); + eyeLookDownLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeLookDownLeft"); + eyeLookInLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeLookInLeft"); + eyeLookOutLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeLookOutLeft"); + eyeLookUpLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeLookUpLeft"); + eyeSquintLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeSquintLeft"); + eyeWideLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeWideLeft"); + eyeBlinkRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeBlinkRight"); + eyeLookDownRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeLookDownRight"); + eyeLookInRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeLookInRight"); + eyeLookOutRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeLookOutRight"); + eyeLookUpRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeLookUpRight"); + eyeSquintRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeSquintRight"); + eyeWideRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "eyeWideRight"); + jawForward = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "jawForward"); + jawLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "jawLeft"); + jawRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "jawRight"); + jawOpen = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "jawOpen"); + mouthClose = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthClose"); + mouthFunnel = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthFunnel"); + mouthPucker = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthPucker"); + mouthLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthLeft"); + mouthRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthRight"); + mouthSmileLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthSmileLeft"); + mouthSmileRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthSmileRight"); + mouthFrownLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthFrownLeft"); + mouthFrownRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthFrownRight"); + mouthDimpleLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthDimpleLeft"); + mouthDimpleRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthDimpleRight"); + mouthStretchLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthStretchLeft"); + mouthStretchRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthStretchRight"); + mouthRollLower = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthRollLower"); + mouthRollUpper = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthRollUpper"); + mouthShrugLower = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthShrugLower"); + mouthShrugUpper = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthShrugUpper"); + mouthPressLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthPressLeft"); + mouthPressRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthPressRight"); + mouthLowerDownLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthLowerDownLeft"); + mouthLowerDownRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthLowerDownRight"); + mouthUpperUpLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthUpperUpLeft"); + mouthUpperUpRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "mouthUpperUpRight"); + browDownLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "browDownLeft"); + browDownRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "browDownRight"); + browInnerUp = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "browInnerUp"); + browOuterUpLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "browOuterUpLeft"); + browOuterUpRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "browOuterUpRight"); + cheekPuff = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "cheekPuff"); + cheekSquintLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "cheekSquintLeft"); + cheekSquintRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "cheekSquintRight"); + noseSneerLeft = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "noseSneerLeft"); + noseSneerRight = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "noseSneerRight"); + tongueOut = USmartsuitBlueprintLibrary::ParseMorphTargetValue(jsonObject, "tongueOut"); } diff --git a/Plugins/Smartsuit/Source/Smartsuit/Private/VirtualProductionSource.cpp b/Plugins/Smartsuit/Source/Smartsuit/Private/VirtualProductionSource.cpp index ce24ea1..cb3e3e3 100644 --- a/Plugins/Smartsuit/Source/Smartsuit/Private/VirtualProductionSource.cpp +++ b/Plugins/Smartsuit/Source/Smartsuit/Private/VirtualProductionSource.cpp @@ -701,4 +701,18 @@ void FVirtualProductionSource::RemoveLiveLinkSource(TSharedPtrRemoveSource(InSource); } +} + +FName URokokoFaceMapData::GetRemappedCurveName_Implementation(FName CurveName) const +{ + if (auto RemappedName = NameMapping.Find(CurveName)) + { + return *RemappedName; + } + return ""; +} + +void URokokoFaceMapData::Initialize() +{ + InitializeTMap(); } \ No newline at end of file diff --git a/Plugins/Smartsuit/Source/Smartsuit/Public/SmartsuitBlueprintLibrary.h b/Plugins/Smartsuit/Source/Smartsuit/Public/SmartsuitBlueprintLibrary.h index d916368..f0d588c 100644 --- a/Plugins/Smartsuit/Source/Smartsuit/Public/SmartsuitBlueprintLibrary.h +++ b/Plugins/Smartsuit/Source/Smartsuit/Public/SmartsuitBlueprintLibrary.h @@ -50,6 +50,8 @@ class USmartsuitBlueprintLibrary : public UBlueprintFunctionLibrary static FQuat GetQuaternionField(TSharedPtr jsonObject); + static double ParseMorphTargetValue(TSharedPtr jsonObject, const FString& FieldName); + UFUNCTION(BlueprintCallable, Category = "Smartsuit") static void CreateVirtualProductionSource(); }; diff --git a/Plugins/Smartsuit/Source/Smartsuit/Public/VirtualProductionSource.h b/Plugins/Smartsuit/Source/Smartsuit/Public/VirtualProductionSource.h index a4f6441..cc98181 100644 --- a/Plugins/Smartsuit/Source/Smartsuit/Public/VirtualProductionSource.h +++ b/Plugins/Smartsuit/Source/Smartsuit/Public/VirtualProductionSource.h @@ -9,6 +9,7 @@ #include "VirtualProductionFrame.h" #include "SmartsuitDefinitions.h" #include "Engine/DataAsset.h" +#include "LiveLinkRemapAsset.h" #include "VirtualProductionSource.generated.h" class ILiveLinkClient; @@ -30,6 +31,291 @@ struct FVPMorphTargetMapping FName CurveNameOverride; }; +UCLASS(BlueprintType) +class SMARTSUIT_API URokokoFaceMapData : public ULiveLinkRemapAsset +{ + GENERATED_BODY() + + URokokoFaceMapData() + { + browDownLeft = "browDownLeft"; + browDownRight = "browDownRight"; + browInnerUp = "browInnerUp"; + browOuterUpLeft = "browOuterUpLeft"; + browOuterUpRight = "browOuterUpRight"; + cheekPuff = "cheekPuff"; + cheekSquintLeft = "cheekSquintLeft"; + cheekSquintRight = "cheekSquintRight"; + eyeBlinkLeft = "eyeBlinkLeft"; + eyeBlinkRight = "eyeBlinkRight"; + eyeLookDownLeft = "eyeLookDownLeft"; + eyeLookDownRight = "eyeLookDownRight"; + eyeLookInLeft = "eyeLookInLeft"; + eyeLookInRight = "eyeLookInRight"; + eyeLookOutLeft = "eyeLookOutLeft"; + eyeLookOutRight = "eyeLookOutRight"; + eyeLookUpLeft = "eyeLookUpLeft"; + eyeLookUpRight = "eyeLookUpRight"; + eyeSquintLeft = "eyeSquintLeft"; + eyeSquintRight = "eyeSquintRight"; + eyeWideLeft = "eyeWideLeft"; + eyeWideRight = "eyeWideRight"; + jawOpen = "jawOpen"; + jawForward = "jawForward"; + jawLeft = "jawLeft"; + jawRight = "jawRight"; + mouthClose = "mouthClose"; + mouthDimpleLeft = "mouthDimpleLeft"; + mouthDimpleRight = "mouthDimpleRight"; + mouthFrownLeft = "mouthFrownLeft"; + mouthFrownRight = "mouthFrownRight"; + mouthFunnel = "mouthFunnel"; + mouthLeft = "mouthLeft"; + mouthLowerDownLeft = "mouthLowerDownLeft"; + mouthLowerDownRight = "mouthLowerDownRight"; + mouthPressLeft = "mouthPressLeft"; + mouthPressRight = "mouthPressRight"; + mouthPucker = "mouthPucker"; + mouthRight = "mouthRight"; + mouthRollLower = "mouthRollLower"; + mouthRollUpper = "mouthRollUpper"; + mouthShrugLower = "mouthShrugLower"; + mouthShrugUpper = "mouthShrugUpper"; + mouthSmileLeft = "mouthSmileLeft"; + mouthSmileRight = "mouthSmileRight"; + mouthStretchLeft = "mouthStretchLeft"; + mouthStretchRight = "mouthStretchRight"; + mouthUpperUpLeft = "mouthUpperUpLeft"; + mouthUpperUpRight = "mouthUpperUpRight"; + noseSneerLeft = "noseSneerLeft"; + noseSneerRight = "noseSneerRight"; + tongueOut = "tongueOut"; + } +public: + + FName GetRemappedCurveName_Implementation(FName CurveName) const override; + + virtual void Initialize() override; + + UFUNCTION(BlueprintCallable, Category = MorphTargetRemapping) + void InitializeTMap() + { + NameMapping.Add("browDownLeft", browDownLeft); + NameMapping.Add("browDownRight", browDownRight); + NameMapping.Add("browInnerUp", browInnerUp); + NameMapping.Add("browOuterUpLeft", browOuterUpLeft); + NameMapping.Add("browOuterUpRight", browOuterUpRight); + NameMapping.Add("cheekPuff", cheekPuff); + NameMapping.Add("cheekSquintLeft", cheekSquintLeft); + NameMapping.Add("cheekSquintRight", cheekSquintRight); + NameMapping.Add("eyeBlinkLeft", eyeBlinkLeft); + NameMapping.Add("eyeBlinkRight", eyeBlinkRight); + NameMapping.Add("eyeLookDownLeft", eyeLookDownLeft); + NameMapping.Add("eyeLookDownRight", eyeLookDownRight); + NameMapping.Add("eyeLookInLeft", eyeLookInLeft); + NameMapping.Add("eyeLookInRight", eyeLookInRight); + NameMapping.Add("eyeLookOutLeft", eyeLookOutLeft); + NameMapping.Add("eyeLookOutRight", eyeLookOutRight); + NameMapping.Add("eyeLookUpLeft", eyeLookUpLeft); + NameMapping.Add("eyeLookUpRight", eyeLookUpRight); + NameMapping.Add("eyeSquintLeft", eyeSquintLeft); + NameMapping.Add("eyeSquintRight", eyeSquintRight); + NameMapping.Add("eyeWideLeft", eyeWideLeft); + NameMapping.Add("eyeWideRight", eyeWideRight); + NameMapping.Add("jawOpen", jawOpen); + NameMapping.Add("jawForward", jawForward); + NameMapping.Add("jawLeft", jawLeft); + NameMapping.Add("jawRight", jawRight); + NameMapping.Add("mouthClose", mouthClose); + NameMapping.Add("mouthDimpleLeft", mouthDimpleLeft); + NameMapping.Add("mouthDimpleRight", mouthDimpleRight); + NameMapping.Add("mouthFrownLeft", mouthFrownLeft); + NameMapping.Add("mouthFrownRight", mouthFrownRight); + NameMapping.Add("mouthFunnel", mouthFunnel); + NameMapping.Add("mouthLeft", mouthLeft); + NameMapping.Add("mouthLowerDownLeft", mouthLowerDownLeft); + NameMapping.Add("mouthLowerDownRight", mouthLowerDownRight); + NameMapping.Add("mouthPressLeft", mouthPressLeft); + NameMapping.Add("mouthPressRight", mouthPressRight); + NameMapping.Add("mouthPucker", mouthPucker); + NameMapping.Add("mouthRight", mouthRight); + NameMapping.Add("mouthRollLower", mouthRollLower); + NameMapping.Add("mouthRollUpper", mouthRollUpper); + NameMapping.Add("mouthShrugLower", mouthShrugLower); + NameMapping.Add("mouthShrugUpper", mouthShrugUpper); + NameMapping.Add("mouthSmileLeft", mouthSmileLeft); + NameMapping.Add("mouthSmileRight", mouthSmileRight); + NameMapping.Add("mouthStretchLeft", mouthStretchLeft); + NameMapping.Add("mouthStretchRight", mouthStretchRight); + NameMapping.Add("mouthUpperUpLeft", mouthUpperUpLeft); + NameMapping.Add("mouthUpperUpRight", mouthUpperUpRight); + NameMapping.Add("noseSneerLeft", noseSneerLeft); + NameMapping.Add("noseSneerRight", noseSneerRight); + NameMapping.Add("tongueOut", tongueOut); + } + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + TMap NameMapping; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName browDownLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName browDownRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName browInnerUp; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName browOuterUpLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName browOuterUpRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName cheekPuff; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName cheekSquintLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName cheekSquintRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeBlinkLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeBlinkRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeLookDownLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeLookDownRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeLookInLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeLookInRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeLookOutLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeLookOutRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeLookUpLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeLookUpRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeSquintLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeSquintRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeWideLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName eyeWideRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName jawOpen; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName jawForward; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName jawLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName jawRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthClose; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthDimpleLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthDimpleRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthFrownLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthFrownRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthFunnel; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthLowerDownLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthLowerDownRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthPressLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthPressRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthPucker; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthRollLower; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthRollUpper; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthShrugLower; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthShrugUpper; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthSmileLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthSmileRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthStretchLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthStretchRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthUpperUpLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName mouthUpperUpRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName noseSneerLeft; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName noseSneerRight; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MorphTargetRemapping) + FName tongueOut; + +}; + + UCLASS(BlueprintType) class SMARTSUIT_API UVPFaceMorphTargetNameRemapping : public UDataAsset {