Files
2025-05-18 13:04:45 +08:00

100 lines
1.9 KiB
C++

// 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<FMeshVertexCurvatureCache> 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<TImageBuilder<FVector3f>>& GetResult() const { return ResultBuilder; }
TUniquePtr<TImageBuilder<FVector3f>> TakeResult() { return MoveTemp(ResultBuilder); }
protected:
TUniquePtr<TImageBuilder<FVector3f>> ResultBuilder;
void Bake_Single();
void Bake_Multi();
void GetColorMapRange(FVector3f& NegativeColor, FVector3f& ZeroColor, FVector3f& PositiveColor);
};
} // end namespace UE::Geometry
} // end namespace UE