Files
UnrealEngine/Engine/Plugins/MetaHuman/MetaHumanAnimator/Source/MetaHumanFaceFittingSolver/Public/MetaHumanFaceFittingSolver.h
2025-05-18 13:04:45 +08:00

77 lines
2.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "MetaHumanFaceFittingSolver.generated.h"
/** MetaHuman Face Fitting Solver
*
* Holds configuration info used by the solver.
*
*/
UCLASS()
class METAHUMANFACEFITTINGSOLVER_API UMetaHumanFaceFittingSolver : public UObject
{
GENERATED_BODY()
public:
// Delegate called when something changes in the face fitting solver data that others should know about
DECLARE_MULTICAST_DELEGATE(FOnInternalsChanged)
#if WITH_EDITOR
//~Begin UObject interface
virtual void PostEditChangeProperty(struct FPropertyChangedEvent& InPropertyChangedEvent) override;
virtual void PostTransacted(const FTransactionObjectEvent& InTransactionEvent) override;
//~End UObject interface
#endif
UPROPERTY(EditAnywhere, Category = "Parameters", meta = (InlineEditConditionToggle))
bool bOverrideDeviceConfig = false;
UPROPERTY(EditAnywhere, Category = "Parameters", meta = (EditCondition = "bOverrideDeviceConfig"))
TObjectPtr<class UMetaHumanConfig> DeviceConfig;
UPROPERTY()
TObjectPtr<class UMetaHumanFaceAnimationSolver> FaceAnimationSolver;
UPROPERTY(EditAnywhere, Category = "Parameters")
TObjectPtr<class UMetaHumanConfig> PredictiveSolver;
/** Load the solvers for face fitting */
void LoadFaceFittingSolvers();
/** Load Solver that will be trained as part of preparing identity for performance */
void LoadPredictiveSolver();
bool CanProcess() const;
bool GetConfigDisplayName(class UCaptureData* InCaptureData, FString& OutName) const;
FString GetFittingTemplateData(class UCaptureData* InCaptureData = nullptr) const;
FString GetFittingConfigData(class UCaptureData* InCaptureData = nullptr) const;
FString GetFittingConfigTeethData(class UCaptureData* InCaptureData = nullptr) const;
FString GetFittingIdentityModelData(class UCaptureData* InCaptureData = nullptr) const;
FString GetFittingControlsData(class UCaptureData* InCaptureData = nullptr) const;
TArray<uint8> GetPredictiveGlobalTeethTrainingData() const;
TArray<uint8> GetPredictiveTrainingData() const;
FOnInternalsChanged& OnInternalsChanged();
private:
class UMetaHumanConfig* GetEffectiveConfig(class UCaptureData* InCaptureData) const;
FString JsonObjectAsString(TSharedPtr<class FJsonObject> InJsonObject) const;
FOnInternalsChanged OnInternalsChangedDelegate;
void NotifyInternalsChanged();
};