// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MetaHumanItemPipeline.h" #include "MetaHumanPaletteItemKey.h" #include "Item/MetaHumanMaterialPipelineCommon.h" #include "MetaHumanGroomPipeline.generated.h" class UGroomBindingAsset; class UGroomComponent; class UMaterialInstanceDynamic; class UMaterialInterface; class USkeletalMesh; USTRUCT() struct FMetaHumanGroomPipelineBuildOutput { GENERATED_BODY() public: UPROPERTY() TArray> Bindings; }; USTRUCT() struct FMetaHumanGroomPipelineAssemblyInput { GENERATED_BODY() public: UPROPERTY() TObjectPtr TargetMesh; }; USTRUCT(BlueprintType) struct METAHUMANDEFAULTPIPELINE_API FMetaHumanGroomPipelineAssemblyOutput { GENERATED_BODY() public: UPROPERTY() TObjectPtr Binding; UPROPERTY() TMap> OverrideMaterials; }; USTRUCT() struct FMetaHumanGroomPipelineParameterContext { GENERATED_BODY() public: UPROPERTY() TMap> MaterialSlotToMaterialInstance; UPROPERTY() TArray AvailableSlots; }; UCLASS(Blueprintable, EditInlineNew) class METAHUMANDEFAULTPIPELINE_API UMetaHumanGroomPipeline : public UMetaHumanItemPipeline { GENERATED_BODY() public: UMetaHumanGroomPipeline(); #if WITH_EDITOR virtual void SetDefaultEditorPipeline() override; virtual const UMetaHumanItemEditorPipeline* GetEditorPipeline() const override; #endif virtual void AssembleItem( const FMetaHumanPaletteItemPath& BaseItemPath, const TArray& SlotSelections, const FMetaHumanPaletteBuiltData& ItemBuiltData, const FInstancedStruct& AssemblyInput, TNotNull OuterForGeneratedObjects, const FOnAssemblyComplete& OnComplete) const override; virtual void SetInstanceParameters(const FInstancedStruct& ParameterContext, const FInstancedPropertyBag& Parameters) const override; virtual TNotNull GetSpecification() const override; UFUNCTION(BlueprintCallable, Category = "MetaHuman Character Pipeline") static void ApplyGroomAssemblyOutputToGroomComponent(const FMetaHumanGroomPipelineAssemblyOutput& GroomAssemblyOutput, UGroomComponent* GroomComponent); UPROPERTY(EditAnywhere, Category = "Pipeline") TMap> OverrideMaterials; UPROPERTY(EditAnywhere, Category = "Pipeline") TArray RuntimeMaterialParameters; protected: // Allows pipeline to override default material values before they're initialized virtual void OverrideInitialMaterialValues(TNotNull InMID, FName InSlotName, int32 SlotIndex) const {} private: #if WITH_EDITOR TSubclassOf GetEditorPipelineClass() const; #endif #if WITH_EDITORONLY_DATA UPROPERTY(EditAnywhere, NoClear, Instanced, Category = "Pipeline", meta = (FullyExpand, AllowedClasses = "/Script/MetaHumanDefaultEditorPipeline.MetaHumanGroomEditorPipeline")) TObjectPtr EditorPipeline; #endif UPROPERTY() TObjectPtr Specification; };