Files
David Hill 91e7948122 Mesh Modeling and Dynamic Mesh. Provide ability to store and read a vertex mapping with a DynamicMesh inthe case that the source data is non-manifold.
ModelingTools - MeshAttributePaintTool and SkinWeightsPaintTool.  Use non-maniforld vertex ids when provided.  fixes a crash
SplitMeshesTool - removed an unsed mesh conversion.
ModelingComponents - ModelingToolTargetUtil  - request non-manifold vertex Ids on dynamic meshes when converted for tools.
DynamicMeshViaMeshDescription - request non-manifold vertex Ids on dynamic meshes when converted for tools.
ModelingObjectCreation - make sure to strip the any src vertex IDs from a dynamic mesh during object creation.

#rb Ryan.Schmidt
#preflight 63867a97f213a116eb4e9ed1

MeshConversions - MeshDescriptionToDynamicMesh - Add ability to capture non-manifold source veretx IDs in the form of a vertex attribute.

[CL 23330671 by David Hill in ue5-main branch]
2022-11-30 10:38:46 -05:00

47 lines
1.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ConversionUtils/DynamicMeshViaMeshDescriptionUtil.h"
#include "TargetInterfaces/MeshDescriptionCommitter.h"
#include "TargetInterfaces/MeshDescriptionProvider.h"
#include "DynamicMeshToMeshDescription.h"
#include "MeshConversionOptions.h" //FConversionToMeshDescriptionOptions
#include "MeshDescriptionToDynamicMesh.h"
FDynamicMesh3 UE::Geometry::GetDynamicMeshViaMeshDescription(
IMeshDescriptionProvider& MeshDescriptionProvider)
{
FDynamicMesh3 DynamicMesh;
FMeshDescriptionToDynamicMesh Converter;
Converter.bVIDsFromNonManifoldMeshDescriptionAttr = true;
Converter.Convert(MeshDescriptionProvider.GetMeshDescription(), DynamicMesh);
return DynamicMesh;
}
void UE::Geometry::CommitDynamicMeshViaMeshDescription(
FMeshDescription&& CurrentMeshDescription,
IMeshDescriptionCommitter& MeshDescriptionCommitter,
const FDynamicMesh3& Mesh, const IDynamicMeshCommitter::FDynamicMeshCommitInfo& CommitInfo)
{
FConversionToMeshDescriptionOptions ConversionOptions;
ConversionOptions.bSetPolyGroups = CommitInfo.bPolygroupsChanged;
ConversionOptions.bUpdatePositions = CommitInfo.bPositionsChanged;
ConversionOptions.bUpdateNormals = CommitInfo.bNormalsChanged;
ConversionOptions.bUpdateTangents = CommitInfo.bTangentsChanged;
ConversionOptions.bUpdateUVs = CommitInfo.bUVsChanged;
ConversionOptions.bUpdateVtxColors = CommitInfo.bVertexColorsChanged;
ConversionOptions.bTransformVtxColorsSRGBToLinear = CommitInfo.bTransformVertexColorsSRGBToLinear;
FDynamicMeshToMeshDescription Converter(ConversionOptions);
if (!CommitInfo.bTopologyChanged)
{
Converter.UpdateUsingConversionOptions(&Mesh, CurrentMeshDescription);
}
else
{
// Do a full conversion.
Converter.Convert(&Mesh, CurrentMeshDescription);
}
MeshDescriptionCommitter.CommitMeshDescription(MoveTemp(CurrentMeshDescription));
}