Geometry Tools: Simplification Tool - Respect UV mirroring seams. This is done by detecting attribute seams associated all "normal" attributes, these include tangent or bitangent attributes if they exist.

#jira none
#rb jimmy.andrews
#rnx

[CL 15146829 by David Hill in ue5-main branch]
This commit is contained in:
David Hill
2021-01-20 14:44:42 -04:00
parent ad05268f10
commit 76d7f494e6
2 changed files with 21 additions and 4 deletions

View File

@@ -137,13 +137,18 @@ FMeshConstraintsUtil::ConstrainAllBoundariesAndSeams(FMeshConstraints& Constrain
};
bool bHasSeamEnd = false;
for (int i = 0; i < Attributes->NumUVLayers(); ++i)
for (int32 i = 0; !bHasSeamEnd && (i < Attributes->NumUVLayers()); ++i)
{
bool bIsEnd = IsSeamWithEnd(*Attributes->GetUVLayer(i));
bHasSeamEnd = bHasSeamEnd || bIsEnd;
}
bHasSeamEnd = bHasSeamEnd || IsSeamWithEnd(*Attributes->PrimaryNormals());
for (int32 i = 0; !bHasSeamEnd && (i < Attributes->NumNormalLayers()); ++i)
{
bool bIsEnd = IsSeamWithEnd(*Attributes->GetNormalLayer(i));
bHasSeamEnd = bHasSeamEnd || bIsEnd;
}
if (bHasSeamEnd)
{

View File

@@ -12,6 +12,7 @@
#include "MeshDescriptionToDynamicMesh.h"
#include "DynamicMeshToMeshDescription.h"
#include "AssetUtils/MeshDescriptionUtil.h"
#include "AssetGenerationUtil.h"
@@ -118,10 +119,21 @@ void USimplifyMeshTool::Setup()
auto EnterProgressFrame = [](int Progress) {};
#endif
OriginalMeshDescription = MakeShared<FMeshDescription>(*ComponentTarget->GetMesh());
// make sure the mesh description has tangents.
{
// if the source was imported with auto-generate tangents, the mesh description tangents won't have been populated
FMeshBuildSettings BuildSettings;
BuildSettings.bRecomputeNormals = true;
BuildSettings.bRecomputeTangents = true;
// this will only generate tangents if the mesh description was missing them
UE::MeshDescription::InitializeAutoGeneratedAttributes(*OriginalMeshDescription, &BuildSettings);
}
EnterProgressFrame(1);
OriginalMesh = MakeShared<FDynamicMesh3>();
FMeshDescriptionToDynamicMesh Converter;
Converter.Convert(ComponentTarget->GetMesh(), *OriginalMesh);
FMeshDescriptionToDynamicMesh Converter;
// convert with tangent overlay
const bool bUseTangents = true;
Converter.Convert(ComponentTarget->GetMesh(), *OriginalMesh, bUseTangents);
EnterProgressFrame(2);
OriginalMeshSpatial = MakeShared<FDynamicMeshAABBTree3>(OriginalMesh.Get(), true);
}