UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SkinnedMeshComponent.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3
4#pragma once
5
6#include "CoreMinimal.h"
7#include "GPUSkinPublicDefs.h"
9#include "UObject/Object.h"
10#include "Engine/EngineTypes.h"
16#include "LODSyncInterface.h"
17#include "BoneContainer.h"
21#include "Misc/ScopeLock.h"
22
23#if WITH_EDITORONLY_DATA
25#endif // WITH_EDITORONLY_DATA
26
27#include "SkinnedMeshComponent.generated.h"
28
29enum class ESkinCacheUsage : uint8;
39class UMeshDeformer;
42class UMorphTarget;
43class USkinnedAsset;
47struct FMeshDescription;
48
49namespace Nanite
50{
51 struct FResources;
52}
53
54namespace UE::Anim
55{
56 struct FSkinnedMeshComponentExtensions;
57}
58
60DECLARE_MULTICAST_DELEGATE_ThreeParams(FOnTickPose, USkinnedMeshComponent* /*SkinnedMeshComponent*/, float /*DeltaTime*/, bool /*bNeedsValidRootMotion*/)
62
63//
64// Bone Visibility.
65//
66
68UENUM()
79
81UENUM()
90
92UENUM(BlueprintType)
114
117{
118 UE_DEPRECATED(4.21, "EMeshComponentUpdateFlag has been deprecated use EVisibilityBasedAnimTickOption instead")
120 UE_DEPRECATED(4.21, "EMeshComponentUpdateFlag has been deprecated use EVisibilityBasedAnimTickOption instead")
121 static const uint8 AlwaysTickPoseAndRefreshBones = 0;
122 UE_DEPRECATED(4.21, "EMeshComponentUpdateFlag has been deprecated use EVisibilityBasedAnimTickOption instead")
123 static const uint8 AlwaysTickPose = 1;
124 UE_DEPRECATED(4.21, "EMeshComponentUpdateFlag has been deprecated use EVisibilityBasedAnimTickOption instead")
125 static const uint8 OnlyTickMontagesWhenNotRendered = 2;
126 UE_DEPRECATED(4.21, "EMeshComponentUpdateFlag has been deprecated use EVisibilityBasedAnimTickOption instead")
127 static const uint8 OnlyTickPoseWhenRendered = 3;
128};
129
131UENUM()
132namespace EBoneSpaces
133{
134 enum Type : int
135 {
137 WorldSpace UMETA(DisplayName = "World Space"),
139 ComponentSpace UMETA(DisplayName = "Component Space"),
141 //LocalSpace UMETA( DisplayName = "Parent Bone Space" ),
142 };
143}
144
145
148UENUM(BlueprintType)
154
156using FMorphTargetWeightMap = TMap<const UMorphTarget* /* MorphTarget */, int32 /* WeightIndex */>;
157
159USTRUCT(BlueprintType, meta = (HasNativeMake = "/Script/Engine.KismetRenderingLibrary.MakeSkinWeightInfo", HasNativeBreak = "/Script/Engine.KismetRenderingLibrary.BreakSkinWeightInfo"))
171
173USTRUCT()
175{
177
178
179 UPROPERTY()
180 TArray<bool> HiddenMaterials;
181
183 FColorVertexBuffer* OverrideVertexColors;
184
186 FSkinWeightVertexBuffer* OverrideSkinWeights;
187
189 FSkinWeightVertexBuffer* OverrideProfileSkinWeights;
190
193
194 ENGINE_API void ReleaseOverrideVertexColorsAndBlock();
195 ENGINE_API bool BeginReleaseOverrideVertexColors();
196 ENGINE_API void EndReleaseOverrideVertexColors();
197private:
198 void CleanUpOverrideVertexColors();
199
200public:
201 ENGINE_API void ReleaseOverrideSkinWeightsAndBlock();
202 ENGINE_API bool BeginReleaseOverrideSkinWeights();
203 ENGINE_API void EndReleaseOverrideSkinWeights();
204private:
205 void CleanUpOverrideSkinWeights();
206};
207
208
209USTRUCT(BlueprintType)
211{
213
214 UPROPERTY(EditAnywhere, Category = "Mesh", meta = (Bitmask, BitmaskEnum = "/Script/Engine.EVertexOffsetUsageType"))
215 int32 Usage = 0;
216};
217
233
235USTRUCT()
237{
239
240 UPROPERTY()
242
243 TArray<int8> InstanceIndexForLOD;
244};
245
248
256UCLASS(hidecategories=Object, config=Engine, editinlinenew, abstract, MinimalAPI)
258{
260
261
263
265 UE_DEPRECATED(5.1, "Replaced by SkinnedAsset. Use GetSkinnedAsset()/SetSkinnedAsset() instead, or GetSkeletalMeshAsset/SetSkeletalMeshAsset() when called from a USkeletalMeshComponent.")
266 UPROPERTY(EditAnywhere, Setter = SetSkeletalMesh_DEPRECATED, BlueprintGetter = GetSkeletalMesh_DEPRECATED, Category = "Mesh|SkeletalAsset", meta = (DisallowedClasses = "/Script/ApexDestruction.DestructibleMesh", DeprecatedProperty, DeprecationMessage = "Use USkeletalMeshComponent::GetSkeletalMeshAsset() or GetSkinnedAsset() instead."))
268
269private:
271 UE_DEPRECATED(5.1, "This property isn't deprecated, but getter and setter must be used instead in order to preserve backward compatibility with the SkeletalMesh pointer.")
272 UPROPERTY(BlueprintGetter = GetSkinnedAsset, Category = "Mesh")
273 TObjectPtr<class USkinnedAsset> SkinnedAsset;
274
275public:
278
279 //
280 // LeaderPoseComponent.
281 //
282
288 UPROPERTY(BlueprintReadOnly, Category = "Mesh")
290
291#if WITH_EDITORONLY_DATA
292 UE_DEPRECATED(5.1, "This property is deprecated. Please use LeaderPoseComponent instead")
294#endif // WITH_EDITORONLY_DATA
295
299 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Mesh")
300 TArray<ESkinCacheUsage> SkinCacheUsage;
301
304 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Deformer", meta = (InlineEditConditionToggle))
305 bool bSetMeshDeformer = false;
306
308 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Deformer", meta = (editcondition = "bSetMeshDeformer"))
310
312 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Deformer")
313 bool bAlwaysUseMeshDeformer = false;
314
316 ENGINE_API void SetMeshDeformer(bool bInSetMeshDeformer, UMeshDeformer* InMeshDeformer);
317
319 ENGINE_API FMeshDeformerSet GetActiveMeshDeformers() const;
320
322 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Instanced, Category = "Deformer", meta = (DisplayName = "Deformer Settings", EditCondition = "MeshDeformerInstanceSettings!=nullptr", ShowOnlyInnerProperties))
323 TObjectPtr<UMeshDeformerInstanceSettings> MeshDeformerInstanceSettings;
324
325#if WITH_EDITORONLY_DATA
326 UE_DEPRECATED(5.4, "Replaced by MeshDeformerInstances. Call GetMeshDeformerInstance() to get the same behavior as reading MeshDeformerInstance.")
327 UPROPERTY(Transient, BlueprintReadOnly, BlueprintGetter = GetMeshDeformerInstance, Category = "Deformer", meta = (DeprecatedProperty, DeprecationMessage = "Use the GetMeshDeformerInstance function instead"))
329#endif // WITH_EDITORONLY_DATA
330
333 FMeshDeformerInstanceSet MeshDeformerInstances;
334public:
335 const FMeshDeformerInstanceSet& GetMeshDeformerInstances() const { return MeshDeformerInstances; }
336
338private:
340 void CreateMeshDeformerInstances(const FMeshDeformerSet& DeformerSet);
342 void ReleaseMeshDeformerInstances();
343
344public:
345 UFUNCTION(BlueprintPure, Category = "Components|SkinnedMesh")
346 ENGINE_API UMeshDeformerInstance* GetMeshDeformerInstance() const;
347
355 ENGINE_API UMeshDeformerInstance* GetMeshDeformerInstanceForLOD(int32 LODIndex) const;
356
358 ENGINE_API virtual int32 GetMeshDeformerMaxLOD() const;
359
360#if WITH_EDITORONLY_DATA
361private:
363public:
369#endif // WITH_EDITORONLY_DATA
370
371public:
372
375 {
376 return bDoubleBufferedComponentSpaceTransforms ? GetEditableBoneVisibilityStates() : PreviousBoneVisibilityStates;
377 }
378
380 {
381 return bDoubleBufferedComponentSpaceTransforms ? GetEditableComponentSpaceTransforms() : PreviousComponentSpaceTransformsArray;
382 }
383
385 {
386 const USkinnedMeshComponent* LeaderPoseComponentPtr = LeaderPoseComponent.Get();
387 return (LeaderPoseComponentPtr ? LeaderPoseComponentPtr->CurrentBoneTransformRevisionNumber : CurrentBoneTransformRevisionNumber);
388 }
389
391 {
392 const USkinnedMeshComponent* LeaderPoseComponentPtr = LeaderPoseComponent.Get();
393 return (LeaderPoseComponentPtr ? LeaderPoseComponentPtr->PreviousBoneTransformRevisionNumber : PreviousBoneTransformRevisionNumber);
394 }
395
397 {
398 const USkinnedMeshComponent* LeaderPoseComponentPtr = LeaderPoseComponent.Get();
399 return (LeaderPoseComponentPtr ? LeaderPoseComponentPtr->CurrentBoneTransformFrame : CurrentBoneTransformFrame);
400 }
401
402 /* this update renderer with new revision number twice so to clear bone velocity for motion blur or temporal AA */
403 ENGINE_API void ClearMotionVector();
404
405 /* Forcibly update the renderer with a new revision number to assign the current bone velocity for motion blur or temporal AA */
406 ENGINE_API void ForceMotionVector();
407
408private:
409 ENGINE_API void UpdateBoneTransformRevisionNumber();
410 ENGINE_API EPreviousBoneTransformUpdateMode GetPreviousBoneTransformUpdateMode();
411
412 enum class EBoneTransformUpdateMethod
413 {
414 AnimationUpdate,
415 ClearMotionVector,
416 ForceMotionVector
417 };
418 TArray<EBoneTransformUpdateMethod> BoneTransformUpdateMethodQueue;
419
421 TArray<FTransform> ComponentSpaceTransformsArray[2];
422
423#if WITH_STATE_STREAM_ACTOR
425#endif
426
427protected:
431
435
436protected:
439
442
445
448
451
454
457
463
469
472 {
474 : RelativeTransform(FTransform::Identity)
475 , CommonAncestorBoneIndex(INDEX_NONE)
476 {}
477
482
488
491 };
492
498
503
504public:
505#if WITH_EDITORONLY_DATA
509 UPROPERTY()
511#endif
512
513#if UE_ENABLE_DEBUG_DRAWING
515 TOptional<FLinearColor> DebugDrawColor;
516#endif
517
518protected:
521
522public:
523 const TArray<int32>& GetLeaderBoneMap() const { return LeaderBoneMap; }
524
525 UE_DEPRECATED(5.1, "This method has been deprecated. Please use the GetLeaderBoneMap.")
526 const TArray<int32>& GetMasterBoneMap() const { return GetLeaderBoneMap(); }
527
529 ENGINE_API const FExternalMorphWeightData& GetExternalMorphWeights(int32 LOD) const;
530
532 ENGINE_API FExternalMorphWeightData& GetExternalMorphWeights(int32 LOD);
533
542 ENGINE_API void AddExternalMorphSet(int32 LOD, int32 ID, TSharedPtr<FExternalMorphSet> MorphSet);
543
545 ENGINE_API void RemoveExternalMorphSet(int32 LOD, int32 ID);
546
548 ENGINE_API void ClearExternalMorphSets(int32 LOD);
549
551 ENGINE_API bool HasExternalMorphSet(int32 LOD, int32 ID) const;
552
554 ENGINE_API bool IsValidExternalMorphSetLODIndex(int32 LOD) const;
555
557 const FExternalMorphSets& GetExternalMorphSets(int32 LOD) const { return ExternalMorphSets[LOD]; }
558 FExternalMorphSets& GetExternalMorphSets(int32 LOD) { return ExternalMorphSets[LOD]; }
559
561 const TArray<FExternalMorphSets>& GetExternalMorphSetsArray() const { return ExternalMorphSets; }
562
569 ENGINE_API void GetCPUSkinnedVertices(TArray<struct FFinalSkinVertex>& OutVertices, int32 InLODIndex) const;
570
571 ENGINE_API void GetCPUSkinnedCachedFinalVertices(TArray<FFinalSkinVertex>& OutVertices) const;
572
573 ENGINE_API virtual const Nanite::FResources* GetNaniteResources() const;
574
578 ENGINE_API virtual bool HasValidNaniteData() const;
579
580
581#if WITH_EDITOR
585 virtual void PostAssetCompilation() {};
586#endif
587
588#if UE_ENABLE_DEBUG_DRAWING
590 bool ShouldDrawDebugSkeleton() const
591 {
592 return bDrawDebugSkeleton
593#if WITH_EDITORONLY_DATA
595#endif
596 ;
597 }
598
600 void SetDrawDebugSkeleton(bool bInDraw) { bDrawDebugSkeleton = bInDraw; }
601
603 const TOptional<FLinearColor>& GetDebugDrawColor() const { return DebugDrawColor; }
604
606 void SetDebugDrawColor(const FLinearColor& InColor) { DebugDrawColor = InColor; }
607#endif
608
611
614
617
625
626#if WITH_EDITORONLY_DATA
627private:
630
633
636
639#endif // WITH_EDITORONLY_DATA
640
641public:
642 //
643 // Physics.
644 //
645
649 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Physics)
650 TObjectPtr<class UPhysicsAsset> PhysicsAssetOverride;
651
652 //
653 // Level of detail.
654 //
655
657 UE_DEPRECATED(4.24, "Direct access to ForcedLodModel is deprecated. Please use its getter and setter instead.")
658 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=LOD)
659 int32 ForcedLodModel;
660
661private:
678 int32 ForceStreamedLodModel;
679public:
680
685 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=LOD)
686 int32 MinLodModel;
687
692 UE_DEPRECATED(4.27, "Direct access to PredictedLODLevel has been deprecated and will be removed in a future version. Please use Get/SetPredictedLODLevel() accessors.")
693 int32 PredictedLODLevel;
694
696 float MaxDistanceFactor;
697
704 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category=SkeletalMesh)
705 float StreamingDistanceMultiplier;
706
708 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Rendering)
709 float NanitePixelProgrammableDistance;
710
713 float ExternalInterpolationAlpha;
714
715 /* Non-URO-based delta time used to tick the pose */
716 float ExternalDeltaTime;
717
718public:
722
725 TArray<uint8> BoneVisibilityStates[2];
726
728 ERHIFeatureLevel::Type CachedSceneFeatureLevel;
729
730public:
731 /*
732 * This is tick animation frequency option based on this component rendered or not or using montage
733 * You can change this default value in the INI file
734 * Mostly related with performance
735 */
736 UPROPERTY(Interp, EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Config, Category=Optimization)
737 EVisibilityBasedAnimTickOption VisibilityBasedAnimTickOption;
738
739#if WITH_EDITOR
740 UE_DEPRECATED(4.21, "MeshComponentUpdateFlag has been renamed VisibilityBasedAnimTickOption")
741 uint8& MeshComponentUpdateFlag = *(uint8*)&VisibilityBasedAnimTickOption;
742#endif
743
744protected:
747
750
751protected:
754
757
760public:
761
763 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = LOD)
764 uint8 bOverrideMinLod:1;
765
771 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = SkeletalMesh)
772 uint8 bUseBoundsFromLeaderPoseComponent : 1;
773
774#if WITH_EDITORONLY_DATA
775 UE_DEPRECATED(5.1, "This property is deprecated. Please use bUseBoundsFromLeaderPoseComponent instead")
777#endif // WITH_EDITORONLY_DATA
778
781 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = SkeletalMesh)
782 uint8 bIncludeComponentLocationIntoBounds : 1;
783
785 UPROPERTY()
786 uint8 bForceWireframe:1;
787
788#if WITH_EDITORONLY_DATA
790 UPROPERTY(EditAnywhere, AdvancedDisplay, Category = Rendering)
792#endif
793
795 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = SkeletalMesh)
796 uint8 bDisableMorphTarget:1;
797
799 UPROPERTY()
800 uint8 bHideSkin:1;
804 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=SkeletalMesh)
805 uint8 bPerBoneMotionBlur:1;
806
807 //
808 // Misc.
809 //
810
812 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category=Optimization)
813 uint8 bComponentUseFixedSkelBounds:1;
814
816 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category=Optimization)
817 uint8 bConsiderAllBodiesForBounds:1;
818
822 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = Rendering)
823 uint8 bSyncAttachParentLOD : 1;
824
825
828 uint8 bCanHighlightSelectedSections:1;
829
832 uint8 bRecentlyRendered:1;
833
839 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Lighting, meta=(EditCondition="CastShadow && (FirstPersonPrimitiveType != EFirstPersonPrimitiveType::FirstPerson)", DisplayName = "Capsule Direct Shadow"))
840 uint8 bCastCapsuleDirectShadow:1;
841
846 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Lighting, meta=(EditCondition="CastShadow && (FirstPersonPrimitiveType != EFirstPersonPrimitiveType::FirstPerson)", DisplayName = "Capsule Indirect Shadow"))
847 uint8 bCastCapsuleIndirectShadow:1;
848
850 UE_DEPRECATED(4.24, "Direct access to bCPUSkinning is deprecated. Please use its getter and setter instead.")
852 uint8 bCPUSkinning : 1;
853
860 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category=Optimization)
861 uint8 bUseScreenRenderStateForUpdate:1;
862
863 // Update Rate
866 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category=Optimization)
867 uint8 bEnableUpdateRateOptimizations:1;
868
872 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category=Optimization)
873 uint8 bDisplayDebugUpdateRateOptimizations:1;
874
878 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Optimization)
879 uint8 bRenderStatic:1;
880
882 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = LOD)
883 uint8 bIgnoreLeaderPoseComponentLOD : 1;
884
885#if WITH_EDITORONLY_DATA
886 UE_DEPRECATED(5.1, "This property is deprecated. Please use bIgnoreLeaderPoseComponentLOD instead")
888#endif // WITH_EDITORONLY_DATA
889
891 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Lighting, meta = (UIMin = "0", UIMax = "1", DisplayName = "Sort Triangles"))
892 uint8 bSortTriangles : 1;
893
896 uint8 bDoubleBufferedComponentSpaceTransforms : 1;
897
899 uint8 bNeedToFlipSpaceBaseBuffers : 1;
900
903 mutable uint8 bCachedLocalBoundsUpToDate:1;
905 mutable uint8 bCachedWorldSpaceBoundsUpToDate:1;
906
908 uint8 bBoneVisibilityDirty:1;
909
910private:
913 uint8 bForceMeshObjectUpdate:1;
914
917 uint8 bExternalTickRateControlled:1;
918
920 uint8 bExternalInterpolate:1;
921
923 uint8 bExternalUpdate:1;
924
926 uint8 bExternalEvaluationRateLimited:1;
927
929 uint8 bMipLevelCallbackRegistered:1;
930
933 uint8 bFollowerShouldTickPose : 1;
934
936 uint8 bHasSocketAttachments : 1;
937
938#if UE_ENABLE_DEBUG_DRAWING
939private:
941 uint8 bDrawDebugSkeleton:1;
942#endif
943
944public:
946 void EnableExternalTickRateControl(bool bInEnable) { bExternalTickRateControlled = bInEnable; }
947
949 bool IsUsingExternalTickRateControl() const { return bExternalTickRateControlled; }
950
952 void SetExternalTickRate(uint8 InTickRate) { ExternalTickRate = InTickRate; }
953
955 uint8 GetExternalTickRate() const { return ExternalTickRate; }
956
958 void EnableExternalInterpolation(bool bInEnable) { bExternalInterpolate = bInEnable; }
959
961 bool IsUsingExternalInterpolation() const { return bExternalInterpolate && bExternalEvaluationRateLimited; }
962
964 void EnableExternalUpdate(bool bInEnable) { bExternalUpdate = bInEnable; }
965
967 void SetExternalInterpolationAlpha(float InAlpha) { ExternalInterpolationAlpha = InAlpha; }
968
970 void SetExternalDeltaTime(float InDeltaTime) { ExternalDeltaTime = InDeltaTime; }
971
973 void EnableExternalEvaluationRateLimiting(bool bInEnable) { bExternalEvaluationRateLimited = bInEnable; }
974
976 const FSkeletalMeshObject* GetMeshObject() const { return MeshObject; }
977
981 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Lighting, meta=(UIMin = "0", UIMax = "1", EditCondition="bCastCapsuleIndirectShadow", DisplayName = "Capsule Indirect Shadow Min Visibility"))
982 float CapsuleIndirectShadowMinVisibility;
983
986
989
991 void* MeshObjectFactoryUserData;
992
994 FSkeletalMeshObject* PreviousMeshObject;
995
997 ENGINE_API FSkeletalMeshRenderData* GetSkeletalMeshRenderData() const;
998
1000 ENGINE_API virtual void GetUpdateClothSimulationData_AnyThread(TMap<int32, FClothSimulData>& OutClothSimulData, FMatrix& OutLocalToWorld, float& OutClothBlendWeight) const override;
1001
1008 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1009 ENGINE_API virtual void SetPhysicsAsset(class UPhysicsAsset* NewPhysicsAsset, bool bForceReInit = false);
1010
1012 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh", meta=(ScriptName="GetNumLods;GetNumLODs"))
1013 ENGINE_API int32 GetNumLODs() const;
1014
1020 UE_DEPRECATED(5.5, "Use USkinnedMeshComponent::OverrideMinLOD() instead.")
1021 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh", meta = (DeprecatedFunction, DeprecationMessage = "Use USkinnedMeshComponent::OverrideMinLOD() instead."))
1022 ENGINE_API void SetMinLOD(int32 InNewMinLOD);
1023
1029 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1030 ENGINE_API void OverrideMinLOD(int32 InNewMinLOD);
1031
1037 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1038 ENGINE_API void SetForcedLOD(int32 InNewForcedLOD);
1039
1041 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1042 ENGINE_API int32 GetForcedLOD() const;
1043
1044#if WITH_EDITOR
1050 ENGINE_API virtual int32 GetLODBias() const;
1051#endif
1052
1053 UFUNCTION(BlueprintCallable, Category="Lighting")
1054 ENGINE_API void SetCastCapsuleDirectShadow(bool bNewValue);
1055
1056 UFUNCTION(BlueprintCallable, Category="Lighting")
1057 ENGINE_API void SetCastCapsuleIndirectShadow(bool bNewValue);
1058
1059 UFUNCTION(BlueprintCallable, Category="Lighting")
1060 ENGINE_API void SetCapsuleIndirectShadowMinVisibility(float NewValue);
1061
1065 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1066 ENGINE_API int32 GetNumBones() const;
1067
1077 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1078 ENGINE_API int32 GetBoneIndex( FName BoneName ) const;
1079
1086 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1087 ENGINE_API FName GetBoneName(int32 BoneIndex) const;
1088
1097 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1098 ENGINE_API FName GetSocketBoneName(FName InSocketName) const;
1099
1106 UE_DEPRECATED(5.1, "Use USkeletalMeshComponent::SetSkeletalMesh() or SetSkinnedAssetAndUpdate() instead.")
1107 ENGINE_API virtual void SetSkeletalMesh(class USkeletalMesh* NewMesh, bool bReinitPose = true);
1108
1116 UE_DEPRECATED(5.1, "Use USkeletalMeshComponent::GetSkeletalMeshAsset() or GetSkinnedAsset() instead.")
1117 UFUNCTION(BlueprintPure, Category = "Components|SkinnedMesh", DisplayName = "Get Skeletal Mesh", meta = (DeprecatedFunction, DeprecationMessage = "Use USkeletalMeshComponent::GetSkeletalMeshAsset() or GetSkinnedAsset() instead."))
1118 ENGINE_API class USkeletalMesh* GetSkeletalMesh_DEPRECATED() const;
1119
1120 UE_DEPRECATED(5.1, "Use USkeletalMeshComponent::SetSkinnedAssetAndUpdate() instead.")
1121 ENGINE_API void SetSkeletalMesh_DEPRECATED(USkeletalMesh* NewMesh);
1122
1129 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1130 ENGINE_API virtual void SetSkinnedAssetAndUpdate(class USkinnedAsset* NewMesh, bool bReinitPose = true);
1131
1137 ENGINE_API void SetSkinnedAsset(class USkinnedAsset* InSkinnedAsset);
1138
1144 UFUNCTION(BlueprintPure, Category = "Components|SkinnedMesh")
1145 ENGINE_API USkinnedAsset* GetSkinnedAsset() const;
1146
1152 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1153 ENGINE_API void SetMeshDeformer(UMeshDeformer* InMeshDeformer);
1154
1160 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1161 ENGINE_API void UnsetMeshDeformer();
1162
1168 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1169 ENGINE_API void SetAlwaysUseMeshDeformer(bool bShouldAlwaysUseMeshDeformer);
1170
1174 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1175 ENGINE_API bool GetAlwaysUseMeshDeformer() const;
1176
1184 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1185 ENGINE_API FName GetParentBone(FName BoneName) const;
1186
1196 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1197 ENGINE_API FTransform GetDeltaTransformFromRefPose(FName BoneName, FName BaseName = NAME_None) const;
1198
1211 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1212 ENGINE_API bool GetTwistAndSwingAngleOfDeltaRotationFromRefPose(FName BoneName, float& OutTwistAngle, float& OutSwingAngle) const;
1213
1214 ENGINE_API bool IsSkinCacheAllowed(int32 LodIdx) const;
1215
1216 ENGINE_API bool HasMeshDeformer() const;
1217 ENGINE_API bool HasMeshDeformer(int32 LodIdx) const;
1218
1219 UE_DEPRECATED(5.5, "This is no longer relevant. Dynamic data is always updated immediately.")
1220 bool GetForceUpdateDynamicDataImmediately() const { return true; }
1221
1222 UE_DEPRECATED(5.5, "This is no longer relevant. Dynamic data is always updated immediately.")
1223 void SetForceUpdateDynamicDataImmediately(bool bForceUpdateImmediately) {}
1224
1228 ENGINE_API int32 ComputeMinLOD() const;
1229
1235 int32 GetValidMinLOD(const int32 InMinLODIndex) const;
1236
1237public:
1238 //~ Begin UObject Interface
1239 ENGINE_API virtual void BeginDestroy() override;
1240 ENGINE_API virtual void Serialize(FArchive& Ar) override;
1241 ENGINE_API virtual void PostLoad() override;
1242 ENGINE_API virtual void GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize) override;
1243 ENGINE_API virtual FString GetDetailedInfoInternal() const override;
1244#if WITH_EDITOR
1245 ENGINE_API virtual bool CanEditChange(const FProperty* InProperty) const override;
1246 ENGINE_API virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
1247 ENGINE_API virtual EDataValidationResult IsDataValid(class FDataValidationContext& Context) const override;
1248#endif // WITH_EDITOR
1249
1250protected:
1251 //~ Begin UActorComponent Interface
1252 ENGINE_API virtual void OnRegister() override;
1253 ENGINE_API virtual void OnUnregister() override;
1254 ENGINE_API virtual void BeginPlay() override;
1255 ENGINE_API virtual void CreateRenderState_Concurrent(FRegisterComponentContext* Context) override;
1256 ENGINE_API virtual void SendRenderDynamicData_Concurrent() override;
1257 ENGINE_API virtual void DestroyRenderState_Concurrent() override;
1258 ENGINE_API virtual bool RequiresGameThreadEndOfFrameRecreate() const override;
1259 ENGINE_API virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
1260 ENGINE_API virtual UObject const* AdditionalStatObject() const override;
1261 //~ End UActorComponent Interface
1262
1263public:
1264 //~ Begin USceneComponent Interface
1265#if WITH_EDITOR
1266 ENGINE_API virtual bool GetMaterialPropertyPath(int32 ElementIndex, UObject*& OutOwner, FString& OutPropertyPath, FProperty*& OutProperty) override;
1267#endif // WITH_EDITOR
1268 ENGINE_API virtual FBoxSphereBounds CalcBounds(const FTransform& LocalToWorld) const override;
1269 ENGINE_API virtual void UpdateBounds() override;
1270 ENGINE_API virtual FTransform GetSocketTransform(FName InSocketName, ERelativeTransformSpace TransformSpace = RTS_World) const override;
1271 ENGINE_API virtual bool DoesSocketExist(FName InSocketName) const override;
1272 ENGINE_API virtual bool HasAnySockets() const override;
1273 ENGINE_API virtual void QuerySupportedSockets(TArray<FComponentSocketDescription>& OutSockets) const override;
1274 ENGINE_API virtual bool UpdateOverlapsImpl(const TOverlapArrayView* PendingOverlaps=nullptr, bool bDoNotifies=true, const TOverlapArrayView* OverlapsAtEndLocation=nullptr) override;
1275 ENGINE_API virtual void OnChildAttached(USceneComponent* ChildComponent) override;
1276 ENGINE_API virtual void OnChildDetached(USceneComponent* ChildComponent) override;
1277 //~ End USceneComponent Interface
1278
1279 //~ Begin UPrimitiveComponent Interface
1280 ENGINE_API virtual UMaterialInterface* GetMaterial(int32 MaterialIndex) const override;
1281 ENGINE_API virtual int32 GetMaterialIndex(FName MaterialSlotName) const override;
1282 ENGINE_API virtual TArray<FName> GetMaterialSlotNames() const override;
1283 ENGINE_API virtual bool IsMaterialSlotNameValid(FName MaterialSlotName) const override;
1284 ENGINE_API virtual FPrimitiveSceneProxy* CreateSceneProxy() override;
1285 ENGINE_API virtual void GetUsedMaterials(TArray<UMaterialInterface*>& OutMaterials, bool bGetDebugMaterials = false) const override;
1286 ENGINE_API virtual bool GetMaterialStreamingData(int32 MaterialIndex, FPrimitiveMaterialInfo& MaterialData) const override;
1288 ENGINE_API virtual int32 GetNumMaterials() const override;
1289 virtual float GetStreamingScale() const override { return GetComponentTransform().GetMaximumAxisScale(); }
1290 ENGINE_API virtual void GetPrimitiveStats(FPrimitiveStats& PrimitiveStats) const override;
1291 //~ End UPrimitiveComponent Interface
1292
1293 //~ Begin UMeshComponent Interface
1294 ENGINE_API virtual void RegisterLODStreamingCallback(FLODStreamingCallback&& Callback, int32 LODIdx, float TimeoutSecs, bool bOnStreamIn) override;
1295 ENGINE_API virtual void RegisterLODStreamingCallback(FLODStreamingCallback&& CallbackStreamingStart, FLODStreamingCallback&& CallbackStreamingDone, float TimeoutStartSecs, float TimeoutDoneSecs) override;
1296 ENGINE_API virtual bool PrestreamMeshLODs(float Seconds) override;
1297 //~ End UMeshComponent Interface
1298
1300 ENGINE_API void GetPreSkinnedLocalBounds(FBoxSphereBounds& OutBounds) const;
1301
1303 ENGINE_API void ResizeExternalMorphTargetSets();
1304
1306 ENGINE_API void RefreshExternalMorphTargetWeights(bool bZeroOldWeights = true);
1307
1313 ENGINE_API void SetForceWireframe(bool InForceWireframe);
1314
1316 ENGINE_API virtual void CollectPSOPrecacheData(const FPSOPrecacheParams& BasePrecachePSOParams, FMaterialInterfacePSOPrecacheParamsList& OutParams) override;
1317
1318#if WITH_EDITOR
1320 int32 GetSectionPreview() const { return SectionIndexPreview; }
1323
1328
1333
1338
1339#endif // WITH_EDITOR
1340
1343
1345 ENGINE_API virtual bool ShouldNaniteSkin();
1346
1353 ENGINE_API virtual bool ShouldCPUSkin() const;
1354
1359 ENGINE_API bool GetCPUSkinningEnabled() const;
1360
1368 ENGINE_API void SetCPUSkinningEnabled(bool bEnable, bool bRecreateRenderStateImmediately = false);
1369
1377
1387
1397
1407
1409 ENGINE_API void CacheRefToLocalMatrices(TArray<FMatrix44f>& OutRefToLocal) const;
1410
1412 ENGINE_API void GetCurrentRefToLocalMatrices(TArray<FMatrix44f>& OutRefToLocals, int32 InLodIdx, const TArray<FBoneIndexType>* ExtraRequiredBoneIndices = nullptr) const;
1413
1415 {
1416 return LeaderPoseComponent.IsValid() ? LeaderPoseComponent.Get() : this;
1417 }
1418
1424 UFUNCTION(BlueprintCallable, Category="Transformation", meta=(Keywords="Bone"))
1425 FTransform GetBoneTransform(FName InBoneName, ERelativeTransformSpace TransformSpace = RTS_World) const { return GetSocketTransform(InBoneName, TransformSpace); }
1426
1432 ENGINE_API FColor GetVertexColor(int32 VertexIndex) const;
1433
1435 ENGINE_API void SetVertexColorOverride(int32 LODIndex, const TArray<FColor>& VertexColors);
1436
1438 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh", meta = (DisplayName = "Set Vertex Color Override"))
1439 ENGINE_API void SetVertexColorOverride_LinearColor(int32 LODIndex, const TArray<FLinearColor>& VertexColors);
1440
1442 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1443 ENGINE_API void ClearVertexColorOverride(int32 LODIndex);
1450 ENGINE_API FVector2D GetVertexUV(int32 VertexIndex, uint32 UVChannel) const;
1451
1453 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1454 ENGINE_API void SetSkinWeightOverride(int32 LODIndex, const TArray<FSkelMeshSkinWeightInfo>& SkinWeights);
1455
1457 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1458 ENGINE_API void ClearSkinWeightOverride(int32 LODIndex);
1459
1465 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1467
1470 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1472
1474 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1475 ENGINE_API void ClearAllSkinWeightProfiles();
1476
1478 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1479 ENGINE_API void UnloadSkinWeightProfile(FName InProfileName);
1480
1482 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1483 ENGINE_API FName GetCurrentSkinWeightProfileName(ESkinWeightProfileLayer InLayer = ESkinWeightProfileLayer::Primary) const;
1484
1486 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1487 ENGINE_API TArray<FName> GetCurrentSkinWeightProfileLayerNames() const;
1488
1490 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1491 ENGINE_API bool IsUsingSkinWeightProfile() const;
1492
1494 bool IsSkinWeightProfilePending() const { return bSkinWeightProfilePending; }
1495
1497 ENGINE_API void UpdateSkinWeightOverrideBuffer();
1498protected:
1502 bool SetSkinWeightProfileStack(const FSkinWeightProfileStack& InProfileStack);
1503
1505 FName CurrentSkinWeightProfileLayers[2] = {NAME_None};
1506public:
1508 ENGINE_API FSkinWeightVertexBuffer* GetSkinWeightBuffer(int32 LODIndex) const;
1509
1511 ENGINE_API virtual void SetRefPoseOverride(const TArray<FTransform>& NewRefPoseTransforms);
1512
1514 virtual const TSharedPtr<FSkelMeshRefPoseOverride>& GetRefPoseOverride() const { return RefPoseOverride; }
1515
1517 ENGINE_API virtual void ClearRefPoseOverride();
1518
1531 virtual void RefreshBoneTransforms(FActorComponentTickFunction* TickFunction = nullptr) PURE_VIRTUAL(USkinnedMeshComponent::RefreshBoneTransforms, );
1532
1533protected:
1542 virtual void DispatchParallelTickPose(FActorComponentTickFunction* TickFunction) {}
1543
1546
1548 uint8 ComputeMaxFirstLODIdxInAttachmentTree() const;
1549
1550public:
1559 ENGINE_API virtual void TickPose(float DeltaTime, bool bNeedsValidRootMotion);
1560
1565
1570 ENGINE_API virtual void UpdateFollowerComponent();
1571
1572 UE_DEPRECATED(5.1, "This method has been deprecated. Please use UpdateFollowerComponent instead.")
1573 virtual void UpdateSlaveComponent() { UpdateFollowerComponent(); }
1574
1580 ENGINE_API virtual bool UpdateLODStatus();
1581
1583 UFUNCTION(BlueprintPure, Category = "Components|SkinnedMesh")
1584 int32 GetPredictedLODLevel() const
1585 {
1587 return PredictedLODLevel;
1589 }
1590
1591protected:
1593
1601
1602public:
1603 virtual void UpdateVisualizeLODString(FString& DebugString) {}
1604
1609 ENGINE_API virtual void FinalizeBoneTransform();
1610
1612 ENGINE_API void InitLODInfos();
1613
1617 ENGINE_API void RebuildVisibilityArray();
1618
1622 ENGINE_API void UpdateMorphMaterialUsageOnProxy();
1623
1627 ENGINE_API void AllowDuplicateTransformUpdates(bool bAllow);
1628
1631 {
1632 return ComponentSpaceTransformsArray[CurrentReadComponentTransforms];
1633 }
1634
1637 {
1638 return ComponentSpaceTransformsArray[CurrentEditableComponentTransforms];
1639 }
1641 {
1642 return ComponentSpaceTransformsArray[CurrentEditableComponentTransforms];
1643 }
1644
1645public:
1648 {
1649 return GetComponentSpaceTransforms().Num();
1650 }
1651
1654 {
1655 return BoneVisibilityStates[CurrentReadComponentTransforms];
1656 }
1657
1660 {
1661 return BoneVisibilityStates[CurrentEditableComponentTransforms];
1662 }
1664 {
1665 return BoneVisibilityStates[CurrentEditableComponentTransforms];
1666 }
1667
1668 ENGINE_API void SetComponentSpaceTransformsDoubleBuffering(bool bInDoubleBufferedComponentSpaceTransforms);
1669
1671 {
1672 ensure(bCachedLocalBoundsUpToDate || bCachedWorldSpaceBoundsUpToDate);
1673 if (bCachedWorldSpaceBoundsUpToDate)
1674 {
1675 return CachedWorldOrLocalSpaceBounds.TransformBy(CachedWorldToLocalTransform);
1676 }
1677 else
1678 {
1679 return CachedWorldOrLocalSpaceBounds;
1680 }
1681 }
1682
1690 ENGINE_API virtual bool ShouldUpdateTransform(bool bLODHasChanged) const;
1691
1693 {
1694 public:
1698
1699 private:
1701 };
1702
1703protected:
1706
1708 ENGINE_API void FlipEditableSpaceBases();
1709
1710public:
1716 ENGINE_API virtual bool ShouldTickPose() const;
1717protected:
1718
1723 ENGINE_API virtual bool AllocateTransformData();
1724 ENGINE_API virtual void DeallocateTransformData();
1725
1728 mutable FBoxSphereBounds CachedWorldOrLocalSpaceBounds;
1730 mutable FMatrix CachedWorldToLocalTransform;
1731
1732public:
1733#if WITH_EDITOR
1734 //~ Begin IInterface_AsyncCompilation Interface.
1735 ENGINE_API virtual bool IsCompiling() const override;
1736 //~ End IInterface_AsyncCompilation Interface.
1737#endif
1738
1740 ENGINE_API void InvalidateCachedBounds();
1741
1742protected:
1743
1750 ENGINE_API FBoxSphereBounds CalcMeshBound(const FVector3f& RootOffset, bool UsePhysicsAsset, const FTransform& Transform) const;
1751
1755 ENGINE_API bool ShouldUpdateBoneVisibility() const;
1756
1757protected:
1758
1760 ENGINE_API void ReleaseUpdateRateParams();
1761
1763 ENGINE_API void RefreshUpdateRateParams();
1764
1765private:
1767 ENGINE_API void TickUpdateRate(float DeltaTime, bool bNeedsValidRootMotion);
1768
1769public:
1777 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
1778 ENGINE_API void SetLeaderPoseComponent(USkinnedMeshComponent* NewLeaderBoneComponent, bool bForceUpdate = false, bool bInFollowerShouldTickPose = false);
1779
1780 UE_DEPRECATED(5.1, "This method has been deprecated. Please use SetLeaderPoseComponent instead.")
1781 void SetMasterPoseComponent(USkinnedMeshComponent* NewMasterBoneComponent, bool bForceUpdate = false) { SetLeaderPoseComponent(NewMasterBoneComponent, bForceUpdate); }
1782
1784 ENGINE_API const TArray< TWeakObjectPtr<USkinnedMeshComponent> >& GetFollowerPoseComponents() const;
1785
1786 UE_DEPRECATED(5.1, "This method has been deprecated. Please use GetFollowerPoseComponents instead.")
1787 const TArray< TWeakObjectPtr<USkinnedMeshComponent> >& GetSlavePoseComponents() const { return GetFollowerPoseComponents(); }
1788
1789protected:
1791 ENGINE_API virtual void AddFollowerPoseComponent(USkinnedMeshComponent* SkinnedMeshComponent);
1792
1793 UE_DEPRECATED(5.1, "This method has been deprecated. Please use AddFollowerPoseComponent instead.")
1794 virtual void AddSlavePoseComponent(USkinnedMeshComponent* SkinnedMeshComponent) { AddFollowerPoseComponent(SkinnedMeshComponent); }
1795
1797 ENGINE_API virtual void RemoveFollowerPoseComponent(USkinnedMeshComponent* SkinnedMeshComponent);
1798
1799 UE_DEPRECATED(5.1, "This method has been deprecated. Please use RemoveFollowerPoseComponent instead.")
1800 virtual void RemoveSlavePoseComponent(USkinnedMeshComponent* SkinnedMeshComponent) { RemoveFollowerPoseComponent(SkinnedMeshComponent); }
1801
1802protected:
1804 ENGINE_API virtual UMaterialInterface* GetDefaultOverlayMaterial() const override;
1805
1807 ENGINE_API virtual float GetDefaultOverlayMaterialMaxDrawDistance() const override;
1808
1809 /*
1810 * Get all default LOD sections overlay materials used by a mesh.
1811 * The implementer must add all LOD sections and set them to null if there is no value.
1812 * We need all sections in case they are all active we wont add the global mesh MaterialOverlay in GetUseMaterials or GetMaterialRelevance.
1813 */
1814 ENGINE_API virtual void GetDefaultMaterialSlotsOverlayMaterial(TArray<TObjectPtr<UMaterialInterface>>& OutMaterialSlotOverlayMaterials) const override;
1815
1816 void UpdateCachedSocketAttachmentFlag();
1817
1818public:
1824 ENGINE_API void RefreshFollowerComponents();
1825
1826 UE_DEPRECATED(5.1, "This method has been deprecated. Please use RefreshFollowerComponents instead.")
1827 void RefreshSlaveComponents() { RefreshFollowerComponents(); }
1828
1832 ENGINE_API void UpdateLeaderBoneMap();
1833
1834 UE_DEPRECATED(5.1, "This method has been deprecated. Please use UpdateLeaderBoneMap instead.")
1835 void UpdateMasterBoneMap() { UpdateLeaderBoneMap(); }
1836
1843 ENGINE_API class USkeletalMeshSocket const* GetSocketInfoByName(FName InSocketName, FTransform& OutTransform, int32& OutBoneIndex) const;
1844
1849 ENGINE_API class USkeletalMeshSocket const* GetSocketByName( FName InSocketName ) const;
1850
1851 ENGINE_API void AddSocketOverride(FName SourceSocketName, FName OverrideSocketName, bool bWarnHasOverrided = true);
1852 ENGINE_API void RemoveSocketOverrides(FName SourceSocketName);
1853 ENGINE_API void RemoveAllSocketOverrides();
1854
1856 ENGINE_API bool HasAnyAttachedSockets() const;
1857
1865 ENGINE_API FMatrix GetBoneMatrix( int32 BoneIndex ) const;
1866
1874 ENGINE_API FTransform GetBoneTransform( int32 BoneIndex, const FTransform& LocalToWorld ) const;
1875
1883 ENGINE_API FTransform GetBoneTransform( int32 BoneIndex ) const;
1884
1892 ENGINE_API FQuat GetBoneQuaternion(FName BoneName, EBoneSpaces::Type Space = EBoneSpaces::WorldSpace) const;
1893
1901 ENGINE_API FVector GetBoneLocation( FName BoneName, EBoneSpaces::Type Space = EBoneSpaces::WorldSpace) const;
1902
1908 ENGINE_API void GetBoneNames(TArray<FName>& BoneNames);
1909
1919 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1920 ENGINE_API bool BoneIsChildOf(FName BoneName, FName ParentBoneName) const;
1921
1929 UFUNCTION(BlueprintPure, Category = "Components|SkinnedMesh")
1930 ENGINE_API FVector GetRefPosePosition(int32 BoneIndex) const;
1931
1939 UFUNCTION(BlueprintPure, Category = "Components|SkinnedMesh")
1940 ENGINE_API FTransform GetRefPoseTransform(int32 BoneIndex) const;
1941
1949 ENGINE_API FVector GetBoneAxis(FName BoneName, EAxis::Type Axis) const;
1950
1961 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1962 ENGINE_API void TransformToBoneSpace( FName BoneName, FVector InPosition, FRotator InRotation, FVector& OutPosition, FRotator& OutRotation ) const;
1963
1973 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
1974 ENGINE_API void TransformFromBoneSpace( FName BoneName, FVector InPosition, FRotator InRotation, FVector& OutPosition, FRotator& OutRotation );
1975
1985 ENGINE_API FName FindClosestBone(FVector TestLocation, FVector* BoneLocation = nullptr, float IgnoreScale = 0.f, bool bRequirePhysicsAsset = false) const;
1986
1996 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh", meta=(DisplayName="Find Closest Bone", AdvancedDisplay="bRequirePhysicsAsset"))
1997 ENGINE_API FName FindClosestBone_K2(FVector TestLocation, FVector& BoneLocation, float IgnoreScale = 0.f, bool bRequirePhysicsAsset = false) const;
1998
2006 ENGINE_API virtual class UMorphTarget* FindMorphTarget( FName MorphTargetName ) const;
2007
2014 ENGINE_API virtual void HideBone( int32 BoneIndex, EPhysBodyOp PhysBodyOption );
2015
2021 ENGINE_API virtual void UnHideBone( int32 BoneIndex );
2022
2030 ENGINE_API bool IsBoneHidden( int32 BoneIndex ) const;
2031
2039 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
2040 ENGINE_API void HideBoneByName( FName BoneName, EPhysBodyOp PhysBodyOption );
2041
2047 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
2048 ENGINE_API void UnHideBoneByName( FName BoneName );
2049
2057 UFUNCTION(BlueprintCallable, Category="Components|SkinnedMesh")
2058 ENGINE_API bool IsBoneHiddenByName( FName BoneName );
2059
2067 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
2068 ENGINE_API void ShowMaterialSection(int32 MaterialID, int32 SectionIndex, bool bShow, int32 LODIndex);
2069
2071 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
2072 ENGINE_API void ShowAllMaterialSections(int32 LODIndex);
2073
2075 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
2076 ENGINE_API bool IsMaterialSectionShown(int32 MaterialID, int32 LODIndex);
2077
2083 UFUNCTION(BlueprintCallable, Category = "Components|SkinnedMesh")
2084 ENGINE_API void SetRenderStatic(bool bNewValue);
2085
2092 ENGINE_API class UPhysicsAsset* GetPhysicsAsset() const;
2093
2094private:
2098 virtual void RefreshMorphTargets() {};
2099
2104 ENGINE_API bool GetMissingLeaderBoneRelativeTransform(int32 InBoneIndex, FMissingLeaderBoneCacheEntry& OutInfo) const;
2105
2106 // BEGIN ILODSyncComponent
2107 ENGINE_API virtual int32 GetDesiredSyncLOD() const override;
2108 ENGINE_API virtual int32 GetBestAvailableLOD() const override;
2109 ENGINE_API virtual void SetForceStreamedLOD(int32 LODIndex) override;
2110 ENGINE_API virtual void SetForceRenderedLOD(int32 LODIndex) override;
2111 ENGINE_API virtual int32 GetNumSyncLODs() const override;
2112 ENGINE_API virtual int32 GetForceStreamedLOD() const override;
2113 ENGINE_API virtual int32 GetForceRenderedLOD() const override;
2114 // END ILODSyncComponent
2115
2116 // Animation update rate control.
2117public:
2120
2123
2124 virtual bool IsPlayingRootMotion() const { return false; }
2125 virtual bool IsPlayingNetworkedRootMotionMontage() const { return false; }
2126 virtual bool IsPlayingRootMotionFromEverything() const { return false; }
2127
2128 ENGINE_API bool ShouldUseUpdateRateOptimizations() const;
2129
2131 ENGINE_API void ReleaseResources();
2132
2133#if WITH_EDITOR
2135 static ENGINE_API void BindWorldDelegates();
2138#endif
2139
2142 friend class FSkeletalMeshStreamOut;
2143 friend struct UE::Anim::FSkinnedMeshComponentExtensions;
2144
2145 //
2146 // Animation required bones
2147 //
2148
2150 static ENGINE_API void GetPhysicsRequiredBones(const USkinnedAsset* SkinnedAsset, const UPhysicsAsset* PhysicsAsset, TArray<FBoneIndexType>& OutRequiredBones);
2151
2158
2163 static ENGINE_API void MergeInBoneIndexArrays(TArray<FBoneIndexType>& BaseArray, const TArray<FBoneIndexType>& InsertArray);
2164
2172
2178 virtual FDelegateHandle RegisterOnBoneTransformsFinalizedDelegate(const FOnBoneTransformsFinalizedMultiCast::FDelegate& /*Delegate*/) { return FDelegateHandle(); }
2179
2184 virtual void UnregisterOnBoneTransformsFinalizedDelegate(const FDelegateHandle& /*DelegateHandle*/) {}
2185};
2186
2188{
2190 const bool bWasInitiallyRegistered;
2191 const bool bWasRenderStateCreated;
2192
2193public:
2194
2197 bWasInitiallyRegistered(Component->IsRegistered()),
2198 bWasRenderStateCreated(Component->IsRenderStateCreated())
2199 {
2200 if (bWasRenderStateCreated)
2201 {
2202 if (!bWasInitiallyRegistered)
2203 {
2204 UE_LOG(LogSkeletalMesh, Warning, TEXT("Created a FRenderStateRecreator with an unregistered component: %s"), *Component->GetPathName());
2205 }
2206
2207 Component->DestroyRenderState_Concurrent();
2208 }
2209 }
2210
2212 {
2213 const bool bIsRegistered = Component->IsRegistered();
2214
2216
2217 ensureMsgf(bWasInitiallyRegistered == bIsRegistered,
2218 TEXT("Component Registered state changed from %s to %s within FRenderStateRecreator scope."),
2219 *((bWasInitiallyRegistered ? CoreTexts.True : CoreTexts.False).ToString()),
2220 *((bIsRegistered ? CoreTexts.True : CoreTexts.False).ToString()));
2221
2222 if (bWasRenderStateCreated && bIsRegistered)
2223 {
2224 Component->CreateRenderState_Concurrent(nullptr);
2225 }
2226 }
2227};
2228
2232 const FSkelMeshRenderSection& Section,
2233 const FStaticMeshVertexBuffers& StaticVertexBuffers,
2234 const FSkinWeightVertexBuffer& SkinWeightVertexBuffer,
2235 const int32 VertIndex,
2236 const TArray<FMatrix44f> & RefToLocals,
2240);
2241
2243template <bool bCachedMatrices>
2246 const FSkelMeshRenderSection& Section,
2247 const FPositionVertexBuffer& PositionVertexBuffer,
2248 const FSkinWeightVertexBuffer& SkinWeightVertexBuffer,
2249 const int32 VertIndex,
2250 const TArray<FMatrix44f> & RefToLocals = TArray<FMatrix44f>()
2251);
2252
2253#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
2255#endif
OODEFFUNC typedef const int const char * function
Definition oodle2.h:710
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define PURE_VIRTUAL(func,...)
Definition CoreMiscDefines.h:103
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#define TEXT(x)
Definition Platform.h:1272
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
#define DECLARE_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:48
#define DECLARE_MULTICAST_DELEGATE(DelegateName)
Definition DelegateCombinations.h:23
#define DECLARE_MULTICAST_DELEGATE_ThreeParams(DelegateName, Param1Type, Param2Type, Param3Type)
Definition DelegateCombinations.h:67
ELevelTick
Definition EngineBaseTypes.h:70
return true
Definition ExternalRpcRegistry.cpp:601
#define MAX_TOTAL_INFLUENCES
Definition GPUSkinPublicDefs.h:12
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UMETA(...)
Definition ObjectMacros.h:747
#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
EFirstPersonPrimitiveType
Definition PrimitiveComponent.h:134
bool IsRegistered(FRDGBuilder &GraphBuilder, const TRefCountPtr< IPooledRenderTarget > &RenderTarget)
Definition RenderGraphUtils.h:111
ERelativeTransformSpace
Definition SceneComponent.h:43
@ RTS_World
Definition SceneComponent.h:45
EPreviousBoneTransformUpdateMode
Definition SkeletalRenderPublic.h:62
ESkinCacheUsage
Definition SkinnedAssetCommon.h:33
EPhysBodyOp
Definition SkinnedMeshComponent.h:83
@ PBO_MAX
Definition SkinnedMeshComponent.h:88
@ PBO_Term
Definition SkinnedMeshComponent.h:87
@ PBO_None
Definition SkinnedMeshComponent.h:85
EBoneVisibilityStatus
Definition SkinnedMeshComponent.h:70
@ BVS_Visible
Definition SkinnedMeshComponent.h:74
@ BVS_HiddenByParent
Definition SkinnedMeshComponent.h:72
@ BVS_ExplicitlyHidden
Definition SkinnedMeshComponent.h:76
@ BVS_MAX
Definition SkinnedMeshComponent.h:77
ESkinWeightProfileLayer
Definition SkinnedMeshComponent.h:150
void GetTypedSkinnedTangentBasis(const USkinnedMeshComponent *SkinnedComp, const FSkelMeshRenderSection &Section, const FStaticMeshVertexBuffers &StaticVertexBuffers, const FSkinWeightVertexBuffer &SkinWeightVertexBuffer, const int32 VertIndex, const TArray< FMatrix44f > &RefToLocals, FVector3f &OutTangentX, FVector3f &OutTangentY, FVector3f &OutTangentZ)
Definition SkinnedMeshComponent.cpp:5769
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
FVector3f GetTypedSkinnedVertexPosition(const USkinnedMeshComponent *SkinnedComp, const FSkelMeshRenderSection &Section, const FPositionVertexBuffer &PositionVertexBuffer, const FSkinWeightVertexBuffer &SkinWeightVertexBuffer, const int32 VertIndex, const TArray< FMatrix44f > &RefToLocals=TArray< FMatrix44f >())
Definition SkinnedMeshComponent.cpp:5814
EVisibilityBasedAnimTickOption
Definition SkinnedMeshComponent.h:94
bool ShouldRenderNaniteSkinnedMeshes()
EDataValidationResult
Definition UObjectGlobals.h:4225
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Engine.Build.cs:7
Definition Archive.h:1208
Definition ColorVertexBuffer.h:16
Definition DataValidation.h:40
Definition IDelegateInstance.h:14
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition PositionVertexBuffer.h:27
Definition PrimitiveSceneProxy.h:296
Definition UnrealType.h:174
Definition ActorComponent.h:47
Definition SkinnedMeshComponent.h:2188
~FRenderStateRecreator()
Definition SkinnedMeshComponent.h:2211
FRenderStateRecreator(USkinnedMeshComponent *InActorComponent)
Definition SkinnedMeshComponent.h:2195
Definition SkeletalMeshLODRenderData.h:128
Definition SkeletalRenderPublic.h:85
Definition SkeletalMeshRenderData.h:17
Definition SkeletalMeshUpdate.h:145
Definition SkinWeightVertexBuffer.h:364
Definition SkinnedMeshComponentHelper.h:20
Definition SkeletalMeshTypes.h:170
Definition TextureStreamingTypes.h:223
Definition ObjectMacros.h:180
Definition LODSyncInterface.h:24
Definition ArrayView.h:139
Definition Array.h:670
Definition SharedPointer.h:692
Definition ContainerAllocationPolicies.h:894
Definition SortedMap.h:20
Definition UniquePtr.h:107
Definition RecursiveMutex.h:19
Definition ScopeLock.h:21
Definition MaterialInterface.h:296
Definition MeshComponent.h:25
Definition MeshDeformerInstance.h:34
Definition MeshDeformerInstance.h:45
Definition MeshDeformer.h:19
Definition MorphTarget.h:230
Definition Object.h:95
Definition PhysicsAsset.h:172
Definition SkeletalMeshSocket.h:14
Definition SkeletalMesh.h:440
Definition SkinnedAsset.h:47
Definition SkinnedMeshComponent.h:1693
FRenderStateLockScope(USkinnedMeshComponent *InComponent)
Definition SkinnedMeshComponent.h:1695
Definition SkinnedMeshComponent.h:258
FOnTickPose OnTickPose
Definition SkinnedMeshComponent.h:1564
const FSkeletalMeshObject * GetMeshObject() const
Definition SkinnedMeshComponent.h:976
uint32 CurrentBoneTransformRevisionNumber
Definition SkinnedMeshComponent.h:450
virtual float GetStreamingScale() const override
Definition SkinnedMeshComponent.h:1289
void EnableExternalUpdate(bool bInEnable)
Definition SkinnedMeshComponent.h:964
const TArray< uint8 > & GetEditableBoneVisibilityStates() const
Definition SkinnedMeshComponent.h:1663
TArray< uint8 > PreviousBoneVisibilityStates
Definition SkinnedMeshComponent.h:430
TArray< FExternalMorphWeightData > ExternalMorphWeightData
Definition SkinnedMeshComponent.h:616
void SetExternalDeltaTime(float InDeltaTime)
Definition SkinnedMeshComponent.h:970
bool IsUsingExternalTickRateControl() const
Definition SkinnedMeshComponent.h:949
UE::FRecursiveMutex RenderStateLock
Definition SkinnedMeshComponent.h:1705
TObjectPtr< UMeshDeformer > GetComponentMeshDeformer() const
Definition SkinnedMeshComponent.h:337
virtual void UpdateVisualizeLODString(FString &DebugString)
Definition SkinnedMeshComponent.h:1603
TArray< float > MorphTargetWeights
Definition SkinnedMeshComponent.h:613
const TArray< uint8 > & GetPreviousBoneVisibilityStates() const
Definition SkinnedMeshComponent.h:374
TArray< TWeakObjectPtr< USkinnedMeshComponent > > FollowerPoseComponents
Definition SkinnedMeshComponent.h:462
const TArray< FTransform > & GetEditableComponentSpaceTransforms() const
Definition SkinnedMeshComponent.h:1640
uint8 bHasValidBoneTransform
Definition SkinnedMeshComponent.h:753
bool IsUsingExternalInterpolation() const
Definition SkinnedMeshComponent.h:961
TArray< int32 > LeaderBoneMap
Definition SkinnedMeshComponent.h:468
uint8 GetExternalTickRate() const
Definition SkinnedMeshComponent.h:955
virtual bool IsPlayingNetworkedRootMotionMontage() const
Definition SkinnedMeshComponent.h:2125
float LastStreamerUpdateBoundsRadius
Definition SkinnedMeshComponent.h:438
FOnAnimUpdateRateParamsCreated OnAnimUpdateRateParamsCreated
Definition SkinnedMeshComponent.h:2119
virtual bool IsPlayingRootMotion() const
Definition SkinnedMeshComponent.h:2124
FMorphTargetWeightMap ActiveMorphTargets
Definition SkinnedMeshComponent.h:610
virtual void GetAdditionalRequiredBonesForLeader(int32 LODIndex, TArray< FBoneIndexType > &InOutRequiredBones) const
Definition SkinnedMeshComponent.h:2171
uint8 ExternalTickRate
Definition SkinnedMeshComponent.h:746
void SetExternalTickRate(uint8 InTickRate)
Definition SkinnedMeshComponent.h:952
uint32 PreviousBoneTransformRevisionNumber
Definition SkinnedMeshComponent.h:447
int32 CurrentEditableComponentTransforms
Definition SkinnedMeshComponent.h:441
virtual void PostInitMeshObject(FSkeletalMeshObject *)
Definition SkinnedMeshComponent.h:1376
const USkinnedMeshComponent * GetBaseComponent() const
Definition SkinnedMeshComponent.h:1414
const TArray< FTransform > & GetComponentSpaceTransforms() const
Definition SkinnedMeshComponent.h:1630
TArray< FTransform > & GetEditableComponentSpaceTransforms()
Definition SkinnedMeshComponent.h:1636
TArray< uint8 > & GetEditableBoneVisibilityStates()
Definition SkinnedMeshComponent.h:1659
TSharedPtr< FSkelMeshRefPoseOverride > RefPoseOverride
Definition SkinnedMeshComponent.h:520
TSortedMap< FName, FName, FDefaultAllocator, FNameFastLess > SocketOverrideLookup
Definition SkinnedMeshComponent.h:502
const TArray< uint8 > & GetBoneVisibilityStates() const
Definition SkinnedMeshComponent.h:1653
int32 CurrentReadComponentTransforms
Definition SkinnedMeshComponent.h:444
void EnableExternalEvaluationRateLimiting(bool bInEnable)
Definition SkinnedMeshComponent.h:973
uint32 GetPreviousBoneTransformRevisionNumber() const
Definition SkinnedMeshComponent.h:390
uint32 GetBoneTransformRevisionNumber() const
Definition SkinnedMeshComponent.h:384
const TArray< int32 > & GetLeaderBoneMap() const
Definition SkinnedMeshComponent.h:523
const TArray< FExternalMorphSets > & GetExternalMorphSetsArray() const
Definition SkinnedMeshComponent.h:561
virtual void UnregisterOnBoneTransformsFinalizedDelegate(const FDelegateHandle &)
Definition SkinnedMeshComponent.h:2184
virtual bool IsPlayingRootMotionFromEverything() const
Definition SkinnedMeshComponent.h:2126
struct FAnimUpdateRateParameters * AnimUpdateRateParams
Definition SkinnedMeshComponent.h:2122
uint32 CurrentBoneTransformFrame
Definition SkinnedMeshComponent.h:453
uint8 bSkinWeightProfilePending
Definition SkinnedMeshComponent.h:759
FExternalMorphSets & GetExternalMorphSets(int32 LOD)
Definition SkinnedMeshComponent.h:558
int32 GetNumComponentSpaceTransforms() const
Definition SkinnedMeshComponent.h:1647
TMap< int32, FMissingLeaderBoneCacheEntry > MissingLeaderBoneMap
Definition SkinnedMeshComponent.h:497
virtual FDelegateHandle RegisterOnBoneTransformsFinalizedDelegate(const FOnBoneTransformsFinalizedMultiCast::FDelegate &)
Definition SkinnedMeshComponent.h:2178
TArray< FExternalMorphSets > ExternalMorphSets
Definition SkinnedMeshComponent.h:624
void EnableExternalInterpolation(bool bInEnable)
Definition SkinnedMeshComponent.h:958
const FExternalMorphSets & GetExternalMorphSets(int32 LOD) const
Definition SkinnedMeshComponent.h:557
uint8 bSkinWeightProfileSet
Definition SkinnedMeshComponent.h:756
const TArray< FTransform > & GetPreviousComponentTransformsArray() const
Definition SkinnedMeshComponent.h:379
void EnableExternalTickRateControl(bool bInEnable)
Definition SkinnedMeshComponent.h:946
virtual void SetPredictedLODLevel(int32 InPredictedLODLevel)
Definition SkinnedMeshComponent.h:1595
FBoxSphereBounds GetCachedLocalBounds() const
Definition SkinnedMeshComponent.h:1670
TArray< FTransform > PreviousComponentSpaceTransformsArray
Definition SkinnedMeshComponent.h:434
void SetExternalInterpolationAlpha(float InAlpha)
Definition SkinnedMeshComponent.h:967
uint32 GetCurrentBoneTransformFrame() const
Definition SkinnedMeshComponent.h:396
uint8 MaxFirstLODIdxInAttachmentTree
Definition SkinnedMeshComponent.h:749
virtual const TSharedPtr< FSkelMeshRefPoseOverride > & GetRefPoseOverride() const
Definition SkinnedMeshComponent.h:1514
int32 LeaderBoneMapCacheCount
Definition SkinnedMeshComponent.h:456
Definition World.h:918
Definition Axis.h:9
Definition SkinnedMeshComponent.h:133
Type
Definition SkinnedMeshComponent.h:135
Definition SkinnedMeshComponent.h:117
int32 Type
Definition SkinnedMeshComponent.h:119
Definition SceneComponent.h:24
Type
Definition RHIFeatureLevel.h:20
Definition SkinnedMeshComponent.h:50
Definition AnimationAsset.h:42
@ false
Definition radaudio_common.h:23
Definition EngineBaseTypes.h:571
Definition EngineTypes.h:2473
Definition ClothingSystemRuntimeTypes.h:15
Definition Color.h:486
Definition CoreGlobals.h:109
static CORE_API const FCoreTexts & Get()
Definition CoreGlobals.cpp:102
Definition ExternalMorphSet.h:10
Definition ExternalMorphSet.h:42
Definition Color.h:48
Definition SkinnedMeshComponent.h:237
Definition SkinnedMeshComponent.h:220
TArray< TObjectPtr< UMeshDeformer >, TInlineAllocator< 2 > > Deformers
Definition SkinnedMeshComponent.h:222
TArray< int8, TInlineAllocator< MAX_MESH_LOD_COUNT > > DeformerIndexForLOD
Definition SkinnedMeshComponent.h:231
Definition MeshDescription.h:94
Definition PSOPrecache.h:30
Definition TextureStreamingTypes.h:188
Definition ComponentInterfaces.h:48
Definition UnrealType.h:6865
Definition ResourceSize.h:31
Definition SkinnedMeshComponent.h:175
Definition SkeletalMeshLODRenderData.h:28
Definition SkinnedMeshComponent.h:161
Definition SkinWeightProfile.h:133
Definition SkinnedMeshStateStreamHandle.h:15
Definition StaticMeshResources.h:320
Definition SkinnedMeshComponent.h:211
Definition ClothingSystemRuntimeTypes.h:58
Definition NaniteResources.h:410
Definition ObjectPtr.h:488
Definition Optional.h:131
Definition WeakObjectPtrTemplates.h:25
Definition BoxSphereBounds.h:25
Definition SkinnedMeshComponent.h:472
FTransform RelativeTransform
Definition SkinnedMeshComponent.h:487
FMissingLeaderBoneCacheEntry(const FTransform &InRelativeTransform, int32 InCommonAncestorBoneIndex)
Definition SkinnedMeshComponent.h:478
int32 CommonAncestorBoneIndex
Definition SkinnedMeshComponent.h:490
FMissingLeaderBoneCacheEntry()
Definition SkinnedMeshComponent.h:473