UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StaticMeshComponent.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "RHIResources.h"
8#include "UObject/Object.h"
9#include "Misc/Guid.h"
10#include "UObject/Class.h"
11#include "Engine/EngineTypes.h"
15#include "PackedNormal.h"
16#include "Templates/UniquePtr.h"
19#include "SceneTypes.h"
20#include "DrawDebugHelpers.h"
22#include "StaticMeshComponent.generated.h"
23
30class ULightComponent;
31class UStaticMesh;
32class UStaticMeshComponent;
34class UWorld;
35struct FConvexVolume;
36struct FEngineShowFlags;
42
44#define STATICMESH_ENABLE_DEBUG_RENDERING ENABLE_DRAW_DEBUG
45
46namespace Nanite
47{
48 struct FResources;
49 struct FMaterialAudit;
50}
51
53USTRUCT()
55{
57
58 UPROPERTY()
60
61 UPROPERTY()
63
64 UPROPERTY()
66
72
74 {
75 Ar << PaintedVertex.Position;
76
78 {
80 Ar << Temp;
81 PaintedVertex.Normal = Temp;
82 }
83 else
84 {
85 Ar << PaintedVertex.Normal;
86 }
87
88 Ar << PaintedVertex.Color;
89 return Ar;
90 }
91
92};
93
101UCLASS(Blueprintable, ClassGroup=(Rendering, Common), hidecategories=(Object,Activation,"Components|Activation"), ShowCategories=(Mobility), editinlinenew, meta=(BlueprintSpawnableComponent), MinimalAPI)
102class UStaticMeshComponent : public UMeshComponent
103{
105
106
107 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=LOD)
108 int32 ForcedLodModel;
109
114 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=LOD, meta=(editcondition = "bOverrideMinLOD"))
116
118 UPROPERTY()
120
122 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Rendering, meta=(editcondition = "bOverrideWireframeColor"))
124
125private:
127 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=StaticMesh, ReplicatedUsing=OnRep_StaticMesh, meta=(AllowPrivateAccess="true"))
129
131
132#if WITH_EDITOR
134 class UStaticMesh* KnownStaticMesh = nullptr;
135#endif
137
138#if WITH_STATE_STREAM_ACTOR
140#endif
141
142public:
144 static const FName GetMemberNameChecked_StaticMesh() { return GET_MEMBER_NAME_CHECKED(UStaticMeshComponent, StaticMesh); }
145
146 UFUNCTION()
147 ENGINE_API void OnRep_StaticMesh(class UStaticMesh *OldStaticMesh);
148
152 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Rendering)
153 int32 WorldPositionOffsetDisableDistance = 0;
154
156 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Rendering)
157 uint8 bForceNaniteForMasked : 1;
158
160 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Rendering)
161 uint8 bDisallowNanite : 1;
162
164 UPROPERTY()
165 uint8 bForceDisableNanite : 1;
166
170 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Rendering)
171 uint8 bEvaluateWorldPositionOffset : 1;
172
178 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Rendering)
180
185 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = RayTracing)
186 uint8 bEvaluateWorldPositionOffsetInRayTracing : 1;
187
191
193 uint8 bMipLevelCallbackRegistered : 1;
194
197
200
201public:
202
203#if WITH_EDITORONLY_DATA
216
217 /*
218 * The import version of the static mesh when it was assign this is update when:
219 * - The user assign a new staticmesh to the component
220 * - The component is serialize (IsSaving)
221 * - Default value is BeforeImportStaticMeshVersionWasAdded
222 *
223 * If when the component get load (PostLoad) the version of the attach staticmesh is newer
224 * then this value, we will remap the material override because the order of the materials list
225 * in the staticmesh can be changed. Hopefully there is a remap table save in the staticmesh.
226 */
227 UPROPERTY()
229#endif
230
232 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Rendering, meta=(InlineEditConditionToggle))
234
236 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=LOD)
237 uint8 bOverrideMinLOD:1;
238
241 uint8 bOverrideNavigationExport : 1;
242
245 uint8 bForceNavigationObstacle : 1;
246
248 UPROPERTY()
250
251#if STATICMESH_ENABLE_DEBUG_RENDERING
256#endif
257
263 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category=TextureStreaming)
265
267 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Lighting, meta=(InlineEditConditionToggle))
268 uint8 bOverrideLightMapRes:1;
269
275 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Lighting, meta=(DisplayName = "Distance Field Indirect Shadow"))
276 uint8 bCastDistanceFieldIndirectShadow:1;
277
279 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Lighting)
280 uint8 bOverrideDistanceFieldSelfShadowBias:1;
281
283 UPROPERTY()
285
287 UPROPERTY(EditAnywhere, Category = Collision)
288 uint8 bUseDefaultCollision:1;
289
290#if WITH_EDITORONLY_DATA
292 UPROPERTY()
294
297
300
302 UPROPERTY()
303 uint8 bDisplayNaniteFallbackMesh:1;
304
312#endif // WITH_EDITORONLY_DATA
313
315 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Lighting, meta = (UIMin = "0", UIMax = "1", DisplayName = "Sort Triangles"))
316 uint8 bSortTriangles : 1;
317
321 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Lighting)
322 uint8 bReverseCulling : 1;
323
328 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Mesh Painting")
330
332 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Mesh Painting")
334
336 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Mesh Painting", meta=(InlineEditConditionToggle))
338
340 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Mesh Painting", meta=(InlineEditConditionToggle))
342
344 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Mesh Painting", meta=(UIMin = "0", UIMax = "3", editcondition = "bOverrideMeshPaintTextureCoordinateIndex"))
346
348 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Mesh Painting", meta = (UIMin = "0", UIMax = "4096", ClampMax = "4096", editcondition = "bOverrideMeshPaintTextureResolution"))
350
352 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Lighting, meta=(ClampMax = 4096, editcondition="bOverrideLightMapRes") )
353 int32 OverriddenLightMapRes;
354
355#if WITH_EDITORONLY_DATA
357 UPROPERTY(VisibleAnywhere, Category = "Mesh Painting")
358 TObjectPtr<UTexture> MeshPaintTexture;
359#endif
360
362 UPROPERTY(SkipSerialization)
364
368
370 UPROPERTY(EditAnywhere, Experimental, BlueprintReadWrite, Category = "Material Cache")
372
375 TArray<TObjectPtr<class UMaterialCacheVirtualTexture>> MaterialCacheTextures;
376
380 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Lighting, meta=(UIMin = "0", UIMax = "1", DisplayName = "Distance Field Indirect Shadow Min Visibility"))
381 float DistanceFieldIndirectShadowMinVisibility;
382
384 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Lighting)
385 float DistanceFieldSelfShadowBias;
386
393 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category=TextureStreaming, meta=(ClampMin = 0, ToolTip="Allows adjusting the desired resolution of streaming textures that uses UV 0. 1.0 is the default, whereas a higher value increases the streamed-in resolution."))
394 float StreamingDistanceMultiplier;
395
397 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Rendering)
398 float NanitePixelProgrammableDistance;
399
400#if WITH_EDITORONLY_DATA
401 UPROPERTY()
403#endif
404
408
410 UPROPERTY(NonTransactional)
411 TArray<FStreamingTextureBuildInfo> StreamingTextureData;
412
413#if WITH_EDITORONLY_DATA
415 UPROPERTY()
417
419 UPROPERTY(NonTransactional)
421#endif
422
424 UPROPERTY(EditAnywhere, Category=Lighting)
425 struct FLightmassPrimitiveSettings LightmassSettings;
426
428
430 UFUNCTION(BlueprintCallable, Category="Components|StaticMesh")
431 ENGINE_API virtual bool SetStaticMesh(class UStaticMesh* NewMesh);
432
434 TObjectPtr<UStaticMesh> GetStaticMesh() const
435 {
436#if WITH_EDITOR
437 // This should never happen and is a last resort, we should have caught the property overwrite well before we reach this code
439 {
441 }
442#endif
443 return StaticMesh;
444 }
445
446 ENGINE_API virtual const Nanite::FResources* GetNaniteResources() const;
447
451 ENGINE_API virtual bool HasValidNaniteData() const;
452
454 ENGINE_API virtual bool UseNaniteOverrideMaterials() const override;
455
456 UFUNCTION(BlueprintCallable, Category="Rendering|LOD")
458
460 UFUNCTION(BlueprintCallable, Category="Rendering|Lighting")
461 ENGINE_API void SetDistanceFieldSelfShadowBias(float NewValue);
462
463 UFUNCTION(BlueprintCallable, Category=RayTracing)
464 ENGINE_API void SetEvaluateWorldPositionOffsetInRayTracing(bool NewValue);
465
466 UFUNCTION(BlueprintCallable, Category = "Rendering|LOD")
467 ENGINE_API void SetEvaluateWorldPositionOffset(bool NewValue);
468
469 UFUNCTION(BlueprintCallable, Category = "Rendering|LOD")
471
473 UFUNCTION(BlueprintCallable, Category = "Rendering|LOD")
475
479 UFUNCTION(BlueprintCallable, Category = "Rendering|LOD")
481
485 UFUNCTION(BlueprintCallable, Category="Components|StaticMesh")
486 ENGINE_API void GetLocalBounds(FVector& Min, FVector& Max) const;
487
491 UFUNCTION(BlueprintCallable, Category="Rendering|Lighting")
492 ENGINE_API void SetReverseCulling(bool ReverseCulling);
493
495 UFUNCTION(BlueprintCallable, Category="Rendering")
497
498 ENGINE_API virtual void SetCollisionProfileName(FName InCollisionProfileName, bool bUpdateOverlaps=true) override;
499
500public:
501
502 //~ Begin UObject Interface.
503 ENGINE_API virtual void BeginDestroy() override;
504 ENGINE_API virtual void ExportCustomProperties(FOutputDevice& Out, uint32 Indent) override;
505 ENGINE_API virtual void ImportCustomProperties(const TCHAR* SourceText, FFeedbackContext* Warn) override;
507 ENGINE_API virtual void PostInitProperties() override;
508 ENGINE_API virtual void PostReinitProperties() override;
509 ENGINE_API virtual void PostApplyToComponent() override;
510#if WITH_EDITOR
511 ENGINE_API virtual void PostEditUndo() override;
512 ENGINE_API virtual void PreEditUndo() override;
513 ENGINE_API virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
514 ENGINE_API virtual bool CanEditChange(const FProperty* InProperty) const override;
515 ENGINE_API virtual void BeginCacheForCookedPlatformData(const ITargetPlatform* TargetPlatform) override;
516 ENGINE_API virtual bool IsCachedCookedPlatformDataLoaded(const ITargetPlatform* TargetPlatform) override;
517 ENGINE_API virtual void PostDuplicate(bool bDuplicateForPIE) override;
518 ENGINE_API virtual void PostEditImport() override;
519 ENGINE_API virtual void InitializeComponent() override;
520 ENGINE_API virtual void UpdateBounds() override;
521#endif // WITH_EDITOR
522#if WITH_EDITORONLY_DATA
523 ENGINE_API virtual void PreSave(FObjectPreSaveContext ObjectSaveContext) override;
524#endif // WITH_EDITORONLY_DATA
525 ENGINE_API virtual void PostLoad() override;
526 ENGINE_API virtual bool IsPostLoadThreadSafe() const override;
527 ENGINE_API virtual bool AreNativePropertiesIdenticalTo( UObject* Other ) const override;
528 ENGINE_API virtual FString GetDetailedInfoInternal() const override;
529 static ENGINE_API void AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector);
530 //~ End UObject Interface.
531
532 //~ Begin USceneComponent Interface
533#if WITH_EDITOR
534 ENGINE_API virtual bool GetMaterialPropertyPath(int32 ElementIndex, UObject*& OutOwner, FString& OutPropertyPath, FProperty*& OutProperty) override;
535#endif // WITH_EDITOR
536 ENGINE_API virtual FBoxSphereBounds CalcBounds(const FTransform& LocalToWorld) const override;
537 ENGINE_API virtual bool HasAnySockets() const override;
538 ENGINE_API virtual void QuerySupportedSockets(TArray<FComponentSocketDescription>& OutSockets) const override;
539 ENGINE_API virtual FTransform GetSocketTransform(FName InSocketName, ERelativeTransformSpace TransformSpace = RTS_World) const override;
540 ENGINE_API virtual bool DoesSocketExist(FName InSocketName) const override;
541 virtual bool ShouldCollideWhenPlacing() const override
542 {
543 // Current Method of collision does not work with non-capsule shapes, enable when it works with static meshes
544 // return IsCollisionEnabled() && (StaticMesh != NULL);
545 return false;
546 }
547#if WITH_EDITOR
548 ENGINE_API virtual bool ShouldRenderSelected() const override;
549#endif
550 //~ End USceneComponent Interface
551
552 UE_DECLARE_COMPONENT_ACTOR_INTERFACE(StaticMeshComponent)
553
554 //~ Begin UActorComponent Interface.
555protected:
556 ENGINE_API virtual void OnRegister() override;
557 ENGINE_API virtual void OnUnregister() override;
558 ENGINE_API virtual void BeginPlay() override;
559 ENGINE_API virtual bool RequiresGameThreadEndOfFrameRecreate() const override;
560 ENGINE_API virtual void CreateRenderState_Concurrent(FRegisterComponentContext* Context) override;
561 ENGINE_API virtual void OnCreatePhysicsState() override;
562 ENGINE_API virtual void OnDestroyPhysicsState() override;
563 ENGINE_API virtual void OnAsyncDestroyPhysicsStateEnd_GameThread() override;
564 ENGINE_API virtual bool ShouldCreatePhysicsState() const override;
565 ENGINE_API virtual bool ShouldCreateRenderState() const override;
566 ENGINE_API virtual bool ShouldIncrementalPreRegister(UWorld* WorldContext) const override;
567
568
576
577public:
578
579 ENGINE_API virtual bool AllowsAsyncPhysicsStateCreation() const override;
580 ENGINE_API virtual bool AllowsAsyncPhysicsStateDestruction() const override;
581 ENGINE_API virtual void PrecachePSOs() override;
582 ENGINE_API virtual void InvalidateLightingCacheDetailed(bool bInvalidateBuildEnqueuedLighting, bool bTranslationOnly) override;
583 ENGINE_API virtual UObject const* AdditionalStatObject() const override;
584#if WITH_EDITOR
585 ENGINE_API virtual void CheckForErrors() override;
586 ENGINE_API virtual bool IsCompiling() const override;
587#endif
588 ENGINE_API virtual TStructOnScope<FActorComponentInstanceData> GetComponentInstanceData() const override;
589 ENGINE_API virtual bool IsHLODRelevant() const override;
590#if WITH_EDITOR
591 ENGINE_API virtual void ComputeHLODHash(class FHLODHashBuilder& HashBuilder) const override;
592#endif
593 //~ End UActorComponent Interface.
594
595 //~ Begin UPrimitiveComponent Interface.
596 ENGINE_API virtual int32 GetNumMaterials() const override;
597#if WITH_EDITOR
599 ENGINE_API virtual void AddMapBuildDataGUIDs(TSet<FGuid>& InGUIDs) const override;
600#endif
601 ENGINE_API virtual float GetEmissiveBoost(int32 ElementIndex) const override;
602 ENGINE_API virtual float GetDiffuseBoost(int32 ElementIndex) const override;
603 virtual bool GetShadowIndirectOnly() const override
604 {
605 return LightmassSettings.bShadowIndirectOnly;
606 }
607 ENGINE_API virtual ELightMapInteractionType GetStaticLightingType() const override;
608 ENGINE_API virtual bool IsPrecomputedLightingValid() const override;
609
611 ENGINE_API virtual float GetTextureStreamingTransformScale() const;
613 ENGINE_API virtual bool GetMaterialStreamingData(int32 MaterialIndex, FPrimitiveMaterialInfo& MaterialData) const override;
618 ENGINE_API virtual void GetUsedTextures(TArray<UTexture*>& OutTextures, EMaterialQualityLevel::Type QualityLevel) override;
619#if WITH_EDITOR
622#endif
623
624 ENGINE_API virtual class UBodySetup* GetBodySetup() override;
625 ENGINE_API virtual bool CanEditSimulatePhysics() override;
626 ENGINE_API virtual FPrimitiveSceneProxy* CreateSceneProxy() override;
627 ENGINE_API virtual bool ShouldRecreateProxyOnUpdateTransform() const override;
628 ENGINE_API virtual bool UsesOnlyUnlitMaterials() const override;
629 ENGINE_API virtual bool GetLightMapResolution( int32& Width, int32& Height ) const override;
630 ENGINE_API virtual int32 GetStaticLightMapResolution() const override;
632 ENGINE_API virtual bool HasValidSettingsForStaticLighting(bool bOverlookInvalidComponents) const override;
633
634 ENGINE_API virtual void GetLightAndShadowMapMemoryUsage( int32& LightMapMemoryUsage, int32& ShadowMapMemoryUsage ) const override;
636 ENGINE_API virtual UMaterialInterface* GetMaterial(int32 MaterialIndex) const final;
637#if WITH_EDITOR
638 ENGINE_API virtual UMaterialInterface* GetEditorMaterial(int32 MaterialIndex) const override;
639#endif
640 ENGINE_API virtual int32 GetMaterialIndex(FName MaterialSlotName) const override;
641 ENGINE_API virtual UMaterialInterface* GetMaterialFromCollisionFaceIndex(int32 FaceIndex, int32& SectionIndex) const override;
642 ENGINE_API virtual TArray<FName> GetMaterialSlotNames() const override;
643 ENGINE_API virtual bool IsMaterialSlotNameValid(FName MaterialSlotName) const override;
644
645 ENGINE_API virtual bool DoCustomNavigableGeometryExport(FNavigableGeometryExport& GeomExport) const override;
646
647 ENGINE_API virtual bool IsShown(const FEngineShowFlags& ShowFlags) const override;
648#if WITH_EDITOR
652 ENGINE_API virtual bool ComponentIsTouchingSelectionBox(const FBox& InSelBBox, const bool bConsiderOnlyBSP, const bool bMustEncompassEntireComponent) const override;
654#endif
655 virtual float GetStreamingScale() const override { return GetComponentTransform().GetMaximumAxisScale(); }
656 virtual bool SupportsWorldPositionOffsetVelocity() const override { return bWorldPositionOffsetWritesVelocity; }
657 ENGINE_API virtual void GetPrimitiveStats(FPrimitiveStats& PrimitiveStats) const override;
658#if WITH_EDITOR
659 ENGINE_API virtual HHitProxy* CreateMeshHitProxy(int32 SectionIndex, int32 MaterialIndex) const override;
660#endif
661//~ End UPrimitiveComponent Interface.
662
663 //~ Begin UMeshComponent Interface
664 ENGINE_API virtual void RegisterLODStreamingCallback(FLODStreamingCallback&& Callback, int32 LODIdx, float TimeoutSecs, bool bOnStreamIn) override;
666 ENGINE_API virtual bool PrestreamMeshLODs(float Seconds) override;
667 ENGINE_API virtual UTexture* GetMeshPaintTexture() const override;
668 ENGINE_API virtual void SetMeshPaintTexture(UTexture* Texture) override;
669 ENGINE_API virtual void SetMeshPaintTextureOverride(UTexture* OverrideTexture) override;
670 ENGINE_API virtual int32 GetMeshPaintTextureCoordinateIndex() const override;
671 //~ End UMeshComponent Interface
672
673 //~ Begin INavRelevantInterface Interface.
674 ENGINE_API virtual bool IsNavigationRelevant() const override;
675 ENGINE_API virtual FBox GetNavigationBounds() const override;
676 ENGINE_API virtual void GetNavigationData(FNavigationRelevantData& Data) const override;
677 //~ End INavRelevantInterface Interface.
687
691 ENGINE_API virtual bool HasLightmapTextureCoordinates() const;
692
702
710 ENGINE_API virtual void GetEstimatedLightMapResolution(int32& Width, int32& Height) const;
711
712
731 int32& StaticLightingResolution, bool& bIsUsingTextureMapping, bool& bHasLightmapTexCoords) const;
732
733#if WITH_EDITORONLY_DATA
740
747
750
755 ENGINE_API void CopyInstanceVertexColorsIfCompatible( const UStaticMeshComponent* SourceComponent );
756#endif
757
758 UE_DEPRECATED(5.6, "Use UPrimitiveComponent::IsFirstPersonRelevant() instead.")
759 bool IsStaticMeshFirstPersonRelevant() const { return FirstPersonPrimitiveType != EFirstPersonPrimitiveType::None; }
760
766
767#if WITH_EDITORONLY_DATA
772#endif
773
774#if WITH_EDITORONLY_DATA
780
786#endif
787
790
793
794 UE_DEPRECATED(5.7, "Please use SupportsDitheredLODTransitions with EShaderPlatform argument and not ERHIFeatureLevel::Type")
796
799
800 ENGINE_API UMaterialInterface* GetNaniteAuditMaterial(int32 MaterialIndex) const;
801
802 /* Returns true if mesh vertex color painting is supported on this component. */
804 /* Returns true if mesh texture color painting is supported on this component. */
805 ENGINE_API bool CanMeshPaintTextureColors() const;
808
809 inline bool IsReverseCulling() const { return bReverseCulling; }
810 inline bool IsDisallowNanite() const { return bDisallowNanite; }
811 inline bool IsForceDisableNanite() const { return bForceDisableNanite; }
812 inline bool IsForceNaniteForMasked() const { return bForceNaniteForMasked; }
813 inline int32 GetForcedLodModel() const { return ForcedLodModel; }
814 inline bool GetOverrideMinLOD() const { return bOverrideMinLOD; }
815 inline int32 GetMinLOD() const { return MinLOD; }
816 inline bool GetForceNaniteForMasked() const { return bForceNaniteForMasked; }
817
818#if WITH_EDITORONLY_DATA
819 bool IsDisplayNaniteFallbackMesh() const { return bDisplayNaniteFallbackMesh; }
820#endif
821
825
826private:
828 ENGINE_API void InitResources();
829
830#if WITH_EDITOR
833
836
839#endif
840
841 ENGINE_API bool UseNaniteOverrideMaterials(bool bDoingMaterialAudit) const;
842
843 ENGINE_API UMaterialInterface* GetMaterial(int32 MaterialIndex, bool bDoingNaniteMaterialAudit) const;
844
845protected:
847 ENGINE_API virtual void CollectPSOPrecacheData(const FPSOPrecacheParams& BasePrecachePSOParams, FMaterialInterfacePSOPrecacheParamsList& OutParams) override;
849 using GetPSOVertexElementsFn = TFunctionRef<void(const FStaticMeshLODResources& LODRenderData, int32 LODIndex, bool bSupportsManualVertexFetch, FVertexDeclarationElementList& Elements)>;
850 ENGINE_API void CollectPSOPrecacheDataImpl(const FVertexFactoryType* VFType, const FPSOPrecacheParams& BasePrecachePSOParams, GetPSOVertexElementsFn GetVertexElements, FMaterialInterfacePSOPrecacheParamsList& OutParams) const;
851
853 virtual bool SupportsStaticLighting() const override
854 {
855 return true;
856 }
857
858 ENGINE_API bool ShouldCreateNaniteProxy(Nanite::FMaterialAudit* OutNaniteMaterials = nullptr) const;
859
860 // Overload this in child implementations that wish to extend Static Mesh or Nanite scene proxy implementations
861 ENGINE_API virtual FPrimitiveSceneProxy* CreateStaticMeshSceneProxy(Nanite::FMaterialAudit& NaniteMaterials, bool bCreateNanite);
862
864
865public:
866
867 ENGINE_API void ReleaseResources();
868
871
874
886
892 ENGINE_API class UStaticMeshSocket const* GetSocketByName( FName InSocketName ) const;
893
895 ENGINE_API FColor GetWireframeColor() const;
896
899
900 ENGINE_API void ApplyComponentInstanceData(struct FStaticMeshComponentInstanceData* ComponentInstanceData);
901
902 ENGINE_API virtual void PropagateLightingScenarioChange() override;
903
904 ENGINE_API const FMeshMapBuildData* GetMeshMapBuildData(const FStaticMeshComponentLODInfo& LODInfo, bool bCheckForResourceCluster = true) const;
905
908
913
914#if WITH_EDITOR
916 DECLARE_EVENT_OneParam(UStaticMeshComponent, FOnStaticMeshChanged, UStaticMeshComponent*);
918#endif
919
920private:
921#if WITH_EDITOR
923#endif
925
927 friend class FStaticMeshComponentHelper;
929};
930
932USTRUCT()
934{
936
937
938 UPROPERTY()
939 TArray<FPaintedVertex> PaintedVertices;
940
942 UPROPERTY()
943 TArray<FColor> VertexBufferColors;
944
946 UPROPERTY()
947 uint32 LODIndex = 0;
948
950 bool IsValid() const
951 {
952 return PaintedVertices.Num() > 0 && VertexBufferColors.Num() > 0;
953 }
954};
955
956USTRUCT()
958{
960public:
962 FStaticMeshComponentInstanceData(const UStaticMeshComponent* SourceComponent);
964
965 virtual bool ContainsData() const override;
966
967 virtual void ApplyToComponent(UActorComponent* Component, const ECacheApplyPhase CacheApplyPhase) override;
968
969 virtual void AddReferencedObjects(FReferenceCollector& Collector) override;
970
972 void AddVertexColorData(const struct FStaticMeshComponentLODInfo& LODInfo, uint32 LODIndex);
973
975 bool ApplyVertexColorData(UStaticMeshComponent* StaticMeshComponent) const;
976
978 UPROPERTY()
980
982 UPROPERTY()
984
986 UPROPERTY()
987 TArray<FGuid> CachedStaticLighting;
988
990 UPROPERTY()
991 TArray<FStreamingTextureBuildInfo> StreamingTextureData;
992
993#if WITH_EDITORONLY_DATA
995 UPROPERTY()
997#endif
998};
999
1000
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
@ Normal
Definition AndroidInputInterface.h:116
#define GET_MEMBER_NAME_CHECKED(ClassName, MemberName)
Definition AssertionMacros.h:493
virtual bool IsPostLoadThreadSafe() const override
ECacheApplyPhase
Definition ComponentInstanceDataCache.h:18
#define UE_DECLARE_COMPONENT_ACTOR_INTERFACE(name)
Definition ComponentInterfaces.h:193
@ ForceInit
Definition CoreMiscDefines.h:155
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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_RetVal(ReturnValueType, DelegateName)
Definition DelegateCombinations.h:41
#define DECLARE_EVENT_OneParam(OwningType, EventName, Param1Type)
Definition DelegateCombinations.h:51
return true
Definition ExternalRpcRegistry.cpp:601
const bool
Definition NetworkReplayStreaming.h:178
#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 USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
EShaderPlatform
Definition RHIShaderPlatform.h:11
ERelativeTransformSpace
Definition SceneComponent.h:43
@ RTS_World
Definition SceneComponent.h:45
ELightMapInteractionType
Definition SceneTypes.h:111
ETextureStreamingBuildType
Definition TextureStreamingTypes.h:204
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
Definition ColorVertexBuffer.h:16
Definition PackedNormal.h:66
Definition FeedbackContext.h:30
Definition InstancedStaticMeshComponentHelper.h:18
Definition LightingBuildOptions.h:14
Definition MapBuildDataRegistry.h:56
Definition NameTypes.h:617
Definition ObjectSaveContext.h:244
Definition OutputDevice.h:133
Definition PrimitiveSceneProxy.h:296
Definition UnrealType.h:174
Definition UObjectGlobals.h:2492
Definition ActorComponent.h:47
Definition StaticMeshComponentHelper.h:23
Definition StaticMeshResources.h:952
Definition StaticMeshLight.h:24
Definition TextureStreamingTypes.h:223
Definition VertexFactory.h:314
Definition HitProxies.h:135
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition StructOnScope.h:142
Definition ActorComponent.h:152
Definition ActorTextureStreamingBuildDataComponent.h:43
Definition BodySetup.h:128
Definition MaterialCacheVirtualTexture.h:19
Definition MaterialInterface.h:296
Definition MeshComponent.h:25
virtual void SetMeshPaintTextureOverride(UTexture *OverrideTexture)
Definition MeshComponent.h:197
virtual ENGINE_API void GetUsedMaterials(TArray< UMaterialInterface * > &OutMaterials, bool bGetDebugMaterials=false) const override
Definition MeshComponent.cpp:281
virtual bool PrestreamMeshLODs(float Seconds)
Definition MeshComponent.h:156
virtual UTexture * GetMeshPaintTexture() const
Definition MeshComponent.h:193
virtual ENGINE_API void RegisterLODStreamingCallback(FLODStreamingCallback &&Callback, int32 LODIdx, float TimeoutSecs, bool bOnStreamIn)
Definition MeshComponent.cpp:382
virtual ENGINE_API int32 GetNumMaterials() const override
Definition MeshComponent.cpp:276
virtual void GetDefaultMaterialSlotsOverlayMaterial(TArray< TObjectPtr< UMaterialInterface > > &OutMaterialSlotOverlayMaterials) const
Definition MeshComponent.h:233
virtual bool UseNaniteOverrideMaterials() const
Definition MeshComponent.h:37
virtual void SetMeshPaintTexture(UTexture *Texture)
Definition MeshComponent.h:195
virtual bool GetMaterialStreamingData(int32 MaterialIndex, FPrimitiveMaterialInfo &MaterialData) const
Definition MeshComponent.h:176
virtual int32 GetMeshPaintTextureCoordinateIndex() const
Definition MeshComponent.h:199
Definition NavCollisionBase.h:23
Definition Object.h:95
Definition StaticMeshSocket.h:16
Definition StaticMesh.h:593
Definition Texture.h:1219
Definition World.h:918
Type
Definition SceneTypes.h:132
Definition SceneComponent.h:24
Type
Definition RHIFeatureLevel.h:20
Definition RobinHoodHashTable.h:18
Definition FieldSystemNoiseAlgo.cpp:6
Definition SkinnedMeshComponent.h:50
Definition SceneManagement.h:73
ENGINE_API FBox CalcBounds(const FVector &P0, const FVector &P1, const FVector &P2, const FVector &P3)
Definition BezierUtilities.cpp:26
FIntermediate3DTransform GetComponentTransform(const UObject *Object)
Definition MovieSceneTracksCustomAccessors.cpp:18
Definition Color.h:486
Definition ConvexVolume.h:44
Definition ShowFlags.h:56
Definition Guid.h:109
Definition EngineTypes.h:2167
Definition NavigationSystemHelpers.h:25
Definition NavigationRelevantData.h:40
Definition PSOPrecache.h:30
Definition StaticMeshComponent.h:55
friend FArchive & operator<<(FArchive &Ar, FPaintedVertex &PaintedVertex)
Definition StaticMeshComponent.h:73
Definition PrimitiveComponent.h:3164
Definition TextureStreamingTypes.h:188
Definition ComponentInterfaces.h:48
Definition UnrealType.h:6865
CORE_API static const FGuid GUID
Definition RenderingObjectVersion.h:148
@ IncreaseNormalPrecision
Definition RenderingObjectVersion.h:76
Definition StaticLighting.h:506
Definition StaticMeshComponent.h:958
virtual ~FStaticMeshComponentInstanceData()=default
Definition StaticMeshComponentLODInfo.h:14
Definition StaticMeshStateStreamHandle.h:15
Definition StaticMeshResources.h:426
Definition StaticMeshComponent.h:934
Definition TextureStreamingTypes.h:129
Definition NaniteSceneProxy.h:66
Definition NaniteResources.h:410
Definition ObjectPtr.h:488
Definition BoxSphereBounds.h:25
Definition IntPoint.h:25