2021-01-11 15:35:10 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "GeometryFlowCoreNodes.h"
|
|
|
|
|
#include "GeometryFlowNodeUtil.h"
|
2021-01-18 18:59:25 -04:00
|
|
|
#include "ShapeApproximation/MeshSimpleShapeApproximation.h"
|
2021-01-11 15:35:10 -04:00
|
|
|
#include "MeshProcessingNodes/MeshProcessingDataTypes.h"
|
|
|
|
|
#include "DataTypes/DynamicMeshData.h"
|
|
|
|
|
#include "DataTypes/CollisionGeometryData.h"
|
|
|
|
|
#include "DataTypes/IndexSetsData.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace UE
|
|
|
|
|
{
|
|
|
|
|
namespace GeometryFlow
|
|
|
|
|
{
|
|
|
|
|
|
2021-03-09 19:33:56 -04:00
|
|
|
using namespace UE::Geometry;
|
|
|
|
|
|
2021-01-14 15:06:29 -04:00
|
|
|
enum class ESimpleCollisionGeometryType : uint8
|
2021-01-11 15:35:10 -04:00
|
|
|
{
|
2021-01-18 18:59:25 -04:00
|
|
|
// NOTE: This must be kept in sync with EGenerateStaticMeshLODSimpleCollisionGeometryType in GenerateStaticMeshLODProcess.h
|
|
|
|
|
|
2021-01-14 15:06:29 -04:00
|
|
|
AlignedBoxes,
|
|
|
|
|
OrientedBoxes,
|
|
|
|
|
MinimalSpheres,
|
|
|
|
|
Capsules,
|
2021-01-18 18:59:25 -04:00
|
|
|
ConvexHulls,
|
|
|
|
|
SweptHulls,
|
2021-03-17 04:51:06 -04:00
|
|
|
MinVolume,
|
|
|
|
|
None
|
2021-01-11 15:35:10 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct GEOMETRYFLOWMESHPROCESSING_API FGenerateSimpleCollisionSettings
|
|
|
|
|
{
|
|
|
|
|
DECLARE_GEOMETRYFLOW_DATA_TYPE_IDENTIFIER(EMeshProcessingDataTypes::GenerateSimpleCollisionSettings);
|
|
|
|
|
|
2021-01-14 15:06:29 -04:00
|
|
|
ESimpleCollisionGeometryType Type = ESimpleCollisionGeometryType::ConvexHulls;
|
|
|
|
|
|
|
|
|
|
struct FGenerateConvexHullSettings
|
|
|
|
|
{
|
|
|
|
|
int32 SimplifyToTriangleCount = 50;
|
2021-03-17 04:51:06 -04:00
|
|
|
bool bPrefilterVertices = true;
|
2021-01-14 15:06:29 -04:00
|
|
|
int PrefilterGridResolution = 10;
|
|
|
|
|
} ConvexHullSettings;
|
|
|
|
|
|
2021-01-18 18:59:25 -04:00
|
|
|
struct FGenerateSweptHullSettings
|
|
|
|
|
{
|
|
|
|
|
bool bSimplifyPolygons = true;
|
|
|
|
|
FMeshSimpleShapeApproximation::EProjectedHullAxisMode SweepAxis = FMeshSimpleShapeApproximation::EProjectedHullAxisMode::SmallestVolume;
|
|
|
|
|
float HullTolerance = 0.1;
|
|
|
|
|
} SweptHullSettings;
|
2021-01-11 15:35:10 -04:00
|
|
|
};
|
2021-01-14 15:06:29 -04:00
|
|
|
|
2021-01-11 15:35:10 -04:00
|
|
|
GEOMETRYFLOW_DECLARE_SETTINGS_TYPES(FGenerateSimpleCollisionSettings, GenerateSimpleCollision);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GEOMETRYFLOWMESHPROCESSING_API FGenerateSimpleCollisionNode : public FNode
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
using SettingsDataType = TMovableData<FGenerateSimpleCollisionSettings, FGenerateSimpleCollisionSettings::DataTypeIdentifier>;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
static const FString InParamMesh() { return TEXT("Mesh"); }
|
2021-01-14 15:06:29 -04:00
|
|
|
static const FString InParamIndexSets() { return TEXT("TriangleSets"); }
|
2021-01-11 15:35:10 -04:00
|
|
|
static const FString InParamSettings() { return TEXT("Settings"); }
|
|
|
|
|
static const FString OutParamGeometry() { return TEXT("Geometry"); }
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
FGenerateSimpleCollisionNode()
|
|
|
|
|
{
|
|
|
|
|
AddInput(InParamMesh(), MakeUnique<FDynamicMeshInput>());
|
2021-01-14 15:06:29 -04:00
|
|
|
AddInput(InParamIndexSets(), MakeBasicInput<FIndexSets>());
|
2021-01-11 15:35:10 -04:00
|
|
|
AddInput(InParamSettings(), MakeBasicInput<FGenerateSimpleCollisionSettings>());
|
|
|
|
|
|
|
|
|
|
AddOutput(OutParamGeometry(), MakeBasicOutput<FCollisionGeometry>());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual void Evaluate(
|
|
|
|
|
const FNamedDataMap& DatasIn,
|
|
|
|
|
FNamedDataMap& DatasOut,
|
|
|
|
|
TUniquePtr<FEvaluationInfo>& EvaluationInfo) override;
|
2021-02-01 14:43:20 -04:00
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
|
|
EGeometryFlowResult EvaluateInternal(const FDynamicMesh3& Mesh,
|
|
|
|
|
const FIndexSets& IndexData,
|
|
|
|
|
const FGenerateSimpleCollisionSettings& Settings,
|
|
|
|
|
TUniquePtr<FEvaluationInfo>& EvaluationInfo,
|
|
|
|
|
FCollisionGeometry& OutCollisionGeometry);
|
|
|
|
|
|
2021-01-11 15:35:10 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // end namespace GeometryFlow
|
|
|
|
|
} // end namespace UE
|