UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MeshCardBuild.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Async/AsyncWork.h"
10
11#if WITH_EDITORONLY_DATA
12#include "MeshUtilities.h"
13#endif
14
15#include <atomic>
16
18class UStaticMesh;
21
23{
24public:
28
29 bool ContainsNaN() const
30 {
31 return OBB.ContainsNaN();
32 }
33
35 {
36 // Note: this is derived data, no need for versioning (bump the DDC guid)
37 Ar << Data.OBB;
38 Ar << Data.AxisAlignedDirectionIndex;
39 return Ar;
40 }
41};
42
44{
45public:
46 enum class ESurfelType : uint8
47 {
48 Valid,
49 Invalid,
50
51 Idle,
52 Cluster,
53 Used
54 };
55
62
72
78
83
84 void Init()
85 {
86 Surfels.Reset();
87 SurfelRays.Reset();
88 Clusters.Reset();
89 NumSurfels = 0;
90 }
91};
92
94{
95public:
97 bool bMostlyTwoSided = false;
99
100 // Temporary debug visualization data, don't serialize
102
103 bool ContainsNaN() const
104 {
105 return Bounds.ContainsNaN() || CardBuildData.ContainsByPredicate([](const FLumenCardBuildData& Data) { return Data.ContainsNaN(); });
106 }
107
109 {
110 // Note: this is derived data, no need for versioning (bump the DDC guid)
111 Ar << Data.Bounds;
112 Ar << Data.bMostlyTwoSided;
113 Ar << Data.CardBuildData;
114 return Ar;
115 }
116};
117
118// Unique id per card representation data instance.
120{
121public:
123
124 bool IsValid() const
125 {
126 return Value != 0;
127 }
128
130 {
131 return Value == B.Value;
132 }
133
135 {
136 return GetTypeHash(DataId.Value);
137 }
138};
139
142{
143public:
144
146
148
150 {
151 // 0 means invalid id.
152 static std::atomic<uint32> NextCardRepresentationId { 1 };
154 }
155
157 {
158 CumulativeResourceSize.AddDedicatedSystemMemoryBytes(sizeof(*this));
159 }
160
162 {
165 return ResSize.GetTotalMemoryBytes();
166 }
167
168 bool ContainsNaN() const
169 {
171 }
172
173#if WITH_EDITORONLY_DATA
174
175 void CacheDerivedData(
176 const FString& InDDCKey,
178 UStaticMesh* GenerateSource,
179 int32 MaxLumenMeshCards,
180 bool bGenerateDistanceFieldAsIfTwoSided,
183
184 UE_DEPRECATED(5.6, "Provide OptionalSourceMeshData by value (ideally using MoveTemp(...) to avoid copying the data)")
185 void CacheDerivedData(
186 const FString& InDDCKey,
187 const ITargetPlatform* TargetPlatform,
189 UStaticMesh* GenerateSource,
190 int32 MaxLumenMeshCards,
191 bool bGenerateDistanceFieldAsIfTwoSided,
193 {
194 CacheDerivedData(InDDCKey, Mesh, GenerateSource, MaxLumenMeshCards, bGenerateDistanceFieldAsIfTwoSided, OptionalSourceMeshData ? *OptionalSourceMeshData : FSourceMeshDataForDerivedDataTask());
195 }
196
197#endif
198
200 {
201 // Note: this is derived data, no need for versioning (bump the DDC guid)
202 Ar << Data.MeshCardsBuildData;
203 return Ar;
204 }
205};
206
207
227
247
250{
251public:
252
254
256
259
262
265
268
271
274
276 ENGINE_API void ProcessAsyncTasks(bool bLimitExecutionTime = false) override;
277
279 ENGINE_API void Shutdown() override;
280
282 {
283 FScopeLock Lock(&CriticalSection);
284 return ReferencedTasks.Num();
285 }
286
289
290private:
293
294 ENGINE_API FName GetAssetTypeName() const override;
295 ENGINE_API FTextFormat GetAssetNameFormat() const override;
296 ENGINE_API TArrayView<FName> GetDependentTypeNames() const override;
297 ENGINE_API int32 GetNumRemainingAssets() const override;
298 ENGINE_API void FinishAllCompilation() override;
299
300 void ProcessPendingTasks();
301
303
306
308 void RescheduleBackgroundTask(FAsyncCardRepresentationTask* InTask, EQueuedWorkPriority InPriority);
309
311 void StartBackgroundTask(FAsyncCardRepresentationTask* Task);
312
314 void RunImmediateTask(FAsyncCardRepresentationTask* Task);
315
317 void CancelAndDeleteTaskByPredicate(TFunctionRef<bool(FAsyncCardRepresentationTask*)> ShouldCancelPredicate);
318
320 void CancelAndDeleteTask(const TSet<FAsyncCardRepresentationTask*>& Tasks);
321
323 void FinishCompilationForObjects(TArrayView<UObject* const> InObjects) override;
324
326 void MarkCompilationAsCanceled(TArrayView<UObject* const> InObjects) override;
327
329 bool IsTaskInvalid(FAsyncCardRepresentationTask* Task) const;
330
332 void OnPostReachabilityAnalysis();
333
336
339
342
343 FDelegateHandle PostReachabilityAnalysisHandle;
344
345 class IMeshUtilities* MeshUtilities;
346
347 mutable FCriticalSection CriticalSection;
348
350};
351
354
355#if WITH_EDITORONLY_DATA
362
363extern ENGINE_API FString BuildCardRepresentationDerivedDataKey(const FString& InMeshKey);
364
366 UStaticMesh* StaticMeshAsset,
368 const FString& DistanceFieldKey,
371
372UE_DEPRECATED(5.6, "Provide OptionalSourceMeshData by value (ideally using MoveTemp(...) to avoid copying the data)")
374 const ITargetPlatform* TargetPlatform,
375 UStaticMesh* StaticMeshAsset,
377 const FString& DistanceFieldKey,
379{
381}
382#endif
383
384#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
387#endif
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
@ ForceInit
Definition CoreMiscDefines.h:155
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define RETURN_QUICK_DECLARE_CYCLE_STAT(StatId, GroupId)
Definition Stats.h:655
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
UE::Math::TBox< double > FBox
Definition MathFwd.h:55
ENGINE_API FCardRepresentationAsyncQueue * GCardRepresentationAsyncQueue
Definition MeshCardRepresentation.cpp:167
ELumenCardDilationMode
Definition MeshCardRepresentation.h:17
EQueuedWorkPriority
Definition QueuedThreadPool.h:14
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 Archive.h:1208
Definition MeshCardBuild.h:210
void DoWork()
Definition MeshCardRepresentation.cpp:458
TStatId GetStatId() const
Definition MeshCardBuild.h:217
FAsyncCardRepresentationTaskWorker(FAsyncCardRepresentationTask &InTask)
Definition MeshCardBuild.h:212
Definition MeshCardBuild.h:229
UStaticMesh * GenerateSource
Definition MeshCardBuild.h:242
FCardRepresentationData * GeneratedCardRepresentation
Definition MeshCardBuild.h:244
FSourceMeshDataForDerivedDataTask SourceMeshData
Definition MeshCardBuild.h:238
bool bSuccess
Definition MeshCardBuild.h:231
bool bGenerateDistanceFieldAsIfTwoSided
Definition MeshCardBuild.h:239
UStaticMesh * StaticMesh
Definition MeshCardBuild.h:241
int32 MaxLumenMeshCards
Definition MeshCardBuild.h:240
FString DDCKey
Definition MeshCardBuild.h:243
TUniquePtr< FAsyncTask< FAsyncCardRepresentationTaskWorker > > AsyncTask
Definition MeshCardBuild.h:245
Definition AsyncCompilationHelpers.h:14
Definition MeshCardBuild.h:250
ENGINE_API void ProcessAsyncTasks(bool bLimitExecutionTime=false) override
Definition MeshCardRepresentation.cpp:957
ENGINE_API void CancelAllOutstandingBuilds()
Definition MeshCardRepresentation.cpp:701
virtual ENGINE_API ~FCardRepresentationAsyncQueue()
Definition MeshCardRepresentation.cpp:446
ENGINE_API void CancelBuilds(const TSet< UStaticMesh * > &InStaticMeshes)
Definition MeshCardRepresentation.cpp:689
ENGINE_API void CancelBuild(UStaticMesh *StaticMesh)
Definition MeshCardRepresentation.cpp:684
ENGINE_API FCardRepresentationAsyncQueue()
Definition MeshCardRepresentation.cpp:422
ENGINE_API void BlockUntilBuildComplete(UStaticMesh *InStaticMesh, bool bWarnIfBlocked)
Definition MeshCardRepresentation.cpp:779
ENGINE_API void Shutdown() override
Definition MeshCardRepresentation.cpp:1059
ENGINE_API void BlockUntilAllBuildsComplete()
Definition MeshCardRepresentation.cpp:880
ENGINE_API void AddTask(FAsyncCardRepresentationTask *Task)
Definition MeshCardRepresentation.cpp:635
int32 GetNumOutstandingTasks() const
Definition MeshCardBuild.h:281
static ENGINE_API FName GetStaticAssetTypeName()
Definition MeshCardRepresentation.cpp:465
Definition MeshCardBuild.h:120
bool operator==(FCardRepresentationDataId B) const
Definition MeshCardBuild.h:129
friend uint32 GetTypeHash(FCardRepresentationDataId DataId)
Definition MeshCardBuild.h:134
uint32 Value
Definition MeshCardBuild.h:122
bool IsValid() const
Definition MeshCardBuild.h:124
Definition MeshCardBuild.h:142
friend FArchive & operator<<(FArchive &Ar, FCardRepresentationData &Data)
Definition MeshCardBuild.h:199
bool ContainsNaN() const
Definition MeshCardBuild.h:168
SIZE_T GetResourceSizeBytes() const
Definition MeshCardBuild.h:161
FMeshCardsBuildData MeshCardsBuildData
Definition MeshCardBuild.h:145
FCardRepresentationDataId CardRepresentationDataId
Definition MeshCardBuild.h:147
void GetResourceSizeEx(FResourceSizeEx &CumulativeResourceSize) const
Definition MeshCardBuild.h:156
FCardRepresentationData()
Definition MeshCardBuild.h:149
Definition RenderDeferredCleanup.h:11
Definition IDelegateInstance.h:14
Definition DistanceFieldAtlas.h:349
Definition MeshCardBuild.h:23
uint8 AxisAlignedDirectionIndex
Definition MeshCardBuild.h:26
FLumenCardOBBf OBB
Definition MeshCardBuild.h:25
ELumenCardDilationMode DilationMode
Definition MeshCardBuild.h:27
friend FArchive & operator<<(FArchive &Ar, FLumenCardBuildData &Data)
Definition MeshCardBuild.h:34
bool ContainsNaN() const
Definition MeshCardBuild.h:29
Definition MeshCardBuild.h:44
int32 NumSurfels
Definition MeshCardBuild.h:82
TArray< FRay > SurfelRays
Definition MeshCardBuild.h:80
TArray< FSurfelCluster > Clusters
Definition MeshCardBuild.h:81
TArray< FSurfel > Surfels
Definition MeshCardBuild.h:79
ESurfelType
Definition MeshCardBuild.h:47
void Init()
Definition MeshCardBuild.h:84
Definition MeshCardBuild.h:94
bool ContainsNaN() const
Definition MeshCardBuild.h:103
TArray< FLumenCardBuildData > CardBuildData
Definition MeshCardBuild.h:98
FLumenCardBuildDebugData DebugData
Definition MeshCardBuild.h:101
friend FArchive & operator<<(FArchive &Ar, FMeshCardsBuildData &Data)
Definition MeshCardBuild.h:108
bool bMostlyTwoSided
Definition MeshCardBuild.h:97
FBox Bounds
Definition MeshCardBuild.h:96
Definition NameTypes.h:617
Definition AsyncWork.h:663
Definition QueuedThreadPool.h:105
Definition ScopeLock.h:141
Definition DerivedMeshDataTaskUtils.h:14
Definition StaticMeshResources.h:774
Definition Text.h:278
Definition ArrayView.h:139
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT bool ContainsByPredicate(Predicate Pred) const
Definition Array.h:1538
Definition AssetRegistryState.h:50
bool ContainsNaN() const
Definition MeshCardRepresentation.h:156
Definition UniquePtr.h:107
Definition StaticMesh.h:593
Definition MeshCardBuild.h:57
FVector3f RayEnd
Definition MeshCardBuild.h:59
FVector3f RayStart
Definition MeshCardBuild.h:58
bool bHit
Definition MeshCardBuild.h:60
Definition MeshCardBuild.h:74
TArray< FRay > Rays
Definition MeshCardBuild.h:76
TArray< FSurfel > Surfels
Definition MeshCardBuild.h:75
Definition MeshCardBuild.h:64
FVector3f Normal
Definition MeshCardBuild.h:66
float Coverage
Definition MeshCardBuild.h:67
int32 SourceSurfelIndex
Definition MeshCardBuild.h:69
FVector3f Position
Definition MeshCardBuild.h:65
ESurfelType Type
Definition MeshCardBuild.h:70
float Visibility
Definition MeshCardBuild.h:68
Definition ResourceSize.h:31
Definition IAssetCompilingManager.h:25
Definition LightweightStats.h:416
bool ContainsNaN() const
Definition Box.h:112