UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SkeletalMesh.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
13#include "EngineDefines.h"
14#include "EngineTypes.h"
17#include "Misc/EnumClassFlags.h"
20#include "ReferenceSkeleton.h"
21#include "RenderCommandFence.h"
24#include "SkinnedAsset.h"
25#include "SkinnedAssetCommon.h"
27#include "UObject/Object.h"
29
30#include "SkeletalMesh.generated.h"
31
32#define UE_API ENGINE_API
33
34class UAnimInstance;
35class UAnimSequence;
36class UAssetUserData;
37class UBlueprint;
38class UBodySetup;
40class UMeshDeformer;
42class UPhysicsAsset;
52class FSkinnedAssetAsyncBuildWorker;
57class USkeleton;
58class UThumbnailInfo;
59class FEvent;
60class USkeletalMesh;
67struct FMeshDescription;
68
69/*-----------------------------------------------------------------------------
70 Async Skeletal Mesh Compilation
71-----------------------------------------------------------------------------*/
72
73UENUM()
75{
76 None = 0,
77 Materials = 1 << 0,
78 Skeleton = 1 << 1,
79 RefSkeleton = 1 << 2,
80 RetargetBasePose = 1 << 3,
81 RefBasesInvMatrix = 1 << 4,
82 MeshClothingAssets = 1 << 5,
83 SourceModels = 1 << 6,
85 LODSettings = 1 << 8,
86 HasVertexColors = 1 << 9,
87 VertexColorGuid = 1 << 10,
88 MorphTargets = 1 << 11,
89 SkeletalMeshRenderData = 1 << 12,
90 MeshEditorDataObject = 1 << 13,
91 NeverStream = 1 << 14,
93 SupportLODStreaming = 1 << 16,
94 MaxNumStreamedLODs = 1 << 17,
95 MaxNumOptionalLODs = 1 << 18,
96 ImportedModel = 1 << 19,
97 // Spare = 1 << 20,
98 SkinWeightProfiles = 1 << 21,
100 SamplingInfo = 1 << 23,
101 NodeMappingData = 1 << 24,
102 ShadowPhysicsAsset = 1 << 25,
103 SkelMirrorTable = 1 << 26,
104 MinLod = 1 << 27,
106 SkelMirrorAxis = 1 << 29,
107 SkelMirrorFlipAxis = 1 << 30,
108 DefaultAnimationRig = 1llu << 31,
109 NegativeBoundsExtension = 1llu << 32,
110 PositiveBoundsExtension = 1llu << 33,
111 ExtendedBounds = 1llu << 34,
112 // Spare = 1llu << 35,
113 EnablePerPolyCollision = 1llu << 36,
114 BodySetup = 1llu << 37,
115 MorphTargetIndexMap = 1llu << 38,
116 FloorOffset = 1llu << 39,
117 ImportedBounds = 1llu << 40,
118 PhysicsAsset = 1llu << 41,
119 AssetImportData = 1llu << 42,
120 ThumbnailInfo = 1llu << 43,
121 HasCustomDefaultEditorCamera = 1llu << 44,
122 DefaultEditorCameraLocation = 1llu << 45,
123 DefaultEditorCameraRotation = 1llu << 46,
125 PostProcessAnimBlueprint = 1llu << 48,
126 DefaultEditorCameraLookAt = 1llu << 49,
128 DefaultEditorCameraOrthoZoom = 1llu << 51,
130 bSupportRayTracing = 1llu << 53,
131 RayTracingMinLOD = 1llu << 54,
132 ClothLODBiasMode = 1llu << 55,
133 DefaultMeshDeformer = 1llu << 56,
134 OverlayMaterial = 1llu << 57,
136 TargetMeshDeformers = 1llu << 59,
138};
139
141
142
143using FSkeletalMeshCompilationContext UE_DEPRECATED(5.1, "Use FSkinnedAssetCompilationContext instead.") = FSkinnedAssetCompilationContext;
144using FSkeletalMeshPostLoadContext UE_DEPRECATED(5.1, "Use FSkinnedAssetPostLoadContext instead.") = FSkinnedAssetPostLoadContext;
145using FSkeletalMeshBuildContext UE_DEPRECATED(5.1, "Use FSkinnedAssetBuildContext instead.") = FSkinnedAssetBuildContext;
146#if WITH_EDITOR
147using FSkeletalMeshAsyncBuildScope UE_DEPRECATED(5.1, "Use FSkinnedAssetAsyncBuildScope instead.") = FSkinnedAssetAsyncBuildScope;
148using FSkeletalMeshAsyncBuildWorker UE_DEPRECATED(5.1, "Use FSkinnedAssetAsyncBuildWorker instead.") = FSkinnedAssetAsyncBuildWorker;
149using FSkeletalMeshAsyncBuildTask UE_DEPRECATED(5.1, "Use FSkinnedAssetAsyncBuildTask instead.") = FSkinnedAssetAsyncBuildTask;
150#endif
151
152struct UE_DEPRECATED(5.0, "FBoneMirrorInfo is deprecated. Please use UMirrorDataTable for mirroring support.") FBoneMirrorInfo;
153USTRUCT()
155{
157
158
159 UPROPERTY(EditAnywhere, Category=BoneMirrorInfo, meta=(ArrayClamp = "RefSkeleton"))
160 int32 SourceIndex;
161
163 UPROPERTY(EditAnywhere, Category=BoneMirrorInfo)
164 TEnumAsByte<EAxis::Type> BoneFlipAxis;
165
167 : SourceIndex(0)
168 , BoneFlipAxis(0)
169 {
170 }
171
172};
173
174struct UE_DEPRECATED(5.0, "FBoneMirrorExport is deprecated. Please use UMirrorDataTable for mirroring support.") FBoneMirrorExport;
175USTRUCT()
177{
179
180 UPROPERTY(EditAnywhere, Category=BoneMirrorExport)
181 FName BoneName;
182
183 UPROPERTY(EditAnywhere, Category=BoneMirrorExport)
184 FName SourceBoneName;
185
186 UPROPERTY(EditAnywhere, Category=BoneMirrorExport)
187 TEnumAsByte<EAxis::Type> BoneFlipAxis;
188
189
191 : BoneFlipAxis(0)
192 {
193 }
194
195};
196
198USTRUCT()
200{
202
204
205 // Target asset when importing LODs
206 UPROPERTY(EditAnywhere, Category = Target)
208
209 // Target LOD to import to when importing LODs
210 UPROPERTY(EditAnywhere, Category = Target)
211 int32 TargetLod;
212
213 // If reimporting, this will map the old LOD parameters to the new LOD mesh.
214 // If adding a new LOD this will map the parameters from the preceeding LOD.
215 UPROPERTY(EditAnywhere, Category = Target)
216 bool bRemapParameters;
217
218 // Name of the clothing asset
219 UPROPERTY(EditAnywhere, Category = Basic)
220 FString AssetName;
221
222 // LOD to extract the section from
223 UPROPERTY(EditAnywhere, Category = Basic)
224 int32 LodIndex;
225
226 // Section within the specified LOD to extract
227 UPROPERTY(EditAnywhere, Category = Basic)
228 int32 SourceSection;
229
230 // Whether or not to leave this section behind (if driving a mesh with itself). Enable this if driving a high poly mesh with a low poly
231 UPROPERTY(EditAnywhere, Category = Basic)
232 bool bRemoveFromMesh;
233
234 // Physics asset to extract collisions from, note this will only extract spheres and Sphyls, as that is what the simulation supports.
235 UPROPERTY(EditAnywhere, Category = Collision)
237};
238
242USTRUCT()
244{
246
247 UPROPERTY()
248 float VerticalResistance;
249 UPROPERTY()
250 float HorizontalResistance;
251 UPROPERTY()
252 float BendResistance;
253 UPROPERTY()
254 float ShearResistance;
255 UPROPERTY()
256 float Friction;
257 UPROPERTY()
258 float Damping;
259 UPROPERTY()
260 float TetherStiffness;
261 UPROPERTY()
262 float TetherLimit;
263 UPROPERTY()
264 float Drag;
265 UPROPERTY()
266 float StiffnessFrequency;
267 UPROPERTY()
268 float GravityScale;
269 UPROPERTY()
270 float MassScale;
271 UPROPERTY()
272 float InertiaBlend;
273 UPROPERTY()
274 float SelfCollisionThickness;
275 UPROPERTY()
276 float SelfCollisionSquashScale;
277 UPROPERTY()
278 float SelfCollisionStiffness;
279 UPROPERTY()
280 float SolverFrequency;
281 UPROPERTY()
282 float FiberCompression;
283 UPROPERTY()
284 float FiberExpansion;
285 UPROPERTY()
286 float FiberResistance;
287
289 : VerticalResistance(0.f)
290 , HorizontalResistance(0.f)
291 , BendResistance(0.f)
292 , ShearResistance(0.f)
293 , Friction(0.f)
294 , Damping(0.f)
295 , TetherStiffness(0.f)
296 , TetherLimit(0.f)
297 , Drag(0.f)
298 , StiffnessFrequency(0.f)
299 , GravityScale(0.f)
300 , MassScale(0.f)
301 , InertiaBlend(0.f)
302 , SelfCollisionThickness(0.f)
303 , SelfCollisionSquashScale(0.f)
304 , SelfCollisionStiffness(0.f)
305 , SolverFrequency(0.f)
306 , FiberCompression(0.f)
307 , FiberExpansion(0.f)
308 , FiberResistance(0.f)
309 {
310 }
311};
312
313
314// Legacy struct for handling back compat serialization
315USTRUCT()
317{
319
320 UPROPERTY()
321 FName AssetName;
322 UPROPERTY()
323 FString ApexFileName;
324 UPROPERTY()
325 bool bClothPropertiesChanged;
326 UPROPERTY()
328
330 : bClothPropertiesChanged(false), PhysicsProperties()
331 {
332 }
333
334 // serialization
336};
337
342UENUM()
344{
345 // Only store the strict minimum amount of cloth deformer mappings to save on memory usage.
346 // Raytracing of cloth elements must never be of a different LOD to the one being rendered when using this mode.
348
349 // Store additional cloth deformer mappings to allow raytracing of the cloth elements at RayTracingMinLOD.
350 // Raytracing of cloth elements must never be of a different LOD to the one being rendered, or to the one set in RayTracingMinLOD when using this mode.
352
353 // Store all cloth deformer mappings at the expense of memory usage, to allow raytracing of the cloth elements at any higher LOD.
354 // Use this mode when the RayTracing LODBias console variable is in use.
356};
357
358#if WITH_EDITOR
361
362#endif
363
364#if WITH_EDITORONLY_DATA
366{
368 {
369 static FText GeoAndSkinningText = (NSLOCTEXT("FBXReimport", "ImportContentTypeAll", "Geometry and Skinning Weights"));
370 return GeoAndSkinningText;
371 }
372
373 inline FText GeometryText()
374 {
375 static FText GeometryText = (NSLOCTEXT("FBXReimport", "ImportContentTypeGeometry", "Geometry"));
376 return GeometryText;
377 }
378 inline FText SkinningText()
379 {
380 static FText SkinningText = (NSLOCTEXT("FBXReimport", "ImportContentTypeSkinning", "Skinning Weights"));
381 return SkinningText;
382 }
383
384 inline const FString& GeoAndSkinningMetaDataValue()
385 {
386 static FString GeoAndSkinningName(TEXT("All"));
387 return GeoAndSkinningName;
388 }
389
390 inline const FString& GeometryMetaDataValue()
391 {
392 static FString GeometryName(TEXT("Geometry"));
393 return GeometryName;
394 }
395
396 inline const FString& SkinningMetaDataValue()
397 {
398 static FString SkinningName(TEXT("SkinningWeights"));
399 return SkinningName;
400 }
401
403 {
404 static FName SkeletalMeshLastImportContentTypeMetadataKey("SkeletalMeshLastImportContentTypeMetadataKey");
406 }
407}
408#endif
409
410/* Scoped SkeletalMeshRenderData
411 * All to get access to SkeletalMeshRenderData for a given platform an ensuring the data are thread-safe during the entire scope
412 */
414{
415public:
416 UE_DEPRECATED(5.4, "This class is deprecated, there is no replacement because this is not a safe async design.")
418
420
421 UE_DEPRECATED(5.4, "This class is deprecated, there is no replacement because this is not a safe async design.")
423private:
424 FEvent* Lock = nullptr;
425 USkeletalMesh* Mesh = nullptr;
426 FSkeletalMeshRenderData* Data = nullptr;
427
429};
430
438UCLASS(hidecategories=Object, BlueprintType, MinimalAPI)
440{
442
443 // This is declared so we can use TUniquePtr<FSkeletalMeshRenderData> with just a forward declare of that class
445 ENGINE_API virtual ~USkeletalMesh() override;
446
447#if WITH_EDITOR
450#endif
451private:
453 UE_DEPRECATED(5.4, "This must be protected for async build, always use the accessors even internally.")
454 UPROPERTY(EditAnywhere, EditFixedSize, Category=LevelOfDetailModels)
456
457#if WITH_EDITORONLY_DATA
462 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
464#endif
465
467 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
469
470 ENGINE_API FSkeletalMeshRenderData* GetSkeletalMeshRenderData() const;
471
473
475 ENGINE_API bool HasValidNaniteData() const;
476
477public:
478
485 ENGINE_API FSkeletalMeshSourceModel& AddSourceModel(const bool bAutoGenerated = false);
486
491 ENGINE_API void SetNumSourceModels(const int32 InNumSourceModels);
492
495 ENGINE_API void RemoveSourceModel(const int32 InLODIndex);
496
499 ENGINE_API int32 GetNumSourceModels() const;
500
505 ENGINE_API bool IsSourceModelValid(const int32 InLODIndex) const;
506
510 ENGINE_API TConstArrayView<FSkeletalMeshSourceModel> GetAllSourceModels() const;
511
516
522 ENGINE_API const FSkeletalMeshSourceModel& GetSourceModel(const int32 InLODIndex) const;
523
530
531#if WITH_EDITORONLY_DATA
536 ENGINE_API FMeshDescription* GetMeshDescription(const int32 InLODIndex) const;
537
546
555
562
570
571
572 /* Structure that defines parameters passed into the commit mesh description function */
574 {
576
581 bool bUpdateMorphTargets = true;
582
588 bool bUpdateSkinWeightProfiles = true;
589
595 bool bUpdateVertexAttributes = true;
596
598 bool bUpdateVertexColors = true;
599
603 bool bMarkPackageDirty = true;
604
609 bool bForceUpdate = false;
610 };
611
620 ENGINE_API bool CommitMeshDescription(const int32 InLODIndex, const FCommitMeshDescriptionParams& InParams = {});
621
628
634
639
646
648 // USkeletalMeshEditorData public skeletalmesh API
649 // We do not want skeletal mesh client to use directly the asset(function GetMeshEditorData)
650 // We have to maintain some sync between the LODModels and the asset to avoid loading the asset when
651 // building the DDC key. That is why the asset accessor are private. the data we keep in sync in the LODModels is:
652 // IsLODImportedDataBuildAvailable
653 // IsLODImportedDataEmpty
654 // Raw mesh data DDC string ID, there is no API to retrieve it, since only the LODModels need this value
655
656
657 UE_DEPRECATED(5.4, "Use GetMeshDescription instead.")
659
660 UE_DEPRECATED(5.4, "Use CommitMeshDescription instead.")
662
663 UE_DEPRECATED(5.4, "Use HasMeshDescription instead.")
664 ENGINE_API bool IsLODImportedDataBuildAvailable(const int32 LODIndex) const;
665
666 UE_DEPRECATED(5.4, "Use HasMeshDescription instead.")
667 ENGINE_API bool IsLODImportedDataEmpty(const int32 LODIndex) const;
668
669 UE_DEPRECATED(5.4, "No equivalent provided since versioning is not surfaced for mesh description bulk data.")
671
672 UE_DEPRECATED(5.4, "No equivalent provided since versioning is not surfaced for mesh description bulk data.")
674
675 UE_DEPRECATED(5.4, "Use GetMeshDescription and CreateMeshDescription instead.")
677
678 UE_DEPRECATED(5.4, "No equivalent provided. All LODs should be added up-front for multi-threaded use.")
680
681 UE_DEPRECATED(5.4, "No equivalent provided.")
682 ENGINE_API void ForceBulkDataResident(const int32 LODIndex);
683
684 UE_DEPRECATED(5.4, "Use ClearMeshDescriptionAndBulkData instead.")
685 ENGINE_API void EmptyLODImportData(const int32 LODIndex);
686
687 UE_DEPRECATED(5.4, "Use ClearMeshDescriptionAndBulkData instead.")
689
690 // End USkeletalMeshEditorData public skeletalmesh API
692
696
698 virtual FSkeletalMeshModel* GetImportedModel() const override
699 {
700 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::ImportedModel);
702 return ImportedModel.Get();
704 }
705private:
707 {
708 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::ImportedModel);
712 }
713public:
714#endif //WITH_EDITORONLY_DATA
715
716
717#if WITH_EDITOR
719 ENGINE_API void ValidateBoneWeights(const ITargetPlatform* TargetPlatform);
720 ENGINE_API virtual void BeginCacheForCookedPlatformData(const ITargetPlatform* TargetPlatform) override;
721 ENGINE_API virtual void ClearAllCachedCookedPlatformData() override;
722#endif
723
725 ENGINE_API virtual FSkeletalMeshRenderData* GetResourceForRendering() const override;
726
728 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetSkeleton() or USkeletalMesh::SetSkeleton().")
729 UPROPERTY(Category=Mesh, AssetRegistrySearchable, VisibleAnywhere, BlueprintGetter = GetSkeleton, BlueprintSetter = SetSkeleton)
731
738
740 virtual USkeleton* GetSkeleton() override
741 {
742 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::Skeleton);
744 return Skeleton;
746 }
747
749 UFUNCTION(BlueprintGetter)
757
758 UFUNCTION(BlueprintSetter)
766
767protected:
768#if WITH_EDITORONLY_DATA
769 ENGINE_API virtual void UpdateMaterialUVChannelData(FMeshUVChannelInfo& UVChannelData, int32 MaterialIndex) override;
770#endif
771
772private:
774 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
777
779 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
782
783 const FBoxSphereBounds& GetExtendedBounds() const
784 {
787 return ExtendedBounds;
789 }
790
791 void SetExtendedBounds(const FBoxSphereBounds& InExtendedBounds)
792 {
793 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::ExtendedBounds);
797 }
798
799protected:
800 // The properties below are protected to force the use of the Set* methods for this data
801 // in code so we can keep the extended bounds up to date after changing the data.
802 // Property editors will trigger property events to correctly recalculate the extended bounds.
803
807 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
808 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Mesh)
810
817
821 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
822 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Mesh)
824
831
832public:
834 UFUNCTION(BlueprintCallable, Category = Mesh)
835 ENGINE_API virtual FBoxSphereBounds GetBounds() const override;
836
838 UFUNCTION(BlueprintCallable, Category = Mesh)
839 ENGINE_API FBoxSphereBounds GetImportedBounds() const;
840
842 ENGINE_API void SetImportedBounds(const FBoxSphereBounds& InBounds);
843
845 ENGINE_API void SetPositiveBoundsExtension(const FVector& InExtension);
846
855
857 ENGINE_API void SetNegativeBoundsExtension(const FVector& InExtension);
858
867
869 ENGINE_API void CalculateExtendedBounds();
870
872 ENGINE_API void ValidateBoundsExtension();
873
874#if WITH_EDITOR
876 virtual bool HasCustomActorFactory() const
877 {
878 return false;
879 }
880
882 virtual bool HasCustomActorReimportFactory() const
883 {
884 return false;
885 }
886
888
889 /* Return true if this skeletalmesh was never build since its creation. USkinnedAsset interface. */
890 ENGINE_API virtual bool IsInitialBuildDone() const override;
891
892 /* Return true if the reduction settings are setup to reduce a LOD*/
893 ENGINE_API bool IsReductionActive(int32 LODIndex) const;
894
895 /* Get a copy of the reduction settings for a specified LOD index. */
896 ENGINE_API struct FSkeletalMeshOptimizationSettings GetReductionSettings(int32 LODIndex) const;
897
898#endif
899
901 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMaterials() or USkeletalMesh::SetMaterials().")
902 UPROPERTY(EditAnywhere, BlueprintGetter = GetMaterials, BlueprintSetter = SetMaterials, transient, duplicatetransient, Category=SkeletalMesh)
904
911
920
922 UFUNCTION(BlueprintGetter)
930
931 UFUNCTION(BlueprintSetter)
932 ENGINE_API void SetMaterials(const TArray<FSkeletalMaterial>& InMaterials);
933
934#if WITH_EDITORONLY_DATA
937 UE_DEPRECATED(4.27, "Please do not access this member directly; Use UMirrorDataTable for mirroring support")
938 UPROPERTY(EditAnywhere, editfixedsize, Category=Mirroring)
941
943 UPROPERTY(EditAnywhere, Category = Mesh)
944 FMeshNaniteSettings NaniteSettings;
948 ENGINE_API bool IsNaniteEnabled() const;
949
951 {
952 return NaniteSettings;
953 }
954 void SetNaniteSettings(const FMeshNaniteSettings& Settings)
955 {
956 NaniteSettings = Settings;
957 }
958
960 {
961 FProperty* ChangedProperty = FindFProperty<FProperty>(USkeletalMesh::StaticClass(), GET_MEMBER_NAME_CHECKED(USkeletalMesh, NaniteSettings));
963 PostEditChangeProperty(Event);
964 }
965
969 ENGINE_API bool IsNaniteAssembly() const;
970
977
983
988
994
995#endif // WITH_EDITORONLY_DATA
996
997#if WITH_EDITOR
999 ENGINE_API virtual bool HasCompileDependencies() const override;
1000 ENGINE_API virtual bool HasAnyDependenciesCompiling() const override;
1001private:
1003#endif
1004
1005private:
1006
1007#if WITH_EDITOR
1009#endif
1010
1011#if !WITH_EDITOR
1013 struct FSocketInfo
1014 {
1016
1017 FTransform SocketLocalTransform;
1019 int32 SocketIndex;
1020 int32 SocketBoneIndex;
1021 };
1022
1024 TMap<FName, FSocketInfo> SocketMap;
1025#endif
1026
1027#if WITH_EDITORONLY_DATA
1030#endif
1031
1032public:
1033 UPROPERTY(EditAnywhere, Category = LODSettings, meta = (DisplayName = "Quality Level Minimum LOD"))
1034 FPerQualityLevelInt MinQualityLevelLOD;
1035
1036 UFUNCTION(BlueprintCallable, Category = StaticMesh, Meta = (ToolTip = "Allow to override min lod quality levels on a skeletalMesh and it Default value (-1 value for Default dont override its value)."))
1037 void SetMinLODForQualityLevels(const TMap<EPerQualityLevels, int32>& QualityLevelMinimumLODs, int32 Default = -1)
1038 {
1039#if WITH_EDITORONLY_DATA
1040 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::MinLod);
1041 MinQualityLevelLOD.PerQuality = QualityLevelProperty::ConvertQualityLevelData(QualityLevelMinimumLODs);
1042 MinQualityLevelLOD.Default = Default >=0 ? Default : MinQualityLevelLOD.Default;
1043#endif
1044 }
1045
1046 UFUNCTION(BlueprintPure, Category = StaticMesh)
1047 void GetMinLODForQualityLevels(TMap<EPerQualityLevels, int32>& QualityLevelMinimumLODs, int32& Default) const
1048 {
1049#if WITH_EDITORONLY_DATA
1051 QualityLevelMinimumLODs = QualityLevelProperty::ConvertQualityLevelData(MinQualityLevelLOD.PerQuality);
1052 Default = MinQualityLevelLOD.Default;
1053#endif
1054 }
1055
1057 {
1058 return GET_MEMBER_NAME_CHECKED(USkeletalMesh, MinQualityLevelLOD);
1059 }
1060
1062 {
1063 return MinQualityLevelLOD;
1064 }
1065
1067 {
1068 MinQualityLevelLOD = MoveTemp(InMinLod);
1069 }
1070
1072 ENGINE_API virtual bool IsMinLodQualityLevelEnable() const override;
1073
1075 ENGINE_API virtual int32 GetPlatformMinLODIdx(const ITargetPlatform* TargetPlatform) const override;
1076 ENGINE_API virtual void SetSkinWeightProfilesData(int32 LODIndex, FSkinWeightProfilesData& SkinWeightProfilesData) override;
1077 ENGINE_API virtual FSkinWeightProfilesData* GetSkinWeightProfilesData(int32 LODIndex) override;
1078
1079 static ENGINE_API void OnLodStrippingQualityLevelChanged(IConsoleVariable* Variable);
1080
1081 /*Choose either PerPlatform or PerQuality override. Note: Enable PerQuality override in the Project Settings/ General Settings/ UseSkeletalMeshMinLODPerQualityLevels*/
1082 ENGINE_API virtual int32 GetMinLodIdx(bool bForceLowestLODIdx = false) const override;
1083 ENGINE_API virtual int32 GetDefaultMinLod() const override;
1084 ENGINE_API void SetMinLodIdx(int32 InMinLOD);
1085
1087 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMinLod() or USkeletalMesh::SetMinLod().")
1088 UPROPERTY(EditAnywhere, Category = LODSettings, meta = (DisplayName = "Minimum LOD"))
1090
1097
1106
1114
1116 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetDisableBelowMinLodStripping() or USkeletalMesh::SetDisableBelowMinLodStripping().")
1117 UPROPERTY(EditAnywhere, Category = LODSettings)
1119
1126
1135
1143
1144#if WITH_EDITORONLY_DATA
1146 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetOverrideLODStreamingSettings() or USkeletalMesh::SetOverrideLODStreamingSettings().")
1147 UPROPERTY(EditAnywhere, Category=LODSettings)
1148 bool bOverrideLODStreamingSettings;
1150 {
1152 return GET_MEMBER_NAME_CHECKED(USkeletalMesh, bOverrideLODStreamingSettings);
1154 }
1155
1157 {
1160 return bOverrideLODStreamingSettings;
1162 }
1163
1165 {
1166 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::OverrideLODStreamingSettings);
1168 bOverrideLODStreamingSettings = bInOverrideLODStreamingSettings;
1170 }
1171
1173 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetSupportLODStreaming() or USkeletalMesh::SetSupportLODStreaming().")
1174 UPROPERTY(EditAnywhere, Category=LODSettings, meta=(DisplayName="Stream LODs", EditCondition="bOverrideLODStreamingSettings"))
1175 FPerPlatformBool bSupportLODStreaming;
1177 {
1179 return GET_MEMBER_NAME_CHECKED(USkeletalMesh, bSupportLODStreaming);
1181 }
1182
1184 {
1187 return bSupportLODStreaming;
1189 }
1190
1192 {
1193 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::SupportLODStreaming);
1195 bSupportLODStreaming = MoveTemp(bInSupportLODStreaming);
1197 }
1198
1200 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMaxNumStreamedLODs() or USkeletalMesh::SetMaxNumStreamedLODs().")
1201 UPROPERTY(EditAnywhere, Category=LODSettings, meta=(EditCondition="bOverrideLODStreamingSettings"))
1204 {
1208 }
1209
1211 {
1214 return MaxNumStreamedLODs;
1216 }
1217
1219 {
1220 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::MaxNumStreamedLODs);
1224 }
1225
1227 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMaxNumOptionalLODs() or USkeletalMesh::SetMaxNumOptionalLODs().")
1228 UPROPERTY(EditAnywhere, Category=LODSettings, meta=(EditCondition="bOverrideLODStreamingSettings"))
1231 {
1235 }
1236
1238 {
1241 return MaxNumOptionalLODs;
1243 }
1244
1246 {
1247 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::MaxNumOptionalLODs);
1251 }
1252
1253 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetLODSettings() or USkeletalMesh::SetLODSettings().")
1254 UPROPERTY(EditAnywhere, AssetRegistrySearchable, BlueprintGetter = GetLODSettings, BlueprintSetter = SetLODSettings, Category = LODSettings)
1256
1258 {
1262 }
1263
1265 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetDefaultAnimatingRig() or USkeletalMesh::SetDefaultAnimatingRig().")
1266 UPROPERTY(EditAnywhere, Category = AnimationRig, BlueprintGetter = GetDefaultAnimatingRig, BlueprintSetter = SetDefaultAnimatingRig, meta = (AllowedClasses = "/Script/ControlRigDeveloper.ControlRigBlueprint"))
1269 {
1273 }
1274
1275#endif // WITH_EDITORONLY_DATA
1276
1278 {
1279 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::LODSettings);
1281#if WITH_EDITORONLY_DATA
1282 return LODSettings;
1283#else
1284 const bool bCallOutsideOf_WithEditorOnlyData = false;
1286 return nullptr;
1287#endif // WITH_EDITORONLY_DATA
1289 }
1290
1291 UFUNCTION(BlueprintGetter)
1292 const USkeletalMeshLODSettings* GetLODSettings() const
1293 {
1296#if WITH_EDITORONLY_DATA
1297 return LODSettings;
1298#else
1299 const bool bCallOutsideOf_WithEditorOnlyData = false;
1301 return nullptr;
1302#endif // WITH_EDITORONLY_DATA
1304 }
1305
1306 UFUNCTION(BlueprintSetter)
1308
1309#if WITH_EDITOR
1311 ENGINE_API virtual bool GetEnableLODStreaming(const class ITargetPlatform* TargetPlatform) const override;
1312
1314 ENGINE_API virtual int32 GetMaxNumStreamedLODs(const class ITargetPlatform* TargetPlatform) const override;
1315
1317 ENGINE_API virtual int32 GetMaxNumOptionalLODs(const class ITargetPlatform* TargetPlatform) const override;
1318
1319 /* Build a LOD model for the given render data. USkinnedAsset Interface. */
1320 ENGINE_API virtual void BuildLODModel(FSkeletalMeshRenderData& RenderData, const ITargetPlatform* TargetPlatform, int32 LODIndex) override;
1321#endif
1322
1323 UFUNCTION(BlueprintSetter)
1324 ENGINE_API void SetDefaultAnimatingRig(TSoftObjectPtr<UObject> InAnimatingRig);
1325
1326 UFUNCTION(BlueprintGetter)
1327 ENGINE_API TSoftObjectPtr<UObject> GetDefaultAnimatingRig() const;
1328
1329#if WITH_EDITORONLY_DATA
1330 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetSkelMirrorAxis() or USkeletalMesh::SetSkelMirrorAxis().")
1331 UPROPERTY(EditAnywhere, Category=Mirroring)
1333
1334
1335 UE_DEPRECATED(4.27, "Please do not access this member directly; Use UMirrorDataTable for mirroring support")
1336 UPROPERTY(EditAnywhere, Category=Mirroring)
1338#endif
1339
1341 UPROPERTY()
1342 uint8 bUseFullPrecisionUVs_DEPRECATED :1;
1343
1345 UPROPERTY()
1346 uint8 bUseHighPrecisionTangentBasis_DEPRECATED : 1;
1347
1348 UE_DEPRECATED(5.5, "This functionality has been removed. Use FSkeletalMeshLODInfo::bHasBeenSimplified instead.")
1349 static FName GetHasBeenSimplifiedMemberName()
1350 {
1351 return NAME_None;
1352 }
1353
1354 UE_DEPRECATED(5.5, "This functionality has been removed. Use FSkeletalMeshLODInfo::bHasBeenSimplified instead.")
1355 bool GetHasBeenSimplified() const;
1356
1357 UE_DEPRECATED(5.5, "This functionality has been removed. Use FSkeletalMeshLODInfo::bHasBeenSimplified instead.")
1358 static void SetHasBeenSimplified(bool bInHasBeenSimplified)
1359 {
1360 }
1361
1363 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetHasVertexColors() or USkeletalMesh::SetHasVertexColors().")
1364 UPROPERTY()
1366
1373
1375 UFUNCTION(BlueprintPure, Category = Mesh, meta = (DisplayName = "Has Vertex Colors", ScriptName = "HasVertexColors", Keywords = "vertex color"))
1376 virtual bool GetHasVertexColors() const override
1377 {
1380 return bHasVertexColors != 0;
1382 }
1383
1391
1392 //caching optimization to avoid recalculating in non-editor builds
1393 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::HasActiveClothingAssets() or USkeletalMesh::SetHasActiveClothingAssets().")
1395
1402
1410
1412 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetEnablePerPolyCollision() or USkeletalMesh::SetEnablePerPolyCollision().")
1413 UPROPERTY(EditAnywhere, Category = Physics)
1415
1422
1430
1438
1439#if WITH_EDITORONLY_DATA
1441 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetVertexColorGuid() or USkeletalMesh::SetVertexColorGuid().")
1442 UPROPERTY()
1444
1446 {
1450 }
1451
1452 FGuid GetVertexColorGuid() const
1453 {
1456 return VertexColorGuid;
1458 }
1459
1461 {
1462 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::VertexColorGuid);
1466 }
1467
1468#endif
1469
1470 // Physics data for the per poly collision case. In 99% of cases you will not need this and are better off using simple ragdoll collision (physics asset)
1471 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetBodySetup() or USkeletalMesh::SetBodySetup().")
1480
1482 {
1483 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::BodySetup);
1485 return BodySetup;
1487 }
1488
1496
1501 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetPhysicsAsset() or USkeletalMesh::SetPhysicsAsset().")
1502 UPROPERTY(EditAnywhere, AssetRegistrySearchable, BlueprintGetter = GetPhysicsAsset, Category=Physics)
1504
1511
1513 UFUNCTION(BlueprintGetter)
1514 virtual class UPhysicsAsset* GetPhysicsAsset() const override
1515 {
1516 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::PhysicsAsset);
1518 return PhysicsAsset;
1520 }
1521
1529
1534 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetShadowPhysicsAsset() or USkeletalMesh::SetShadowPhysicsAsset().")
1535 UPROPERTY(EditAnywhere, AssetRegistrySearchable, BlueprintGetter = GetShadowPhysicsAsset, Category=Lighting)
1537
1544
1546 UFUNCTION(BlueprintGetter)
1547 virtual class UPhysicsAsset* GetShadowPhysicsAsset() const override
1548 {
1549 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::ShadowPhysicsAsset);
1551 return ShadowPhysicsAsset;
1553 }
1554
1562
1564 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetNodeMappingData() or USkeletalMesh::SetNodeMappingData().")
1565 UPROPERTY(EditAnywhere, editfixedsize, BlueprintGetter = GetNodeMappingData, Category=Animation)
1573
1581
1582 UFUNCTION(BlueprintGetter)
1590
1598
1599 UFUNCTION(BlueprintCallable, Category = "Animation")
1600 ENGINE_API class UNodeMappingContainer* GetNodeMappingContainer(class UBlueprint* SourceAsset) const;
1601
1602#if WITH_EDITORONLY_DATA
1603
1605 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetAssetImportData() or USkeletalMesh::SetAssetImportData().")
1606 UPROPERTY(EditAnywhere, Instanced, Category=ImportSettings)
1608
1610 {
1614 }
1615
1616 class UAssetImportData* GetAssetImportData() const
1617 {
1618 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::AssetImportData);
1620 return AssetImportData;
1622 }
1623
1625 {
1626 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::AssetImportData);
1630 }
1631
1633
1635 UPROPERTY()
1637
1639 UPROPERTY()
1641
1644 UPROPERTY(VisibleAnywhere, Instanced, AdvancedDisplay, Getter=GetThumbnailInfo, Setter=SetThumbnailInfo, Category = Thumbnail)
1646
1648 {
1652 }
1653
1655 {
1656 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::ThumbnailInfo);
1658 return ThumbnailInfo;
1660 }
1661
1663 {
1664 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::ThumbnailInfo);
1668 }
1669
1671 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetHasCustomDefaultEditorCamera() or USkeletalMesh::SetHasCustomDefaultEditorCamera().")
1672 UPROPERTY()
1674
1676 {
1680 }
1681
1683 {
1688 }
1689
1691 {
1692 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::HasCustomDefaultEditorCamera);
1696 }
1697
1699 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetDefaultEditorCameraLocation() or USkeletalMesh::SetDefaultEditorCameraLocation().")
1700 UPROPERTY()
1702
1704 {
1708 }
1709
1711 {
1716 }
1717
1719 {
1720 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::DefaultEditorCameraLocation);
1724 }
1725
1727 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetDefaultEditorCameraRotation() or USkeletalMesh::SetDefaultEditorCameraRotation().")
1728 UPROPERTY()
1730
1732 {
1736 }
1737
1739 {
1744 }
1745
1747 {
1748 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::DefaultEditorCameraRotation);
1752 }
1753
1755 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetDefaultEditorCameraLookAt() or USkeletalMesh::SetDefaultEditorCameraLookAt().")
1756 UPROPERTY()
1758
1760 {
1764 }
1765
1767 {
1772 }
1773
1775 {
1776 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::DefaultEditorCameraLookAt);
1780 }
1781
1783 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetDefaultEditorCameraOrthoZoom() or USkeletalMesh::SetDefaultEditorCameraOrthoZoom().")
1784 UPROPERTY()
1786
1788 {
1792 }
1793
1795 {
1800 }
1801
1803 {
1804 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::DefaultEditorCameraOrthoZoom);
1808 }
1809
1810
1811 /* Attached assets component for this mesh */
1812 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetPreviewAttachedAssetContainer() or USkeletalMesh::SetPreviewAttachedAssetContainer().")
1813 UPROPERTY()
1815
1817 {
1822 }
1823
1825 {
1830 }
1831
1833 {
1838 }
1839
1844 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetRequiresLODScreenSizeConversion() or USkeletalMesh::SetRequiresLODScreenSizeConversion().")
1845 uint32 bRequiresLODScreenSizeConversion : 1;
1846
1848 {
1851 return bRequiresLODScreenSizeConversion;
1853 }
1854
1856 {
1859 bRequiresLODScreenSizeConversion = bInRequiresLODScreenSizeConversion;
1861 }
1862
1867 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetRequiresLODHysteresisConversion() or USkeletalMesh::SetRequiresLODHysteresisConversion().")
1869
1871 {
1876 }
1877
1879 {
1884 }
1885
1886#endif // WITH_EDITORONLY_DATA
1887
1891 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
1892 UPROPERTY(EditAnywhere, Category = RayTracing)
1894
1903
1911
1915 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
1916 UPROPERTY(EditAnywhere, Category = RayTracing)
1918
1927
1935
1940 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
1941 UPROPERTY(EditAnywhere, Category = RayTracing)
1943
1951
1959
1960 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMorphTargets() or USkeletalMesh::SetMorphTargets().")
1961 UPROPERTY(BlueprintGetter = GetMorphTargetsPtrConv, BlueprintSetter = SetMorphTargets, Category = Mesh)
1963
1970
1979
1988
1989 // NOTE: BP compiler doesn't support TObjectPtr as an argument type for UFUNCTION so this converting call is
1990 // required. For many morphs, this can be expensive, since it needs to resolve _all_ TObjectPtrs and construct a new
1991 // array for it.
1992 UFUNCTION(BlueprintGetter)
2000
2001 UFUNCTION(BlueprintSetter)
2009
2014 UFUNCTION(BlueprintPure, Category = Mesh, meta = (DisplayName = "Get All Morph Target Names", ScriptName = "GetAllMorphTargetNames", Keywords = "morph shape"))
2015 ENGINE_API TArray<FString> K2_GetAllMorphTargetNames() const;
2016
2018 FRenderCommandFence ReleaseResourcesFence;
2019
2021 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetRefSkeleton() or USkeletalMesh::SetRefSkeleton().")
2023
2030
2039
2048
2056
2058 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMorphTargetIndexMap() or USkeletalMesh::SetMorphTargetIndexMap().")
2060
2067
2075
2083
2091
2093 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetRefBasesInvMatrix() or USkeletalMesh::SetRefBasesInvMatrix().")
2095
2102
2111
2120
2128
2129#if WITH_EDITORONLY_DATA
2130
2132 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetFloorOffset() or USkeletalMesh::SetFloorOffset().")
2133 UPROPERTY()
2134 float FloorOffset;
2135
2137 {
2141 }
2142
2143 float GetFloorOffset() const
2144 {
2147 return FloorOffset;
2149 }
2150
2151 void SetFloorOffset(float InFloorOffset)
2152 {
2153 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::FloorOffset);
2157 }
2158
2160 UE_DEPRECATED(5.7, "Please do not access this member directly, it will become private soon; use USkeletalMesh::GetClothingAssets_DEPRECATED().")
2161 UPROPERTY()
2163
2165 {
2169 }
2170
2171 // The visual size of the bones in the viewport (saved between sessions). This is set from the viewport Character>Bones menu
2172 UE_DEPRECATED(5.7, "Please do not access this member directly, it will become private soon; use USkeletalMesh::GetBoneDrawSize() or USkeletalMesh::SetBoneDrawSize().")
2173 UPROPERTY()
2174 float BoneDrawSize = 1.0f;
2175
2176 float GetBoneDrawSize() const
2177 {
2179 return BoneDrawSize;
2181 }
2182
2183 void SetBoneDrawSize(float Size)
2184 {
2186 BoneDrawSize = Size;
2188 }
2189#endif
2190
2195 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetPostProcessAnimBlueprint() or USkeletalMesh::SetPostProcessAnimBlueprint().")
2196 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Animation)
2198
2199private:
2200 /*
2201 * Max LOD level that post-process anim graphs are evaluated.
2202 * For example if you have the threshold set to 2, it will evaluate until including LOD 2 (based on 0 index). In case the LOD level gets set to 3, it will stop evaluating the post-process anim graph.
2203 * Setting it to -1 will always evaluate it and disable LODing.
2204 */
2205 UPROPERTY(EditAnywhere, Category = Animation, meta = (DisplayName = "Post-Process LOD Threshold"))
2206 int32 PostProcessAnimBPLODThreshold = INDEX_NONE;
2207
2208public:
2209 UE_DEPRECATED(5.6, "Use GetPostProcessAnimGraphLODThreshold() instead.")
2210 int32 GetPostProcessAnimBPLODThreshold() const { return GetPostProcessAnimGraphLODThreshold(); }
2211 UE_DEPRECATED(5.6, "Use SetPostProcessAnimGraphLODThreshold() instead.")
2212 void SetPostProcessAnimBPLODThreshold(int32 InPostProcessAnimBPLODThreshold) { SetPostProcessAnimGraphLODThreshold(InPostProcessAnimBPLODThreshold); }
2213 UE_DEPRECATED(5.6, "Use ShouldEvaluatePostProcessAnimGraph() instead.")
2214 bool ShouldEvaluatePostProcessAnimBP(int32 LODLevel) const { return ShouldEvaluatePostProcessAnimGraph(LODLevel); }
2215
2216 ENGINE_API int32 GetPostProcessAnimGraphLODThreshold() const;
2217 ENGINE_API void SetPostProcessAnimGraphLODThreshold(int32 LODThreshold);
2218 ENGINE_API bool ShouldEvaluatePostProcessAnimGraph(int32 LODLevel) const;
2219
2226
2234
2242
2243#if WITH_EDITOR
2246
2254
2255 /*
2256 * Handle some common preparation steps between async post load and async build. USkinnedAsset interface.
2257 */
2258 ENGINE_API virtual void PrepareForAsyncCompilation() override;
2259
2261 ENGINE_API virtual bool IsAsyncTaskComplete() const override;
2262
2263#endif // WITH_EDITOR
2264
2270 ENGINE_API const UClothingAssetBase* GetSectionClothingAsset(int32 InLodIndex, int32 InSectionIndex) const;
2271
2277 UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMeshClothingAssets() or USkeletalMesh::SetMeshClothingAssets().")
2278 UPROPERTY(EditAnywhere, editfixedsize, BlueprintGetter = GetMeshClothingAssets, BlueprintSetter = SetMeshClothingAssets, Category = Clothing)
2280
2287
2295
2296 UFUNCTION(BlueprintGetter)
2304
2305 UFUNCTION(BlueprintSetter)
2313
2314
2315
2317 ENGINE_API UClothingAssetBase* GetClothingAsset(const FGuid& InAssetGuid) const;
2318
2319 /* Get the index in the clothing asset array for a given asset (INDEX_NONE if InAsset isn't in the array) */
2320 ENGINE_API int32 GetClothingAssetIndex(UClothingAssetBase* InAsset) const;
2321
2322 /* Get the index in the clothing asset array for a given asset GUID (INDEX_NONE if there is no match) */
2323 ENGINE_API int32 GetClothingAssetIndex(const FGuid& InAssetGuid) const;
2324
2325 /* Get whether or not any bound clothing assets exist for this mesh **/
2327
2328 /* Get whether or not any bound clothing assets exist for this mesh's given LOD**/
2329 ENGINE_API bool HasActiveClothingAssetsForLOD(int32 LODIndex) const;
2330
2331 /* Compute whether or not any bound clothing assets exist for this mesh **/
2332 ENGINE_API bool ComputeActiveClothingAssets() const;
2333
2335 ENGINE_API void GetClothingAssetsInUse(TArray<UClothingAssetBase*>& OutClothingAssets) const;
2336
2338 ENGINE_API void AddClothingAsset(UClothingAssetBase* InNewAsset);
2339
2346
2354
2355private:
2356 FSkeletalMeshSamplingInfo& GetSamplingInfoInternal()
2357 {
2358 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::SamplingInfo);
2360 return SamplingInfo;
2362 }
2363
2364public:
2365#if WITH_EDITOR
2367 {
2368 WaitUntilAsyncPropertyReleased(ESkeletalMeshAsyncProperties::SamplingInfo);
2372 }
2373
2374 const FOnMeshChanged& GetOnMeshChanged() const { return OnMeshChanged; }
2375 FOnMeshChanged& GetOnMeshChanged() { return OnMeshChanged; }
2376#endif
2377
2381 ENGINE_API virtual bool NeedCPUData(int32 LODIndex)const override;
2382
2383protected:
2384
2386 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
2387 UPROPERTY(EditAnywhere, Category = "Sampling", meta=(ShowOnlyInnerProperties))
2389
2391 UPROPERTY(EditAnywhere, AdvancedDisplay, Instanced, Category=SkeletalMesh)
2393
2394#if WITH_EDITORONLY_DATA
2396 UE_DEPRECATED(5.7, "EditorOnly data will become private in the future. Use the GetAssetUserDataEditorOnly() accessor instead.")
2397 UPROPERTY(EditAnywhere, AdvancedDisplay, Instanced, Category=SkeletalMesh)
2399
2401 {
2405 }
2407 {
2411 }
2412#endif
2413#if WITH_EDITOR
2414 FOnMeshChanged OnMeshChanged;
2415#endif
2416
2417
2418 friend struct FSkeletalMeshUpdateContext;
2420
2421private:
2426 UPROPERTY()
2428
2430 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
2432
2433 TArray<FMatrix>& GetCachedComposedRefPoseMatrices()
2434 {
2439 }
2440
2441 const TArray<FMatrix>& GetCachedComposedRefPoseMatrices() const
2442 {
2447 }
2448
2449public:
2453 ENGINE_API void InitResources();
2454
2458 ENGINE_API void ReleaseResources();
2459
2463 ENGINE_API void FlushRenderState();
2464
2466 ENGINE_API void ReleaseCPUResources();
2467
2469 ENGINE_API void AllocateResourceForRendering();
2470
2478 ENGINE_API virtual const FMeshUVChannelInfo* GetUVChannelData(int32 MaterialIndex) const override;
2479
2480 //~ Begin UObject Interface.
2481#if WITH_EDITOR
2482private:
2484
2485 //When loading a legacy asset (saved before the skeletalmesh build refactor), we need to create the user sections data.
2486 //This function should be call only in the PostLoad
2488
2489
2490 /*
2491 * This function will enforce the user section data is coherent with the sections.
2492 */
2494
2495 /*
2496 * This function will ensure we have valid tangent in all LODs. If we found an invalid tangent axis, we will try to set it with the cross product of the two other axis.
2497 * If the two other axes are also bad, it will simply apply the triangle normals, which will facet the mesh.
2498 * It will validate tangents only for assets that do not have source build data. (This means assets imported before the build refactor that was done in UE 4.24.)
2499 * @note - If it finds a bad normal, it will LOG a warning to let the user know they have to re-import their mesh.
2500 */
2502
2503
2508
2513
2514public:
2515 /*
2516 * This function will enforce valid material index in the sections and the LODMaterialMap of all LOD.
2517 */
2519
2520private:
2521 //We want to avoid calling post edit change multiple time during import and build process.
2522
2523 /*
2524 * This function will increment the PostEditChange stack counter.
2525 * It will return the stack counter value. (the value should be >= 1)
2526 */
2528
2529 /*
2530 * This function will decrement the stack counter.
2531 * It will return the stack counter value. (the value should be >= 0)
2532 */
2534
2536public:
2540 ENGINE_API void Build();
2541
2549
2550 ENGINE_API virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
2551
2552private:
2553 bool bTransacting = false;
2554public:
2555 bool IsTransacting() const;
2556
2558
2559 ENGINE_API virtual void PreEditUndo() override;
2560 ENGINE_API virtual void PostEditUndo() override;
2562
2564
2565 ENGINE_API virtual EDataValidationResult IsDataValid(class FDataValidationContext& Context) const override;
2566
2567#endif // WITH_EDITOR
2568 ENGINE_API virtual void BeginDestroy() override;
2569 ENGINE_API virtual bool IsReadyForFinishDestroy() override;
2570 ENGINE_API virtual void PreSave(FObjectPreSaveContext ObjectSaveContext) override;
2571 ENGINE_API virtual void Serialize(FArchive& Ar) override;
2572#if WITH_EDITORONLY_DATA
2574#endif
2575 ENGINE_API virtual void PostInitProperties() override;
2576 ENGINE_API virtual void PostLoad() override;
2577#if WITH_EDITORONLY_DATA
2580#endif
2581
2582 ENGINE_API virtual bool IsPostLoadThreadSafe() const override;
2583 ENGINE_API virtual void GetAssetRegistryTags(FAssetRegistryTagsContext Context) const override;
2584 UE_DEPRECATED(5.4, "Implement the version that takes FAssetRegistryTagsContext instead.")
2585 ENGINE_API virtual void GetAssetRegistryTags(TArray<FAssetRegistryTag>& OutTags) const override;
2586 ENGINE_API virtual FString GetDesc() override;
2588 ENGINE_API virtual void GetPreloadDependencies(TArray<UObject*>& OutDeps) override;
2589 //~ End UObject Interface.
2590
2591 //~ Begin UStreamableRenderAsset Interface.
2592 ENGINE_API virtual int32 CalcCumulativeLODSize(int32 NumLODs) const override;
2593 ENGINE_API virtual FIoFilenameHash GetMipIoFilenameHash(const int32 MipIndex) const override;
2594 ENGINE_API virtual bool DoesMipDataExist(const int32 MipIndex) const override;
2597 ENGINE_API virtual bool HasPendingRenderResourceInitialization() const;
2598 virtual EStreamableRenderAssetType GetRenderAssetType() const final override { return EStreamableRenderAssetType::SkeletalMesh; }
2599 //~ End UStreamableRenderAsset Interface.
2600
2605 static ENGINE_API void CancelAllPendingStreamingActions();
2606
2607
2610 ENGINE_API void CalculateInvRefMatrices();
2611
2612#if WITH_EDITORONLY_DATA
2613 // Asset registry information for morph target names
2614 ENGINE_API static const FName MorphNamesTag;
2615 ENGINE_API static const FString MorphNamesTagDelimiter;
2616
2617 // Asset registry information for scalar material param names
2619 ENGINE_API static const FString MaterialParamNamesTagDelimiter;
2620#endif
2621
2622#if WITH_EDITOR
2625
2629 UFUNCTION(BlueprintCallable, Category = "Animation")
2631#endif // WITH_EDITOR
2632
2637 ENGINE_API virtual USkeletalMeshSocket* FindSocket(FName InSocketName) const override;
2638
2644 UFUNCTION(BlueprintCallable, Category = "Animation")
2645 ENGINE_API USkeletalMeshSocket* FindSocketAndIndex(FName InSocketName, int32& OutIndex) const;
2646
2653 ENGINE_API virtual USkeletalMeshSocket* FindSocketInfo(FName InSocketName, FTransform& OutTransform, int32& OutBoneIndex, int32& OutIndex) const override;
2654
2656 UFUNCTION(BlueprintCallable, Category = "Animation")
2657 ENGINE_API int32 NumSockets() const;
2658
2660 UFUNCTION(BlueprintCallable, Category = "Animation")
2661 ENGINE_API USkeletalMeshSocket* GetSocketByIndex(int32 Index) const;
2662
2669 ENGINE_API TMap<FVector3f, FColor> GetVertexColorData(const uint32 PaintingMeshLODIndex = 0) const;
2670
2672 ENGINE_API void RebuildSocketMap();
2673
2674 // @todo document
2675 ENGINE_API FMatrix GetRefPoseMatrix( int32 BoneIndex ) const;
2676
2681 ENGINE_API virtual FMatrix GetComposedRefPoseMatrix( FName InBoneName ) const override;
2682 ENGINE_API virtual FMatrix GetComposedRefPoseMatrix( int32 InBoneIndex ) const override;
2683
2684
2689 ENGINE_API TArray<TObjectPtr<USkeletalMeshSocket>>& GetMeshOnlySocketList();
2690
2696 ENGINE_API const TArray<USkeletalMeshSocket*>& GetMeshOnlySocketList() const;
2697
2702 ENGINE_API virtual TArray<USkeletalMeshSocket*> GetActiveSocketList() const override;
2703
2704#if WITH_EDITOR
2710 ENGINE_API int32 ValidatePreviewAttachedObjects();
2711
2719
2720#endif // #if WITH_EDITOR
2721
2725 UE_DEPRECATED(5.5, "Use GetLODInfo()->ScreenSize to manually verify a LOD's screen size settings.")
2726 ENGINE_API void DebugVerifySkeletalMeshLOD();
2727
2737 ENGINE_API UMorphTarget* FindMorphTargetAndIndex(FName MorphTargetName, int32& OutIndex) const;
2738
2739 /* Initialize morph targets and rebuild the render data */
2740 ENGINE_API void InitMorphTargetsAndRebuildRenderData();
2741
2743 ENGINE_API bool RegisterMorphTarget(UMorphTarget* MorphTarget, bool bInvalidateRenderData = true);
2744
2745 ENGINE_API void UnregisterMorphTarget(UMorphTarget* MorphTarget, bool bInvalidateRenderData = true);
2746
2747 ENGINE_API void UnregisterAllMorphTarget();
2748
2750 ENGINE_API void InitMorphTargets(bool bInKeepEmptyMorphTargets = false);
2751
2752#if WITH_EDITOR
2755
2758#endif
2759
2768 UFUNCTION(BlueprintCallable, Category="Clothing Simulation")
2769 ENGINE_API bool IsSectionUsingCloth(int32 InSectionIndex, bool bCheckCorrespondingSections = true) const;
2770
2771 ENGINE_API void CreateBodySetup();
2772
2773#if WITH_EDITOR
2776 ENGINE_API void AddBoneToReductionSetting(int32 LODIndex, const TArray<FName>& BoneNames);
2777 ENGINE_API void AddBoneToReductionSetting(int32 LODIndex, FName BoneName);
2778#endif
2779
2780#if WITH_EDITORONLY_DATA
2783#endif
2784
2785
2786 //~ Begin Interface_CollisionDataProvider Interface
2787 ENGINE_API virtual bool GetPhysicsTriMeshData(struct FTriMeshCollisionData* CollisionData, bool InUseAllTriData) override;
2788 ENGINE_API virtual bool GetTriMeshSizeEstimates(struct FTriMeshCollisionDataEstimates& OutTriMeshEstimates, bool bInUseAllTriData) const override;
2789 ENGINE_API virtual bool ContainsPhysicsTriMeshData(bool InUseAllTriData) const override;
2790 virtual bool WantsNegXTriMesh() override
2791 {
2792 return true;
2793 }
2794 virtual void GetMeshId(FString& OutMeshId) override { OutMeshId = TEXT("659304F7CF5D4F31BCC54A9FBB0B49E0"); }
2795 //~ End Interface_CollisionDataProvider Interface
2796
2797 //~ Begin IInterface_AssetUserData Interface
2798 ENGINE_API virtual void AddAssetUserData(UAssetUserData* InUserData) override;
2799 ENGINE_API virtual void RemoveUserDataOfClass(TSubclassOf<UAssetUserData> InUserDataClass) override;
2800 ENGINE_API virtual UAssetUserData* GetAssetUserDataOfClass(TSubclassOf<UAssetUserData> InUserDataClass) override;
2801 ENGINE_API virtual const TArray<UAssetUserData*>* GetAssetUserDataArray() const override;
2802 //~ End IInterface_AssetUserData Interface
2803
2804#if WITH_EDITOR
2805private:
2808public:
2811
2819
2821 ENGINE_API virtual FString BuildDerivedDataKey(const ITargetPlatform* TargetPlatform) override;
2822
2824 ENGINE_API FString GetDerivedDataKey();
2825
2828#endif
2829
2830private:
2831
2832#if WITH_EDITOR
2835
2840
2845
2850
2855
2856
2857
2862
2867
2872
2873#endif
2874
2876 ENGINE_API bool IsSocketOnMesh( const FName& InSocketName ) const;
2877
2881 ENGINE_API void InvalidateRenderData();
2882
2883#if WITH_EDITORONLY_DATA
2889
2890 /*
2891 * Ask the reference skeleton to rebuild the NameToIndexMap array. This is use to load old package before this array was created.
2892 */
2894
2895 /*
2896 * In version prior to FEditorObjectVersion::RefactorMeshEditorMaterials
2897 * The material slot is containing the "Cast Shadow" and the "Recompute Tangent" flag
2898 * We move those flag to sections to allow artist to control those flag at section level
2899 * since its a section flag.
2900 */
2902
2903#endif // WITH_EDITORONLY_DATA
2904
2908 ENGINE_API bool AreAllFlagsIdentical( const TArray<bool>& BoolArray ) const;
2909
2910#if WITH_EDITOR
2911public:
2914 ENGINE_API FDelegateHandle RegisterOnClothingChange(const FSimpleMulticastDelegate::FDelegate& InDelegate);
2916
2917private:
2918
2921#endif // WITH_EDITOR
2922 // INodeMappingProviderInterface
2923 ENGINE_API virtual void GetMappableNodeData(TArray<FName>& OutNames, TArray<FNodeItem>& OutTransforms) const override;
2924
2930
2932 ENGINE_API virtual FString GetAsyncPropertyName(uint64 Property) const override;
2933
2934public:
2935 /*
2936 * Add New LOD info entry to LODInfo array
2937 *
2938 * This adds one entry with correct setting
2939 * If it's using LODSettings, it will copy from that setting
2940 * If not, it will auto calculate based on what is previous LOD setting
2941 *
2942 */
2943 ENGINE_API FSkeletalMeshLODInfo& AddLODInfo();
2944 /*
2945 * Add New LOD info entry with entry
2946 *
2947 * This is used by import code, where they want to override this
2948 *
2949 * @param NewLODInfo : new LOD info to be added
2950 */
2952
2953 /*
2954 * Remove LOD info of given index
2955 */
2956 UE_DEPRECATED(5.7, "Use RemoveSourceModel() instead.")
2957 ENGINE_API void RemoveLODInfo(int32 Index);
2958
2959 /*
2960 * Reset whole entry
2961 */
2962 UE_DEPRECATED(5.7, "Use SetNumSourceModels(0) instead.")
2963 ENGINE_API void ResetLODInfo();
2964
2965 /*
2966 * Returns whole array of LODInfo non-const. USkinnedAsset interface.
2967 */
2968 UE_DEPRECATED(5.5, "Use GetLODInfo and GetLODNum instead.")
2970
2971 /*
2972 * Returns whole array of LODInfo const. USkinnedAsset interface.
2973 */
2974 UE_DEPRECATED(5.5, "Use GetLODInfo and GetLODNum instead.")
2975 ENGINE_API virtual const TArray<FSkeletalMeshLODInfo>& GetLODInfoArray() const override;
2976
2977 /*
2978 * Get LODInfo of the given index non-const. USkinnedAsset interface.
2979 */
2981
2982 /*
2983 * Get LODInfo of the given index const. USkinnedAsset interface.
2984 */
2985 ENGINE_API virtual const FSkeletalMeshLODInfo* GetLODInfo(int32 Index) const override;
2986
2987private:
2988
2992 void CopyAutogeneratedLODInfoFromPreviousLOD(int32 InLODIndex);
2993public:
2994
2995#if WITH_EDITOR
2997#endif
2998
3002 ENGINE_API const UAnimSequence* GetBakePose(int32 LODIndex) const;
3003
3004 /*
3005 * Get Default LOD Setting of this mesh
3006 */
3007 ENGINE_API const USkeletalMeshLODSettings* GetDefaultLODSetting() const;
3008
3009 /*
3010 * Return true if given index's LOD is valid. USkinnedAsset interface.
3011 */
3012 ENGINE_API virtual bool IsValidLODIndex(int32 Index) const override;
3013
3014 /*
3015 * Returns total number of LOD. USkinnedAsset interface.
3016 */
3017 ENGINE_API virtual int32 GetLODNum() const override;
3018
3020 ENGINE_API int32 GetNumNaniteVertices() const;
3021
3023 ENGINE_API int32 GetNumNaniteTriangles() const;
3024
3026 ENGINE_API virtual bool IsMaterialUsed(int32 MaterialIndex) const override;
3027
3035
3043 ENGINE_API void AddSkinWeightProfile(const FSkinWeightProfileInfo& Profile);
3044
3052
3054 ENGINE_API void ReleaseSkinWeightProfileResources();
3055
3060 UFUNCTION(BlueprintPure, Category = Mesh, meta = (DisplayName = "Get All Skin Weight Profile Names", ScriptName = "GetAllSkinWeightProfileNames", Keywords = "skin weight profile"))
3061 ENGINE_API TArray<FString> K2_GetAllSkinWeightProfileNames() const;
3062
3063protected:
3065 UE_DEPRECATED(5.0, "This must be protected for async build, always use the accessors even internally.")
3066 UPROPERTY(EditAnywhere, Category = SkinWeights, EditFixedSize, Meta=(NoResetToDefault))
3068
3070 UE_DEPRECATED(5.1, "This must be protected for async build, always use the accessors even internally.")
3071 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Deformer", BlueprintGetter=GetDefaultMeshDeformer)
3073
3075 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Deformer", BlueprintGetter=GetTargetMeshDeformers)
3077
3079 UE_DEPRECATED(5.3, "This must be protected for async build, always use the accessors even internally.")
3080 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Rendering)
3082
3084 UE_DEPRECATED(5.3, "This must be protected for async build, always use the accessors even internally.")
3085 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Rendering)
3087
3093 UPROPERTY(VisibleAnywhere, Category = Mesh, BlueprintGetter = GetForwardAxis)
3094 TEnumAsByte<EAxis::Type> ForwardAxis = EAxis::Y;
3095
3096public:
3106
3108 UFUNCTION(BlueprintCallable, Category="Rendering|Deformer")
3116
3123
3125 UFUNCTION(BlueprintCallable, Category="Rendering|Deformer")
3126 virtual UMeshDeformerCollection* GetTargetMeshDeformers() const override
3127 {
3129 return TargetMeshDeformers;
3130 }
3131
3133 ENGINE_API virtual bool HasHalfEdgeBuffer(int32 LODIndex)const override;
3134
3136 UFUNCTION(BlueprintCallable, Category="Rendering|Material")
3144
3146 UFUNCTION(BlueprintCallable, Category="Rendering|Material")
3154
3156 UFUNCTION(BlueprintCallable, Category="Rendering|Material")
3164
3166 UFUNCTION(BlueprintCallable, Category="Rendering|Material")
3174
3176 UFUNCTION(BlueprintCallable, Category = Mesh)
3177 TEnumAsByte<EAxis::Type> GetForwardAxis() const
3178 {
3179 return ForwardAxis;
3180 }
3181
3187
3188private:
3192 ENGINE_API virtual void BeginPostLoadInternal(FSkinnedAssetPostLoadContext& Context) override;
3193
3197 ENGINE_API virtual void ExecutePostLoadInternal(FSkinnedAssetPostLoadContext& Context) override;
3198
3202 ENGINE_API virtual void FinishPostLoadInternal(FSkinnedAssetPostLoadContext& Context) override;
3203
3204private:
3209#if WITH_EDITORONLY_DATA
3210 UPROPERTY()
3212
3213#endif //WITH_EDITORONLY_DATA
3214
3215 UPROPERTY()
3216 TArray<FSkeletalMeshLODInfo> LODInfo_DEPRECATED;
3217
3218};
3219
3234
3244
3245ENGINE_API FVector GetSkeletalMeshRefVertLocation(const USkeletalMesh* Mesh, const FSkeletalMeshLODRenderData& LODData, const FSkinWeightVertexBuffer& SkinWeightVertexBuffer, const int32 VertIndex);
3247
3248#undef UE_API
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define GET_MEMBER_NAME_CHECKED(ClassName, MemberName)
Definition AssertionMacros.h:493
#define ensure( InExpression)
Definition AssertionMacros.h:464
virtual bool IsPostLoadThreadSafe() const override
uint32 FIoFilenameHash
Definition BulkData.h:68
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_MULTICAST_DELEGATE(DelegateName)
Definition DelegateCombinations.h:23
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define NSLOCTEXT(InNamespace, InKey, InTextLiteral)
Definition Internationalization.h:300
const bool
Definition NetworkReplayStreaming.h:178
#define MAX_uint64
Definition NumericLimits.h:22
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
EPerQualityLevels
Definition PerQualityLevelProperties.h:26
ENGINE_API void GetSkeletalMeshRefTangentBasis(const USkeletalMesh *Mesh, const FSkeletalMeshLODRenderData &LODData, const FSkinWeightVertexBuffer &SkinWeightVertexBuffer, const int32 VertIndex, FVector3f &OutTangentX, FVector3f &OutTangentY, FVector3f &OutTangentZ)
Definition SkeletalMesh.cpp:7143
ENGINE_API FVector GetSkeletalMeshRefVertLocation(const USkeletalMesh *Mesh, const FSkeletalMeshLODRenderData &LODData, const FSkinWeightVertexBuffer &SkinWeightVertexBuffer, const int32 VertIndex)
Definition SkeletalMesh.cpp:7104
ENGINE_API void RefreshSkelMeshOnPhysicsAssetChange(const USkeletalMesh *InSkeletalMesh)
Definition SkeletalMesh.cpp:1340
#define UE_API
Definition SkeletalMesh.h:32
ESkeletalMeshAsyncProperties
Definition SkeletalMesh.h:75
EClothLODBiasMode
Definition SkeletalMesh.h:344
ESkinnedAssetAsyncPropertyLockType
Definition SkinnedAsset.h:37
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
EStreamableRenderAssetType
Definition StreamableRenderAsset.h:26
EDataValidationResult
Definition UObjectGlobals.h:4225
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition AssetRegistryTagsContext.h:98
Definition DataValidation.h:40
Definition IDelegateInstance.h:14
Definition Event.h:21
Definition NameTypes.h:617
Definition ObjectSaveContext.h:244
Definition UnrealType.h:3087
Definition UnrealType.h:174
Definition RenderCommandFence.h:15
Definition SkeletalMeshLODRenderData.h:128
Definition SkeletalMeshRenderData.h:17
Definition SkeletalMeshUpdate.h:62
Definition SkinWeightVertexBuffer.h:364
Definition SkinnedAssetAsyncCompileUtils.h:42
Definition SkinnedAssetAsyncCompileUtils.h:18
Definition SkinnedAssetAsyncCompileUtils.h:36
Definition SkinnedAssetAsyncCompileUtils.h:48
Definition Text.h:385
Definition ObjectMacros.h:180
Definition IConsoleManager.h:558
Definition Interface_AssetUserData.h:20
Definition Interface_CollisionDataProvider.h:23
Definition NodeMappingProviderInterface.h:46
Definition Sockets.Build.cs:6
Definition ArrayView.h:139
Definition Array.h:670
Definition EnumAsByte.h:22
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SubclassOf.h:30
Definition UniquePtr.h:107
Definition AnimInstance.h:353
Definition AnimSequence.h:203
Definition AssetImportData.h:72
Definition AssetUserData.h:18
Definition Blueprint.h:403
Definition BodySetup.h:128
Definition Class.h:3793
Definition ClothingAssetBase.h:21
Definition MaterialInterface.h:296
Definition MeshDeformerCollection.h:14
Definition MeshDeformer.h:19
Definition MirrorDataTable.h:102
Definition MorphTarget.h:230
Definition NodeMappingContainer.h:18
Definition Object.h:95
Definition PhysicsAsset.h:172
Definition SkeletalMeshEditorData.h:31
Definition SkeletalMeshLODSettings.h:124
Definition SkeletalMeshSocket.h:14
Definition SkeletalMesh.h:440
virtual const TArray< TObjectPtr< UMorphTarget > > & GetMorphTargets() const override
Definition SkeletalMesh.h:1981
void SetMorphTargetIndexMap(const TMap< FName, int32 > &InMorphTargetIndexMap)
Definition SkeletalMesh.h:2084
TArray< FSkinWeightProfileInfo > & GetSkinWeightProfiles()
Definition SkeletalMesh.h:3036
TArray< TObjectPtr< UClothingAssetBase > > & GetMeshClothingAssets()
Definition SkeletalMesh.h:2288
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetBodySetup() or USkeletalMesh::SetBodySetup().") TObjectPtr< class UBodySetup > BodySetup
TMap< FName, int32 > & GetMorphTargetIndexMap()
Definition SkeletalMesh.h:2068
virtual FReferenceSkeleton & GetRefSkeleton() override
Definition SkeletalMesh.h:2032
void SetBodySetup(class UBodySetup *InBodySetup)
Definition SkeletalMesh.h:1489
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetNodeMappingData() or USkeletalMesh::SetNodeMappingData().") TArray< TObjectPtr< class UNodeMappingContainer > > NodeMappingData
const TMap< FName, int32 > & GetMorphTargetIndexMap() const
Definition SkeletalMesh.h:2076
void SetClothLODBiasMode(EClothLODBiasMode InClothLODBiasMode)
Definition SkeletalMesh.h:1952
void SetPhysicsAsset(class UPhysicsAsset *InPhysicsAsset)
Definition SkeletalMesh.h:1522
void SetMinLod(FPerPlatformInt InMinLod)
Definition SkeletalMesh.h:1107
void SetTargetMeshDeformers(UMeshDeformerCollection *InMeshDeformerCollection)
Definition SkeletalMesh.h:3118
int32 GetNumSkinWeightProfiles() const
Definition SkeletalMesh.h:3045
class UBodySetup * GetBodySetup() const
Definition SkeletalMesh.h:1481
virtual const FReferenceSkeleton & GetRefSkeleton() const override
Definition SkeletalMesh.h:2041
void SetForwardAxis(TEnumAsByte< EAxis::Type > InForwardAxis)
Definition SkeletalMesh.h:3183
void SetNodeMappingData(const TArray< class UNodeMappingContainer * > &InNodeMappingData)
Definition SkeletalMesh.h:1591
void SetEnablePerPolyCollision(bool bInEnablePerPolyCollision)
Definition SkeletalMesh.h:1431
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetPhysicsAsset() or USkeletalMesh::SetPhysicsAsset().") TObjectPtr< class UPhysicsAsset > PhysicsAsset
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetPostProcessAnimBlueprint() or USkeletalMesh::SetPostProcessAnimBlueprint().") TSubclassOf< UAnimInstance > PostProcessAnimBlueprint
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMeshClothingAssets() or USkeletalMesh::SetMeshClothingAssets().") TArray< TObjectPtr< UClothingAssetBase > > MeshClothingAssets
const FSkeletalMeshSamplingInfo & GetSamplingInfo() const
Definition SkeletalMesh.h:2347
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMinLod() or USkeletalMesh::SetMinLod().") FPerPlatformInt MinLod
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetRefBasesInvMatrix() or USkeletalMesh::SetRefBasesInvMatrix().") TArray< FMatrix44f > RefBasesInvMatrix
static FName GetSamplingInfoMemberName()
Definition SkeletalMesh.h:2340
void SetShadowPhysicsAsset(class UPhysicsAsset *InShadowPhysicsAsset)
Definition SkeletalMesh.h:1555
virtual TArray< TObjectPtr< UMorphTarget > > & GetMorphTargets() override
Definition SkeletalMesh.h:1972
virtual const FPerPlatformBool & GetDisableBelowMinLodStripping() const override
Definition SkeletalMesh.h:1128
virtual void GetMeshId(FString &OutMeshId) override
Definition SkeletalMesh.h:2794
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetDisableBelowMinLodStripping() or USkeletalMesh::SetDisableBelowMinLodStripping().") FPerPlatformBool DisableBelowMinLodStripping
void SetRefSkeleton(const FReferenceSkeleton &InRefSkeleton)
Definition SkeletalMesh.h:2049
virtual TArray< FMatrix44f > & GetRefBasesInvMatrix() override
Definition SkeletalMesh.h:2104
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMaterials() or USkeletalMesh::SetMaterials().") TArray< FSkeletalMaterial > Materials
void SetHasVertexColors(bool InbHasVertexColors)
Definition SkeletalMesh.h:1384
USkeletalMeshLODSettings * GetLODSettings()
Definition SkeletalMesh.h:1277
void SetRayTracingMinLOD(int32 InRayTracingMinLOD)
Definition SkeletalMesh.h:1928
static FName GetPostProcessAnimBlueprintMemberName()
Definition SkeletalMesh.h:2220
virtual TArray< FSkeletalMaterial > & GetMaterials() override
Definition SkeletalMesh.h:913
const TArray< FSkinWeightProfileInfo > & GetSkinWeightProfiles() const
Definition SkeletalMesh.h:3028
const FVector & GetPositiveBoundsExtension() const
Definition SkeletalMesh.h:848
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMorphTargetIndexMap() or USkeletalMesh::SetMorphTargetIndexMap().") TMap< FName
TSubclassOf< UAnimInstance > GetPostProcessAnimBlueprint() const
Definition SkeletalMesh.h:2227
void SetPostProcessAnimBlueprint(TSubclassOf< UAnimInstance > InPostProcessAnimBlueprint)
Definition SkeletalMesh.h:2235
const FVector & GetNegativeBoundsExtension() const
Definition SkeletalMesh.h:860
bool GetEnablePerPolyCollision() const
Definition SkeletalMesh.h:1423
void SetRefBasesInvMatrix(const TArray< FMatrix44f > &InRefBasesInvMatrix)
Definition SkeletalMesh.h:2121
void SetHasActiveClothingAssets(const bool InbHasActiveClothingAssets)
Definition SkeletalMesh.h:1403
virtual USkeleton * GetSkeleton() override
Definition SkeletalMesh.h:740
void SetSupportRayTracing(bool InSupportRayTracing)
Definition SkeletalMesh.h:1904
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetShadowPhysicsAsset() or USkeletalMesh::SetShadowPhysicsAsset().") TObjectPtr< class UPhysicsAsset > ShadowPhysicsAsset
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetSkeleton() or USkeletalMesh::SetSkeleton().") TObjectPtr< USkeleton > Skeleton
virtual bool WantsNegXTriMesh() override
Definition SkeletalMesh.h:2790
TArray< TObjectPtr< class UNodeMappingContainer > > & GetNodeMappingData()
Definition SkeletalMesh.h:1574
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetMorphTargets() or USkeletalMesh::SetMorphTargets().") TArray< TObjectPtr< UMorphTarget > > MorphTargets
virtual const FPerPlatformInt & GetMinLod() const override
Definition SkeletalMesh.h:1099
void SetDisableBelowMinLodStripping(FPerPlatformBool InDisableBelowMinLodStripping)
Definition SkeletalMesh.h:1136
virtual const TArray< FMatrix44f > & GetRefBasesInvMatrix() const override
Definition SkeletalMesh.h:2113
Definition Skeleton.h:295
Definition SkinnedAsset.h:47
Definition ThumbnailInfo.h:16
Definition Axis.h:9
@ Socket
Definition EngineTypes.h:3849
TMap< int32, _ValueType > ConvertQualityLevelData(const TMap< EPerQualityLevels, _ValueType > &Data)
Definition PerQualityLevelProperties.cpp:22
Definition SceneManagement.h:73
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition SkeletalMesh.h:177
Definition SkeletalMesh.h:155
Definition SkeletalMesh.h:244
Definition SkeletalMesh.h:317
Definition Color.h:486
Definition Guid.h:109
Definition MeshDescription.h:94
Definition EngineTypes.h:3040
Definition MeshUVChannelInfo.h:13
Definition PerPlatformProperties.h:384
Definition PerPlatformProperties.h:211
Definition PerQualityLevelProperties.h:233
int32 Default
Definition PerQualityLevelProperties.h:237
TMap< int32, int32 > PerQuality
Definition PerQualityLevelProperties.h:240
Definition PreviewAssetAttachComponent.h:74
Definition UnrealType.h:6865
Definition ReferenceSkeleton.h:100
Definition ResourceArray.h:31
Definition ResourceSize.h:31
Definition SkeletalMesh.h:414
UE_API const FSkeletalMeshRenderData * GetData() const
friend class USkeletalMesh
Definition SkeletalMesh.h:428
Definition SkinnedAssetCommon.h:370
Definition SkeletalMesh.h:3221
FSkeletalMeshBuildParameters(USkeletalMesh *InSkeletalMesh, const ITargetPlatform *InTargetPlatform, int32 InLODIndex, bool bInRegenDepLODs)
Definition SkeletalMesh.h:3222
const int32 LODIndex
Definition SkeletalMesh.h:3231
const ITargetPlatform * TargetPlatform
Definition SkeletalMesh.h:3230
USkeletalMesh * SkeletalMesh
Definition SkeletalMesh.h:3229
const bool bRegenDepLODs
Definition SkeletalMesh.h:3232
Definition SkeletalMesh.h:200
Definition SkinnedAssetCommon.h:129
Definition SkeletalMeshReductionSettings.h:59
Definition SkeletalMeshSampling.h:171
Definition SkeletalMeshSourceModel.h:30
Definition SkinWeightProfile.h:36
Definition SkinWeightProfile.h:238
Definition Interface_CollisionDataProviderCore.h:68
Definition Interface_CollisionDataProviderCore.h:28
Definition ObjectPtr.h:488
Definition SoftObjectPtr.h:174
Definition Tuple.h:652
Definition WeakObjectPtrTemplates.h:25
Definition BoxSphereBounds.h:25