// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Sampling/MeshImageBaker.h" #include "Sampling/MeshImageBakingCache.h" #include "Image/ImageBuilder.h" namespace UE { namespace Geometry { class FMeshVertexCurvatureCache; class FMeshCurvatureMapBaker : public FMeshImageBaker { public: virtual ~FMeshCurvatureMapBaker() {} // // Options // enum class ECurvatureType { Mean = 0, Gaussian = 1, MaxPrincipal = 2, MinPrincipal = 3 }; ECurvatureType UseCurvatureType = ECurvatureType::Mean; enum class EColorMode { BlackGrayWhite = 0, RedGreenBlue = 1, RedBlue = 2 }; EColorMode UseColorMode = EColorMode::RedGreenBlue; enum class EClampMode { FullRange = 0, Positive = 1, Negative = 2 }; EClampMode UseClampMode = EClampMode::FullRange; double RangeScale = 1.0; double MinRangeScale = 0.0; // allows override of the max curvature; if false, range is set based on [-(avg+stddev), avg+stddev] bool bOverrideCurvatureRange = false; double OverrideRangeMax = .1; double BlurRadius = 0.0; // // Required input data, can be provided, will be computed otherwise // TSharedPtr Curvatures; // // Compute functions // /** Calculate bake result */ DYNAMICMESH_API virtual void Bake() override; /** populate Curvatures member if valid data has not been provided */ DYNAMICMESH_API void CacheDetailCurvatures(const FDynamicMesh3* DetailMesh); // // Output // const TUniquePtr>& GetResult() const { return ResultBuilder; } TUniquePtr> TakeResult() { return MoveTemp(ResultBuilder); } protected: TUniquePtr> ResultBuilder; void Bake_Single(); void Bake_Multi(); void GetColorMapRange(FVector3f& NegativeColor, FVector3f& ZeroColor, FVector3f& PositiveColor); }; } // end namespace UE::Geometry } // end namespace UE