UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SkeletalMeshMerge.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 SkeletalMeshMerge.h: Merging of unreal skeletal mesh objects.
5=============================================================================*/
6
7/*-----------------------------------------------------------------------------
8FSkeletalMeshMerge
9-----------------------------------------------------------------------------*/
10
11#pragma once
12
13#include "CoreMinimal.h"
14#include "Engine/EngineTypes.h"
15#include "ReferenceSkeleton.h"
16#include "Components.h"
17
18#include "SkeletalMeshMerge.generated.h"
19
21class USkeletalMesh;
23class USkeleton;
26
28{
29 public:
30
32 {
33 BoneOnly, // Override the bone only.
34 ChildrenOnly, // Override the bone's children only.
35 BoneAndChildren, // Override both the bone & children.
37 };
38
43 {
44 this->SkeletalMesh = ReferenceMesh;
45 }
46
50 void AddOverride(FName BoneName, EBoneOverrideMode OverrideMode = BoneOnly)
51 {
52 FBoneOverrideInfo OverrideInfo;
53 OverrideInfo.BoneName = BoneName;
54 OverrideInfo.OverrideMode = OverrideMode;
55
56 Overrides.Add(OverrideInfo);
57 }
58
59 private:
60
61 struct FBoneOverrideInfo
62 {
64 FName BoneName;
65
67 EBoneOverrideMode OverrideMode;
68 };
69
71 const USkeletalMesh* SkeletalMesh;
72
75
76 friend class FSkeletalMeshMerge;
77};
78
83USTRUCT(BlueprintType)
85{
87
88
89 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Mesh Merge Parameters")
90 TArray<int32> SectionIDs;
91};
92
93USTRUCT(BlueprintType)
95{
97
98
99 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Mesh Merge Parameters")
100 TArray<FTransform> UVTransforms;
101};
102
107{
109 TArray<TArray<FTransform>> UVTransformsPerMesh;
110};
111
115USTRUCT(BlueprintType)
117{
119
120
121 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Mesh Merge Parameters")
123};
124
129{
130public:
144 int32 StripTopLODs,
147 );
148
149 UE_DEPRECATED(5.0, "FSkelMeshMergeUVTransforms has been replaced with FSkelMeshMergeMeshUVTransforms, use different signature")
154 int32 StripTopLODs,
155 EMeshBufferAccess MeshBufferAccess,
159 );
160
164
171
178
185
186private:
188 USkeletalMesh* MergeMesh;
189
191 TArray<USkeletalMesh*> SrcMeshList;
192
194 int32 StripTopLODs;
195
197 EMeshBufferAccess MeshBufferAccess;
198
200 struct FMergeMeshInfo
201 {
203 TArray<int32> SrcToDestRefSkeletonMap;
204 };
205
207 TArray<FMergeMeshInfo> SrcMeshInfo;
208
210 FReferenceSkeleton NewRefSkeleton;
211
213 const TArray<FSkelMeshMergeSectionMapping>& ForceSectionMapping;
214
216 const FSkelMeshMergeUVTransformMapping* SectionUVTransforms;
217
218 UE_DEPRECATED(5.0, "Used to facilitate backwards compatibility with old constructor")
219 FSkelMeshMergeUVTransformMapping DummySectionUVTransforms;
220
222 TArray<int32> MaterialIds;
223
225 struct FMergeSectionInfo
226 {
228 const USkeletalMesh* SkelMesh;
230 const FSkelMeshRenderSection* Section;
232 TArray<FBoneIndexType> BoneMapToMergedBoneMap;
234 TArray<FTransform> UVTransforms;
235
237 : SkelMesh(InSkelMesh)
238 , Section(InSection)
239 , UVTransforms(InUVTransforms)
240 {}
241 };
242
244 struct FNewSectionInfo
245 {
247 TArray<FMergeSectionInfo> MergeSections;
249 TArray<FBoneIndexType> MergedBoneMap;
252
258
260 FName SlotName;
261
263 FMeshUVChannelInfo UVChannelData;
264
268 , SlotName(InSlotName)
269 , UVChannelData(InUVChannelData)
270 {}
271 };
272
280 ENGINE_API void MergeBoneMap( TArray<FBoneIndexType>& MergedBoneMap, TArray<FBoneIndexType>& BoneMapToMergedBoneMap, const TArray<FBoneIndexType>& BoneMap );
281
286 template<typename VertexDataType>
287 void GenerateLODModel( int32 LODIdx);
288
294 ENGINE_API void GenerateNewSectionArray( TArray<FNewSectionInfo>& NewSectionArray, int32 LODIdx );
295
300 ENGINE_API bool ProcessMergeMesh();
301
305 ENGINE_API int32 CalculateLodCount(const TArray<USkeletalMesh*>& SourceMeshList) const;
306
310 static ENGINE_API void BuildReferenceSkeleton(const TArray<USkeletalMesh*>& SourceMeshList, FReferenceSkeleton& RefSkeleton, const USkeleton* SkeletonAsset);
311
315 static ENGINE_API void OverrideReferenceSkeletonPose(const TArray<FRefPoseOverride>& PoseOverrides, FReferenceSkeleton& TargetSkeleton, const USkeleton* SkeletonAsset);
316
321 static ENGINE_API bool OverrideReferenceBonePose(int32 SourceBoneIndex, const FReferenceSkeleton& SourceSkeleton, FReferenceSkeletonModifier& TargetSkeleton);
322
326 ENGINE_API void ReleaseResources(int32 Slack = 0);
327
332 ENGINE_API bool AddSocket(const USkeletalMeshSocket* NewSocket, bool bIsSkeletonSocket);
333
338
342 ENGINE_API void BuildSockets(const TArray<USkeletalMesh*>& SourceMeshList);
343
344 //void OverrideSockets(const TArray<FRefPoseOverride>& PoseOverrides);
345
349 ENGINE_API void OverrideSocket(const USkeletalMeshSocket* SourceSocket);
350
354 ENGINE_API void OverrideBoneSockets(const FName& BoneName, const TArray<USkeletalMeshSocket*>& SourceSocketList);
355
359 ENGINE_API void OverrideMergedSockets(const TArray<FRefPoseOverride>& PoseOverrides);
360
361 /*
362 * Copy Vertex Buffer from Source LOD Model
363 */
364 template<typename VertexDataType>
365 void CopyVertexFromSource(VertexDataType& DestVert, const FSkeletalMeshLODRenderData& SrcLODData, int32 SourceVertIdx, const FMergeSectionInfo& MergeSectionInfo);
366};
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EMeshBufferAccess
Definition EngineTypes.h:4230
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition SkeletalMeshLODRenderData.h:128
Definition SkeletalMeshMerge.h:129
ENGINE_API bool FinalizeMesh()
Definition SkeletalMeshMerge.cpp:144
ENGINE_API PRAGMA_ENABLE_DEPRECATION_WARNINGS bool DoMerge(TArray< FRefPoseOverride > *RefPoseOverrides=nullptr)
ENGINE_API void MergeSkeleton(const TArray< FRefPoseOverride > *RefPoseOverrides=nullptr)
Definition SkeletalMeshMerge.cpp:113
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition MaterialInterface.h:296
Definition SkeletalMeshSocket.h:14
Definition SkeletalMesh.h:440
Definition Skeleton.h:295
Definition MeshUVChannelInfo.h:13
Definition SkeletalMeshMerge.h:28
void AddOverride(FName BoneName, EBoneOverrideMode OverrideMode=BoneOnly)
Definition SkeletalMeshMerge.h:50
FRefPoseOverride(const USkeletalMesh *ReferenceMesh)
Definition SkeletalMeshMerge.h:42
EBoneOverrideMode
Definition SkeletalMeshMerge.h:32
@ MAX
Definition SkeletalMeshMerge.h:36
@ ChildrenOnly
Definition SkeletalMeshMerge.h:34
@ BoneOnly
Definition SkeletalMeshMerge.h:33
@ BoneAndChildren
Definition SkeletalMeshMerge.h:35
Definition ReferenceSkeleton.h:65
Definition ReferenceSkeleton.h:100
Definition SkeletalMeshMerge.h:95
Definition SkeletalMeshMerge.h:85
Definition SkeletalMeshMerge.h:117
Definition SkeletalMeshLODRenderData.h:28