UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PrimitiveComponentHelper.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
9#include "MaterialDomain.h"
10#include "MaterialShared.h"
11#include "RHIFeatureLevel.h"
12#include "RenderUtils.h"
13#include "SceneTypes.h"
14#include "Engine/EngineTypes.h"
17
20{
21public:
22 template<class T>
24
25 template<class T>
26 static void GetNavigationData(const T& Component, FNavigationRelevantData& OutData);
27
28 template<class T>
29 static void AddNavigationModifier(const T& Component, FNavigationRelevantData& OutData);
30};
31
32template<class T>
34{
37 Component.GetUsedMaterials(UsedMaterials);
38
40
41 for (const UMaterialInterface* MaterialInterface : UsedMaterials)
42 {
43 if (MaterialInterface)
44 {
45 FMaterialRelevance MaterialRelevance = MaterialInterface->GetRelevance_Concurrent(InShaderPlatform);
46
47 Result.bAnyMaterialHasWorldPositionOffset = Result.bAnyMaterialHasWorldPositionOffset || MaterialRelevance.bUsesWorldPositionOffset;
48
49 if (MaterialInterface->HasPixelAnimation() && IsOpaqueOrMaskedBlendMode(MaterialInterface->GetBlendMode()))
50 {
51 Result.bAnyMaterialHasPixelAnimation = true;
52 }
53
54 if (bUseTessellation && MaterialRelevance.bUsesDisplacement)
55 {
56 FDisplacementScaling DisplacementScaling = MaterialInterface->GetDisplacementScaling();
57
58 const float MinDisplacement = (0.0f - DisplacementScaling.Center) * DisplacementScaling.Magnitude;
59 const float MaxDisplacement = (1.0f - DisplacementScaling.Center) * DisplacementScaling.Magnitude;
60
61 Result.MinMaxMaterialDisplacement.X = FMath::Min(Result.MinMaxMaterialDisplacement.X, MinDisplacement);
62 Result.MinMaxMaterialDisplacement.Y = FMath::Max(Result.MinMaxMaterialDisplacement.Y, MaxDisplacement);
63 }
64
65 Result.MaxWorldPositionOffsetDisplacement = FMath::Max(Result.MaxWorldPositionOffsetDisplacement, MaterialInterface->GetMaxWorldPositionOffsetDisplacement());
66
67 const FMaterialCachedExpressionData& CachedMaterialData = MaterialInterface->GetCachedExpressionData();
68
69 Result.bAnyMaterialHasPerInstanceRandom = Result.bAnyMaterialHasPerInstanceRandom || CachedMaterialData.bHasPerInstanceRandom;
70 Result.bAnyMaterialHasPerInstanceCustomData = Result.bAnyMaterialHasPerInstanceCustomData || CachedMaterialData.bHasPerInstanceCustomData;
71 }
72 }
73
74 return Result;
75}
76
77template<class T>
82
83template<class T>
85{
86 if (Component.bFillCollisionUnderneathForNavmesh || Component.bRasterizeAsFilledConvexVolume)
87 {
90 CompositeNavModifier.SetRasterizeAsFilledConvexVolume(Component.bRasterizeAsFilledConvexVolume);
92 }
93}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ENGINE_API bool IsOpaqueOrMaskedBlendMode(EBlendMode BlendMode)
EShaderPlatform
Definition RHIShaderPlatform.h:11
bool UseNaniteTessellation()
Definition RenderUtils.cpp:1370
Definition PrimitiveComponentHelper.h:20
static void GetNavigationData(const T &Component, FNavigationRelevantData &OutData)
Definition PrimitiveComponentHelper.h:78
static void AddNavigationModifier(const T &Component, FNavigationRelevantData &OutData)
Definition PrimitiveComponentHelper.h:84
static FPrimitiveMaterialPropertyDescriptor GetUsedMaterialPropertyDesc(const T &Component, EShaderPlatform InShaderPlatform)
Definition PrimitiveComponentHelper.h:33
Definition Array.h:670
Definition MaterialInterface.h:296
Definition NavigationModifier.h:279
void Add(const FAreaNavModifier &Area)
Definition NavigationModifier.h:310
void SetFillCollisionUnderneathForNavmesh(bool bValue)
Definition NavigationModifier.h:361
Definition EngineTypes.h:3204
float Center
Definition EngineTypes.h:3211
float Magnitude
Definition EngineTypes.h:3208
Definition MaterialCachedData.h:199
Definition MaterialRelevance.h:13
uint8 bUsesDisplacement
Definition MaterialRelevance.h:40
uint8 bUsesWorldPositionOffset
Definition MaterialRelevance.h:39
Definition NavigationRelevantData.h:40
FCompositeNavModifier Modifiers
Definition NavigationRelevantData.h:70
Definition SceneTypes.h:237