GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
// Copyright Epic Games, Inc. All Rights Reserved.
# include "GeometryScript/CreateNewAssetUtilityFunctions.h"
# include "DynamicMesh/DynamicMesh3.h"
2023-03-08 12:33:57 -05:00
# include "DynamicMesh/DynamicVertexSkinWeightsAttribute.h"
# include "DynamicMesh/DynamicBoneAttribute.h"
2023-06-26 10:17:13 -04:00
# include "DynamicMesh/MeshBones.h"
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
# include "UDynamicMesh.h"
# include "Engine/StaticMesh.h"
# include "Engine/SkeletalMesh.h"
# include "Engine/StaticMeshActor.h"
2023-03-08 12:33:57 -05:00
# include "Animation/Skeleton.h"
# include "ReferenceSkeleton.h"
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
# include "StaticMeshAttributes.h"
# include "StaticMeshOperations.h"
# include "RenderingThread.h"
# include "Engine/BlockingVolume.h"
# include "Components/BrushComponent.h"
# include "Engine/Polys.h"
# include "Model.h"
# include "BSPOps.h" // in UnrealEd
# include "Editor/EditorEngine.h" // for FActorLabelUtilities
# include "Editor.h"
2022-05-02 18:59:38 -04:00
# include "AssetRegistry/AssetRegistryModule.h"
2021-10-13 21:45:08 -04:00
# include "Misc/Paths.h"
2023-01-27 23:12:40 -05:00
# include "PackageTools.h"
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
# include "ConversionUtils/DynamicMeshToVolume.h"
# include "AssetUtils/CreateStaticMeshUtil.h"
2022-12-06 19:47:20 -05:00
# include "AssetUtils/CreateSkeletalMeshUtil.h"
2022-03-08 15:11:38 -05:00
# include "AssetUtils/CreateTexture2DUtil.h"
2021-10-13 21:45:08 -04:00
# include "ModelingObjectsCreationAPI.h"
2022-12-06 19:47:20 -05:00
# include "Engine/SkinnedAssetCommon.h"
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
2022-09-28 01:06:15 -04:00
# include UE_INLINE_GENERATED_CPP_BY_NAME(CreateNewAssetUtilityFunctions)
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
using namespace UE : : Geometry ;
2021-09-17 14:50:19 -04:00
# define LOCTEXT_NAMESPACE "UGeometryScriptLibrary_CreateNewAssetUtilityFunctions"
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
2023-06-26 10:17:13 -04:00
static bool CreateReferenceSkeletonFromMeshLods ( const TArray < FDynamicMesh3 > & MeshLods , FReferenceSkeleton & RefSkeleton , bool & bOrderChanged )
{
TArray < FName > BoneNames ;
TArray < int32 > BoneParentIdx ;
TArray < FTransform > BonePose ;
if ( ! FMeshBones : : CombineLodBonesToReferenceSkeleton ( MeshLods , BoneNames , BoneParentIdx , BonePose , bOrderChanged ) )
{
return false ;
}
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
2023-06-26 10:17:13 -04:00
FReferenceSkeletonModifier Modifier ( RefSkeleton , nullptr ) ;
2021-10-13 21:45:08 -04:00
2023-06-26 10:17:13 -04:00
for ( int32 BoneIdx = 0 ; BoneIdx < BoneNames . Num ( ) ; + + BoneIdx )
{
Modifier . Add ( FMeshBoneInfo ( BoneNames [ BoneIdx ] , BoneNames [ BoneIdx ] . ToString ( ) , BoneParentIdx [ BoneIdx ] ) , BonePose [ BoneIdx ] ) ;
}
2021-10-13 21:45:08 -04:00
2023-06-26 10:17:13 -04:00
return true ;
}
2021-10-13 21:45:08 -04:00
void UGeometryScriptLibrary_CreateNewAssetFunctions : : CreateUniqueNewAssetPathName (
FString AssetFolderPath ,
FString BaseAssetName ,
FString & UniqueAssetPathAndName ,
FString & UniqueAssetName ,
FGeometryScriptUniqueAssetNameOptions Options ,
2022-12-08 21:19:59 -05:00
EGeometryScriptOutcomePins & Outcome ,
2021-10-13 21:45:08 -04:00
UGeometryScriptDebug * Debug )
{
FAssetRegistryModule & AssetRegistryModule = FModuleManager : : LoadModuleChecked < FAssetRegistryModule > ( " AssetRegistry " ) ;
Outcome = EGeometryScriptOutcomePins : : Failure ;
int Attempts = 0 ;
while ( Attempts + + < 10 )
{
FString UUID = UE : : Modeling : : GenerateRandomShortHexString ( Options . UniqueIDDigits ) ;
UniqueAssetName = FString : : Printf ( TEXT ( " %s_%s " ) , * BaseAssetName , * UUID ) ;
2023-01-27 23:12:40 -05:00
UniqueAssetPathAndName = UPackageTools : : SanitizePackageName ( FPaths : : Combine ( AssetFolderPath , UniqueAssetName ) ) ;
2021-10-13 21:45:08 -04:00
// if asset does not exist at this path, we can use it
2022-09-13 12:20:10 -04:00
FAssetData AssetData = AssetRegistryModule . Get ( ) . GetAssetByObjectPath ( FSoftObjectPath ( UniqueAssetPathAndName ) ) ;
2021-10-13 21:45:08 -04:00
if ( AssetData . IsValid ( ) = = false )
{
Outcome = EGeometryScriptOutcomePins : : Success ;
return ;
}
}
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : OperationFailed , LOCTEXT ( " CreateUniqueNewAssetPathName_Failed " , " Failed to find available unique Asset Path/Name " ) ) ;
}
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
AVolume * UGeometryScriptLibrary_CreateNewAssetFunctions : : CreateNewVolumeFromMesh (
UDynamicMesh * FromDynamicMesh ,
UWorld * CreateInWorld ,
FTransform ActorTransform ,
FString BaseActorName ,
FGeometryScriptCreateNewVolumeFromMeshOptions Options ,
2022-12-08 21:19:59 -05:00
EGeometryScriptOutcomePins & Outcome ,
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
UGeometryScriptDebug * Debug )
{
Outcome = EGeometryScriptOutcomePins : : Failure ;
if ( FromDynamicMesh = = nullptr )
{
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , LOCTEXT ( " CreateNewVolumeFromMesh_InvalidInput1 " , " CreateNewVolumeFromMesh: FromDynamicMesh is Null " ) ) ;
return nullptr ;
}
if ( CreateInWorld = = nullptr )
{
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , LOCTEXT ( " CreateNewVolumeFromMesh_InvalidInput2 " , " CreateNewVolumeFromMesh: CreateInWorld is Null " ) ) ;
return nullptr ;
}
if ( FromDynamicMesh - > GetTriangleCount ( ) < 4 )
{
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , LOCTEXT ( " CreateNewVolumeFromMesh_InvalidInput3 " , " CreateNewVolumeFromMesh: FromDynamicMesh does not define a valid Volume " ) ) ;
return nullptr ;
}
// todo: other safety checks
// spawn new actor
UClass * VolumeClass = ABlockingVolume : : StaticClass ( ) ;
if ( Options . VolumeType ! = nullptr
& & Cast < AVolume > ( Options . VolumeType - > GetDefaultObject ( false ) ) ! = nullptr )
{
VolumeClass = Options . VolumeType ;
}
GEditor - > BeginTransaction ( LOCTEXT ( " CreateNewVolumeFromMesh_Transaction " , " Create Volume " ) ) ;
FActorSpawnParameters SpawnInfo ;
FTransform NewActorTransform = FTransform : : Identity ;
AVolume * NewVolumeActor = ( AVolume * ) CreateInWorld - > SpawnActor ( VolumeClass , & NewActorTransform , SpawnInfo ) ;
NewVolumeActor - > BrushType = EBrushType : : Brush_Add ;
UModel * Model = NewObject < UModel > ( NewVolumeActor ) ;
NewVolumeActor - > Brush = Model ;
NewVolumeActor - > GetBrushComponent ( ) - > Brush = NewVolumeActor - > Brush ;
UE : : Conversion : : FMeshToVolumeOptions ConvertOptions ;
ConvertOptions . bAutoSimplify = true ;
ConvertOptions . MaxTriangles = FMath : : Max ( 1 , Options . MaxTriangles ) ;
FromDynamicMesh - > ProcessMesh ( [ & ] ( const FDynamicMesh3 & ReadMesh )
{
UE : : Conversion : : DynamicMeshToVolume ( ReadMesh , NewVolumeActor , ConvertOptions ) ;
} ) ;
NewVolumeActor - > SetActorTransform ( ActorTransform ) ;
FActorLabelUtilities : : SetActorLabelUnique ( NewVolumeActor , BaseActorName ) ;
NewVolumeActor - > PostEditChange ( ) ;
GEditor - > EndTransaction ( ) ;
Outcome = EGeometryScriptOutcomePins : : Success ;
return NewVolumeActor ;
}
2023-03-08 12:33:57 -05:00
UStaticMesh * UGeometryScriptLibrary_CreateNewAssetFunctions : : CreateNewStaticMeshAssetFromMeshLODs (
TArray < UDynamicMesh * > FromDynamicMeshLODs ,
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
FString AssetPathAndName ,
FGeometryScriptCreateNewStaticMeshAssetOptions Options ,
2022-12-08 21:19:59 -05:00
EGeometryScriptOutcomePins & Outcome ,
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
UGeometryScriptDebug * Debug )
{
Outcome = EGeometryScriptOutcomePins : : Failure ;
2023-03-08 12:33:57 -05:00
if ( FromDynamicMeshLODs . IsEmpty ( ) )
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
{
2023-03-08 12:33:57 -05:00
AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , LOCTEXT ( " CreateNewStaticMeshAssetFromMeshLODs_EmptyLODArray " , " CreateNewStaticMeshAssetFromMeshLODs: LOD array is empty " ) ) ;
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
return nullptr ;
}
2023-03-08 12:33:57 -05:00
for ( int LodIdx = 0 ; LodIdx < FromDynamicMeshLODs . Num ( ) ; + + LodIdx )
{
const UDynamicMesh * FromDynamicMesh = FromDynamicMeshLODs [ LodIdx ] ;
if ( FromDynamicMesh = = nullptr )
{
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , FText : : Format ( LOCTEXT ( " CreateNewStaticMeshAssetFromMeshLODs_LODIsNull " , " CreateNewStaticMeshAssetFromMeshLODs: LOD {0} is Null " ) , FText : : AsNumber ( LodIdx ) ) ) ;
return nullptr ;
}
if ( FromDynamicMesh - > GetTriangleCount ( ) = = 0 )
{
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , FText : : Format ( LOCTEXT ( " CreateNewStaticMeshAssetFromMeshLODs_ZeroTriangles " , " CreateNewStaticMeshAssetFromMeshLODs: LOD {0} has no triangles " ) , FText : : AsNumber ( LodIdx ) ) ) ;
return nullptr ;
}
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
}
// todo: other safety checks
2023-03-08 12:33:57 -05:00
GEditor - > BeginTransaction ( LOCTEXT ( " CreateNewStaticMeshAssetFromMeshLODs_Transaction " , " Create StaticMesh " ) ) ;
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
UE : : AssetUtils : : FStaticMeshAssetOptions AssetOptions ;
2023-01-27 23:12:40 -05:00
AssetPathAndName = UPackageTools : : SanitizePackageName ( AssetPathAndName ) ;
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
AssetOptions . NewAssetPath = AssetPathAndName ;
2023-03-08 12:33:57 -05:00
AssetOptions . NumSourceModels = FromDynamicMeshLODs . Num ( ) ;
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
// CreateStaticMeshAsset below will handle this, but we could allow passing in materials as an option...
//AssetOptions.NumMaterialSlots = CreateMeshParams.Materials.Num();
//AssetOptions.AssetMaterials = (CreateMeshParams.AssetMaterials.Num() == AssetOptions.NumMaterialSlots) ?
// FilterMaterials(CreateMeshParams.AssetMaterials) : FilterMaterials(CreateMeshParams.Materials);
AssetOptions . bEnableRecomputeNormals = Options . bEnableRecomputeNormals ;
AssetOptions . bEnableRecomputeTangents = Options . bEnableRecomputeTangents ;
AssetOptions . bGenerateNaniteEnabledMesh = Options . bEnableNanite ;
2022-09-22 17:36:58 -04:00
AssetOptions . NaniteSettings = Options . NaniteSettings ;
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
AssetOptions . bCreatePhysicsBody = Options . bEnableCollision ;
AssetOptions . CollisionType = Options . CollisionMode ;
2023-03-08 12:33:57 -05:00
/**
* We are making a copy of each LOD mesh since UDynamicMesh can potentially be editable asynchronously in the future ,
* so we should not hold onto the pointer outside the function .
*/
TArray < FDynamicMesh3 > CopyFromDynamicMeshLODs ;
CopyFromDynamicMeshLODs . SetNum ( FromDynamicMeshLODs . Num ( ) ) ;
for ( int LodIdx = 0 ; LodIdx < FromDynamicMeshLODs . Num ( ) ; + + LodIdx )
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
{
2023-03-08 12:33:57 -05:00
const UDynamicMesh * LODMesh = FromDynamicMeshLODs [ LodIdx ] ;
FDynamicMesh3 * CopyLODMesh = & CopyFromDynamicMeshLODs [ LodIdx ] ;
LODMesh - > ProcessMesh ( [ CopyLODMesh ] ( const FDynamicMesh3 & ReadMesh )
{
* CopyLODMesh = ReadMesh ;
} ) ;
AssetOptions . SourceMeshes . DynamicMeshes . Add ( CopyLODMesh ) ;
}
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
UE : : AssetUtils : : FStaticMeshResults ResultData ;
UE : : AssetUtils : : ECreateStaticMeshResult AssetResult = UE : : AssetUtils : : CreateStaticMeshAsset ( AssetOptions , ResultData ) ;
if ( AssetResult ! = UE : : AssetUtils : : ECreateStaticMeshResult : : Ok )
{
2023-03-08 12:33:57 -05:00
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : OperationFailed , LOCTEXT ( " CreateNewStaticMeshAssetFromMeshLODs_Failed " , " CreateNewStaticMeshAssetFromMeshLODs: Failed to create new Asset " ) ) ;
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
return nullptr ;
}
UStaticMesh * NewStaticMesh = ResultData . StaticMesh ;
NewStaticMesh - > PostEditChange ( ) ;
GEditor - > EndTransaction ( ) ;
2021-10-13 21:45:08 -04:00
// publish new asset so that asset editor updates
FAssetRegistryModule : : AssetCreated ( NewStaticMesh ) ;
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
Outcome = EGeometryScriptOutcomePins : : Success ;
return NewStaticMesh ;
}
2023-03-08 12:33:57 -05:00
UStaticMesh * UGeometryScriptLibrary_CreateNewAssetFunctions : : CreateNewStaticMeshAssetFromMesh (
UDynamicMesh * FromDynamicMesh ,
FString AssetPathAndName ,
FGeometryScriptCreateNewStaticMeshAssetOptions Options ,
EGeometryScriptOutcomePins & Outcome ,
UGeometryScriptDebug * Debug )
{
return CreateNewStaticMeshAssetFromMeshLODs ( { FromDynamicMesh } , AssetPathAndName , Options , Outcome , Debug ) ;
}
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
2023-03-08 12:33:57 -05:00
USkeletalMesh * UGeometryScriptLibrary_CreateNewAssetFunctions : : CreateNewSkeletalMeshAssetFromMeshLODs (
TArray < UDynamicMesh * > FromDynamicMeshLODs ,
2022-12-06 19:47:20 -05:00
USkeleton * InSkeleton ,
FString AssetPathAndName ,
FGeometryScriptCreateNewSkeletalMeshAssetOptions Options ,
2022-12-08 21:19:59 -05:00
EGeometryScriptOutcomePins & Outcome ,
2022-12-06 19:47:20 -05:00
UGeometryScriptDebug * Debug )
{
using namespace UE : : AssetUtils ;
Outcome = EGeometryScriptOutcomePins : : Failure ;
2023-03-08 12:33:57 -05:00
if ( FromDynamicMeshLODs . IsEmpty ( ) )
2022-12-06 19:47:20 -05:00
{
2023-03-08 12:33:57 -05:00
AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_EmptyLODArray " , " CreateNewSkeletalMeshAssetFromMeshLODs: FromDynamicMesh array is empty " ) ) ;
2022-12-06 19:47:20 -05:00
return nullptr ;
}
2023-03-08 12:33:57 -05:00
2023-06-26 10:17:13 -04:00
for ( int32 LodIdx = 0 ; LodIdx < FromDynamicMeshLODs . Num ( ) ; + + LodIdx )
2023-03-08 12:33:57 -05:00
{
const UDynamicMesh * FromDynamicMesh = FromDynamicMeshLODs [ LodIdx ] ;
if ( FromDynamicMesh = = nullptr )
{
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , FText : : Format ( LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_LODIsNull " , " CreateNewSkeletalMeshAssetFromMeshLODs: LOD {0} is Null " ) , FText : : AsNumber ( LodIdx ) ) ) ;
return nullptr ;
}
if ( FromDynamicMesh - > GetTriangleCount ( ) = = 0 )
{
AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , FText : : Format ( LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_ZeroTriangles " , " CreateNewSkeletalMeshAssetFromMeshLODs: LOD {0} has no triangles " ) , FText : : AsNumber ( LodIdx ) ) ) ;
return nullptr ;
}
if ( FromDynamicMesh - > GetMeshRef ( ) . HasAttributes ( ) = = false | | FromDynamicMesh - > GetMeshRef ( ) . Attributes ( ) - > GetSkinWeightsAttributes ( ) . Num ( ) = = 0 )
{
AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , FText : : Format ( LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_NoSkinWeights " , " CreateNewSkeletalMeshAssetFromMeshLODs: LOD {0} has no skin weight attributes " ) , FText : : AsNumber ( LodIdx ) ) ) ;
return nullptr ;
}
if ( InSkeleton = = nullptr )
{
AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_NullSkeleton " , " CreateNewSkeletalMeshAssetFromMeshLODs: Skeleton is Null " ) ) ;
return nullptr ;
}
2022-12-13 18:16:43 -05:00
}
2022-12-06 19:47:20 -05:00
// todo: other safety checks
2023-03-08 12:33:57 -05:00
GEditor - > BeginTransaction ( LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_Transaction " , " Create SkeletalMesh " ) ) ;
2022-12-06 19:47:20 -05:00
FSkeletalMeshAssetOptions AssetOptions ;
2023-01-27 23:12:40 -05:00
AssetPathAndName = UPackageTools : : SanitizePackageName ( AssetPathAndName ) ;
2022-12-06 19:47:20 -05:00
AssetOptions . NewAssetPath = AssetPathAndName ;
2022-12-13 18:16:43 -05:00
AssetOptions . Skeleton = InSkeleton ;
2022-12-06 19:47:20 -05:00
2023-03-08 12:33:57 -05:00
AssetOptions . NumSourceModels = FromDynamicMeshLODs . Num ( ) ;
2022-12-06 19:47:20 -05:00
if ( ! Options . Materials . IsEmpty ( ) )
{
TArray < FSkeletalMaterial > Materials ;
for ( const TPair < FName , TObjectPtr < UMaterialInterface > > & Item : Options . Materials )
{
Materials . Add ( FSkeletalMaterial { Item . Value , Item . Key } ) ;
}
AssetOptions . SkeletalMaterials = MoveTemp ( Materials ) ;
AssetOptions . NumMaterialSlots = AssetOptions . SkeletalMaterials . Num ( ) ;
}
else
{
AssetOptions . NumMaterialSlots = 1 ;
}
AssetOptions . bEnableRecomputeNormals = Options . bEnableRecomputeNormals ;
AssetOptions . bEnableRecomputeTangents = Options . bEnableRecomputeTangents ;
2023-03-08 12:33:57 -05:00
/**
* We are making a copy of each LOD mesh since UDynamicMesh can potentially be editable asynchronously in the future ,
* so we should not hold onto the pointer outside the function .
*/
TArray < FDynamicMesh3 > CopyFromDynamicMeshLODs ;
CopyFromDynamicMeshLODs . SetNum ( FromDynamicMeshLODs . Num ( ) ) ;
2023-06-26 10:17:13 -04:00
for ( int32 LodIdx = 0 ; LodIdx < FromDynamicMeshLODs . Num ( ) ; + + LodIdx )
2022-12-06 19:47:20 -05:00
{
2023-03-08 12:33:57 -05:00
const UDynamicMesh * LODMesh = FromDynamicMeshLODs [ LodIdx ] ;
FDynamicMesh3 * CopyLODMesh = & CopyFromDynamicMeshLODs [ LodIdx ] ;
LODMesh - > ProcessMesh ( [ CopyLODMesh ] ( const FDynamicMesh3 & ReadMesh )
{
* CopyLODMesh = ReadMesh ;
} ) ;
}
// Check if all LODs have bone attributes.
2023-06-26 10:17:13 -04:00
int32 LODWithoutBoneAttrib = - 1 ;
for ( int32 Idx = 0 ; Idx < CopyFromDynamicMeshLODs . Num ( ) ; + + Idx )
2023-03-08 12:33:57 -05:00
{
2023-06-26 10:17:13 -04:00
if ( ! CopyFromDynamicMeshLODs [ Idx ] . Attributes ( ) - > HasBones ( ) )
{
LODWithoutBoneAttrib = Idx ;
break ;
}
2023-03-08 12:33:57 -05:00
}
2023-06-26 10:17:13 -04:00
TUniquePtr < FReferenceSkeleton > RefSkeleton = nullptr ;
if ( LODWithoutBoneAttrib > = 0 ) // If at least one LOD doesn't contain the bone attributes then add LOD meshes as is
2023-03-08 12:33:57 -05:00
{
for ( const FDynamicMesh3 & FromDynamicMesh : CopyFromDynamicMeshLODs )
{
AssetOptions . SourceMeshes . DynamicMeshes . Add ( & FromDynamicMesh ) ;
}
2023-06-26 10:17:13 -04:00
if ( Options . bUseMeshBoneProportions )
2023-03-08 12:33:57 -05:00
{
2023-06-26 10:17:13 -04:00
AppendWarning ( Debug , EGeometryScriptErrorType : : InvalidInputs , FText : : Format ( LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_MissingBoneAttributes " , " CreateNewSkeletalMeshAssetFromMeshLODs: Mesh bone proportions were requested, but the LOD {0} has no bone attributes. Proportions will be ignored. " ) , FText : : AsNumber ( LODWithoutBoneAttrib ) ) ) ;
2023-03-08 12:33:57 -05:00
}
2023-06-26 10:17:13 -04:00
}
else // If bone attributes are available then attempt to reindex the weights and if requested create a ReferenceSkeleton
{
TArray < FName > ToSkeleton ; // array of bone names in the final reference skeleton
bool bNeedToReindex = true ; // do we need to re-index the bone weights with respect to the reference skeleton
if ( Options . bUseMeshBoneProportions )
{
// If mesh LODs have bone attributes and the user requested to use mesh bone proportions then we create a
// new reference skeleton by finding the mesh with the largest number of bones and creating reference
// skeleton out of its bone attributes
RefSkeleton = MakeUnique < FReferenceSkeleton > ( ) ;
if ( CreateReferenceSkeletonFromMeshLods ( CopyFromDynamicMeshLODs , * RefSkeleton , bNeedToReindex ) )
{
ToSkeleton = RefSkeleton - > GetRawRefBoneNames ( ) ;
2023-03-08 12:33:57 -05:00
2023-06-26 10:17:13 -04:00
// Asset will now use the custom reference skeleton instead of the InSkeleton reference skeleton
AssetOptions . RefSkeleton = RefSkeleton . Get ( ) ;
}
else
{
// if we failed to get reference skeleton from Lods, fall back to the skeleton asset
ToSkeleton = InSkeleton - > GetReferenceSkeleton ( ) . GetRawRefBoneNames ( ) ;
AppendWarning ( Debug , EGeometryScriptErrorType : : InvalidInputs , LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_FailedToCombineBoneAttributesForLods " , " CreateNewSkeletalMeshAssetFromMeshLODs: Failed to combine the bone attributes for the Lods. Skeleton asset will be used instead. " ) ) ;
}
}
else
{
ToSkeleton = InSkeleton - > GetReferenceSkeleton ( ) . GetRawRefBoneNames ( ) ;
}
for ( int32 LodIdx = 0 ; LodIdx < CopyFromDynamicMeshLODs . Num ( ) ; + + LodIdx )
2023-03-08 12:33:57 -05:00
{
FDynamicMesh3 & FromDynamicMesh = CopyFromDynamicMeshLODs [ LodIdx ] ;
2023-06-26 10:17:13 -04:00
if ( bNeedToReindex ) // potentially need to re-index the weights
2023-03-08 12:33:57 -05:00
{
2023-06-26 10:17:13 -04:00
FDynamicMeshAttributeSet * AttribSet = FromDynamicMesh . Attributes ( ) ;
// Check if the skeleton we are trying to bind the mesh to is the same as the current mesh skeleton.
const TArray < FName > & FromSkeleton = AttribSet - > GetBoneNames ( ) - > GetAttribValues ( ) ;
if ( FromSkeleton ! = ToSkeleton )
2023-03-08 12:33:57 -05:00
{
2023-06-26 10:17:13 -04:00
for ( const TPair < FName , TUniquePtr < FDynamicMeshVertexSkinWeightsAttribute > > & Entry : AttribSet - > GetSkinWeightsAttributes ( ) )
2023-03-08 12:33:57 -05:00
{
2023-06-26 10:17:13 -04:00
FDynamicMeshVertexSkinWeightsAttribute * SkinWeightAttrib = Entry . Value . Get ( ) ;
// Reindex the bone indices
if ( SkinWeightAttrib - > ReindexBoneIndicesToSkeleton ( FromSkeleton , ToSkeleton ) = = false )
{
AppendError ( Debug , EGeometryScriptErrorType : : OperationFailed , FText : : Format ( LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_FailedReindexing " , " CreateNewSkeletalMeshAssetFromMeshLODs: LOD {0} has invalid skinning data or the bone data is not compatible with the specified skeleton. " ) , FText : : AsNumber ( LodIdx ) ) ) ;
return nullptr ;
}
2023-03-08 12:33:57 -05:00
}
}
}
AssetOptions . SourceMeshes . DynamicMeshes . Add ( & FromDynamicMesh ) ;
}
}
2022-12-06 19:47:20 -05:00
FSkeletalMeshResults ResultData ;
const ECreateSkeletalMeshResult AssetResult = CreateSkeletalMeshAsset ( AssetOptions , ResultData ) ;
if ( AssetResult ! = ECreateSkeletalMeshResult : : Ok )
{
2023-03-08 12:33:57 -05:00
AppendError ( Debug , EGeometryScriptErrorType : : OperationFailed , LOCTEXT ( " CreateNewSkeletalMeshAssetFromMeshLODs_Failed " , " CreateNewSkeletalMeshAssetFromMeshLODs: Failed to create new Asset " ) ) ;
2022-12-06 19:47:20 -05:00
return nullptr ;
}
GEditor - > EndTransaction ( ) ;
// publish new asset so that asset editor updates
FAssetRegistryModule : : AssetCreated ( ResultData . SkeletalMesh ) ;
Outcome = EGeometryScriptOutcomePins : : Success ;
return ResultData . SkeletalMesh ;
}
2023-03-08 12:33:57 -05:00
USkeletalMesh * UGeometryScriptLibrary_CreateNewAssetFunctions : : CreateNewSkeletalMeshAssetFromMesh (
UDynamicMesh * FromDynamicMeshLODs ,
USkeleton * InSkeleton ,
FString AssetPathAndName ,
FGeometryScriptCreateNewSkeletalMeshAssetOptions Options ,
EGeometryScriptOutcomePins & Outcome ,
UGeometryScriptDebug * Debug )
{
return CreateNewSkeletalMeshAssetFromMeshLODs ( { FromDynamicMeshLODs } , InSkeleton , AssetPathAndName , Options , Outcome , Debug ) ;
}
2022-03-08 15:11:38 -05:00
UTexture2D * UGeometryScriptLibrary_CreateNewAssetFunctions : : CreateNewTexture2DAsset (
UTexture2D * FromTexture ,
FString AssetPathAndName ,
FGeometryScriptCreateNewTexture2DAssetOptions Options ,
2022-12-08 21:19:59 -05:00
EGeometryScriptOutcomePins & Outcome ,
2022-03-08 15:11:38 -05:00
UGeometryScriptDebug * Debug )
{
Outcome = EGeometryScriptOutcomePins : : Failure ;
if ( FromTexture = = nullptr )
{
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , LOCTEXT ( " CreateNewTexture2DAsset_InvalidInput1 " , " CreateNewTexture2DAsset: FromTexture is Null " ) ) ;
return nullptr ;
}
UE : : AssetUtils : : FTexture2DAssetOptions AssetOptions ;
2023-01-27 23:12:40 -05:00
AssetPathAndName = UPackageTools : : SanitizePackageName ( AssetPathAndName ) ;
2022-03-08 15:11:38 -05:00
AssetOptions . NewAssetPath = AssetPathAndName ;
AssetOptions . bOverwriteIfExists = Options . bOverwriteIfExists ;
UE : : AssetUtils : : FTexture2DAssetResults ResultData ;
UE : : AssetUtils : : ECreateTexture2DResult AssetResult = UE : : AssetUtils : : SaveGeneratedTexture2DAsset (
FromTexture , AssetOptions , ResultData ) ;
switch ( AssetResult )
{
case UE : : AssetUtils : : ECreateTexture2DResult : : NameError :
{
const FText Error = FText : : Format ( LOCTEXT ( " CreateNewTexture2DAsset_InvalidInputName " , " CreateNewTexture2DAsset: AssetPathAndName '{0}' already exists. " ) , FText : : FromString ( AssetPathAndName ) ) ;
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , Error ) ;
break ;
}
case UE : : AssetUtils : : ECreateTexture2DResult : : OverwriteTypeError :
{
const FText Error = FText : : Format ( LOCTEXT ( " CreateNewTexture2DAsset_InvalidOverwriteType " , " CreateNewTexture2DAsset: AssetPathAndName '{0}' already exists and is not a UTexture2D. " ) , FText : : FromString ( AssetPathAndName ) ) ;
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , Error ) ;
break ;
}
case UE : : AssetUtils : : ECreateTexture2DResult : : InvalidInputTexture :
{
const FText Error = FText : : Format ( LOCTEXT ( " CreateNewTexture2DAsset_InvalidInputPackage " , " CreateNewTexture2DAsset: Failed to read input texture '{0}'. " ) , FText : : FromString ( FromTexture - > GetPathName ( ) ) ) ;
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : InvalidInputs , Error ) ;
break ;
}
case UE : : AssetUtils : : ECreateTexture2DResult : : InvalidPackage :
case UE : : AssetUtils : : ECreateTexture2DResult : : UnknownError :
{
UE : : Geometry : : AppendError ( Debug , EGeometryScriptErrorType : : OperationFailed , LOCTEXT ( " CreateNewTexture2DAsset_Failed " , " CreateNewTexture2DAsset: Failed to create new Asset. " ) ) ;
break ;
}
case UE : : AssetUtils : : ECreateTexture2DResult : : Ok :
{
Outcome = EGeometryScriptOutcomePins : : Success ;
break ;
}
}
return ResultData . Texture ;
}
GeometryScript: continue building out library (still at the trivial-wrappers stage)
- ComputeMeshConvexHull, ComputeMeshSweptHull
- CreateNewVolumeFromMesh, CreateNewStaticMeshAssetFromMesh
- DeleteVerticesFromMesh, DeleteTrianglesFromMesh, AppendBuffersToMesh
- AppendSimpleExtrudePolygon, AppendTriangulatedPolygon, hole parameter for Append Disc (to make punctured disc)
- IsSameMeshAs, MeasureDistancesBetweenMeshes, IsIntersectingMesh
- SplitMeshByComponents, SplitMeshByMaterialIDs, GetSubMeshFromMesh, CopyMeshToMesh
- ApplyFlareWarpToMesh, changed other warps to use FTransform for orientation instead of multiple axis parameters
- GetHasMaterialIDs, GetMaxMaterialID, EnableMaterialIDs, ClearMaterialIDs, RemapMaterialIDs, GetTriangleMaterialID, GetAllTriangleMaterialIDs, SetTriangleMaterialID, SetAllTriangleMaterialIDs
- SetNumUVSets, TranslateMeshUVs, ScaleMeshUVs, RotateMeshUVs, SetMeshUVsFromPlanarProjection, SetMeshUVsFromBoxProjection, RepackMeshUVs
- GetNumConnectedComponents, GetAllVertexPositions
- aded FGeometryScriptDynamicMeshBVH wrapper for AABBTree & FWNTree. Somewhat risky but avoids a UObject wrapper, and these objects are (currently) intended to have a lifetime that does not extend outside a single BP
- BuildBVHForMesh, IsBVHValidForMesh, RebuildBVHForMesh, FindNearestPointOnMesh, FindNearestRayIntersectionWithMesh, IsPointInsideMesh
#rb none
#rnx
#jira none
#preflight 6142c4d4599fd8000183db48
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17537493 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17537531 by ryan schmidt in ue5-release-engine-test branch]
2021-09-16 08:29:36 -04:00
2022-09-28 01:06:15 -04:00
# undef LOCTEXT_NAMESPACE