UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ParticleSystem.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"
8#include "UObject/Object.h"
12#include "RHIDefinitions.h"
13#include "PSOPrecache.h"
14
15#include "ParticleSystem.generated.h"
16
21class UParticleSystemComponent;
23
28UENUM()
30{
32 EPSUM_RealTime UMETA(DisplayName="Real-Time"),
34 EPSUM_FixedTime UMETA(DisplayName="Fixed-Time")
35};
36
40UENUM()
42{
43 // Automatically set the LOD level, checking every LODDistanceCheckTime seconds.
44 PARTICLESYSTEMLODMETHOD_Automatic UMETA(DisplayName="Automatic"),
45
46 // LOD level is directly set by the game code.
47 PARTICLESYSTEMLODMETHOD_DirectSet UMETA(DisplayName = "Direct Set"),
48
49 // LOD level is determined at Activation time, then left alone unless directly set by game code.
50 PARTICLESYSTEMLODMETHOD_ActivateAutomatic UMETA(DisplayName = "Activate Automatic")
51};
52
54UENUM()
56{
58 EPSOBM_None UMETA(DisplayName="None"),
60 EPSOBM_ParticleBounds UMETA(DisplayName="Particle Bounds"),
62 EPSOBM_CustomBounds UMETA(DisplayName="Custom Bounds")
63};
64
66USTRUCT()
81
86USTRUCT()
88{
90
92 TArray<uint8> SoloEnableSetting;
93
94};
95
96USTRUCT()
98{
100
102 : Name(NAME_None)
103 , Material(nullptr)
104 {
105 }
106
107 UPROPERTY(EditAnywhere, Category = NamedMaterial)
109
110 UPROPERTY(EditAnywhere, Category = NamedMaterial)
112};
113
115
116UCLASS(Abstract, MinimalAPI, BlueprintType)
118{
120public:
122
124 UPROPERTY(EditAnywhere, Category = Performance, AdvancedDisplay)
125 uint32 MaxPoolSize;
126 //TODO: Allow pool size overriding per world and possibly implement some preallocation too.
127
133 UPROPERTY(EditAnywhere, Category = Performance, AdvancedDisplay)
134 uint32 PoolPrimeSize = 0;
135
136#if WITH_PER_SYSTEM_PARTICLE_PERF_STATS
137 mutable FParticlePerfStats* ParticlePerfStats = nullptr;
138#endif
139
140 const bool HasLaunchedPSOPrecaching() const { return PSOPrecachingLaunched; }
141 const FGraphEventRef& GetPrecachePSOsEvent() const { return PrecachePSOsEvent; }
142 const TArray<FMaterialPSOPrecacheRequestID>& GetMaterialPSOPrecacheRequestIDs() const { return MaterialPSOPrecacheRequestIDs; }
143
144protected:
145
147
148 bool PSOPrecachingLaunched = false;
151};
152
158UCLASS(hidecategories=Object, MinimalAPI, BlueprintType)
160{
162
164 :OcclusionBoundsMethod(EPSOBM_ParticleBounds)
165 {
166
167 }
168
170 UPROPERTY(EditAnywhere, Category=ParticleSystem)
171 float UpdateTime_FPS;
172
174 UPROPERTY()
175 float UpdateTime_Delta;
176
182 UPROPERTY(EditAnywhere, Category=ParticleSystem, meta=(DisplayName="Warmup Time - beware hitches!"))
183 float WarmupTime;
184
188 UPROPERTY(EditAnywhere, Category=ParticleSystem)
189 float WarmupTickRate;
190
194
198
199#if WITH_EDITORONLY_DATA
201 UPROPERTY()
203
205 UPROPERTY()
206 float ThumbnailDistance;
207
209 UPROPERTY(EditAnywhere, Category=Thumbnail)
210 float ThumbnailWarmup;
211
212#endif // WITH_EDITORONLY_DATA
214 UPROPERTY(export)
216
217 //
218 // LOD
219 //
223 UPROPERTY(EditAnywhere, Category=LOD, AssetRegistrySearchable)
224 float LODDistanceCheckTime;
225
227 UPROPERTY(EditAnywhere, Category = MacroUV)
228 float MacroUVRadius;
229
244 UPROPERTY(EditAnywhere, editfixedsize, Category=LOD)
245 TArray<float> LODDistances;
246
247#if WITH_EDITORONLY_DATA
249 UPROPERTY()
251
252#endif // WITH_EDITORONLY_DATA
253
254 UPROPERTY(EditAnywhere, Category=LOD)
256
258 UPROPERTY(EditAnywhere, Category=Bounds)
259 FBox FixedRelativeBoundingBox;
260
265 UPROPERTY(EditAnywhere, Category=ParticleSystem)
266 float SecondsBeforeInactive;
267
268#if WITH_EDITORONLY_DATA
269 //
270 // Cascade 'floor' mesh information.
271 //
272 UPROPERTY()
273 FString FloorMesh;
274
275 UPROPERTY()
277
278 UPROPERTY()
280
281 UPROPERTY()
282 float FloorScale;
283
284 UPROPERTY()
286
288 UPROPERTY()
289 FColor BackgroundColor;
290
291#endif // WITH_EDITORONLY_DATA
292
294 UPROPERTY(EditAnywhere, Category=Delay, AssetRegistrySearchable)
295 float Delay;
296
298 UPROPERTY(EditAnywhere, Category=Delay)
299 float DelayLow;
300
302 UPROPERTY(EditAnywhere, Category = ParticleSystem)
303 uint8 bOrientZAxisTowardCamera : 1;
304
306 UPROPERTY(EditAnywhere, Category = Bounds)
307 uint8 bUseFixedRelativeBoundingBox : 1;
308
310 UPROPERTY()
311 uint8 bShouldResetPeakCounts : 1;
312
315 uint8 bHasPhysics : 1;
316
318 UPROPERTY(EditAnywhere, Category=Thumbnail)
319 uint8 bUseRealtimeThumbnail : 1;
320
322 UPROPERTY()
323 uint8 ThumbnailImageOutOfDate : 1;
324
325private:
327 uint8 bIsElligibleForAsyncTick : 1;
329 uint8 bIsElligibleForAsyncTickComputed : 1;
330public:
331
332#if WITH_EDITORONLY_DATA
334 UPROPERTY()
336
337#endif // WITH_EDITORONLY_DATA
338
343 UPROPERTY(EditAnywhere, Category=Delay)
344 uint8 bUseDelayRange : 1;
345
346 UPROPERTY(EditAnywhere, Category = Performance, meta = (ToolTip = "Whether or not to allow instances of this system to have their ticks managed."), AdvancedDisplay)
347 uint8 bAllowManagedTicking : 1;
348
349 UPROPERTY(EditAnywhere, Category = Performance, meta = (ToolTip = "Auto-deactivate system if all emitters are determined to not spawn particles again, regardless of lifetime."))
350 uint8 bAutoDeactivate : 1;
351
357 UPROPERTY()
358 uint8 bRegenerateLODDuplicate : 1;
359
360 UPROPERTY(EditAnywhere, Category = ParticleSystem, AssetRegistrySearchable)
362
369 UPROPERTY(EditAnywhere, Category=LOD)
371
373 UPROPERTY(EditAnywhere, Category = Performance)
375
381 UPROPERTY(EditAnywhere, Category = Occlusion)
383
384private:
386 uint8 bAnyEmitterLoopsForever : 1;
387
388public:
389
391 UPROPERTY(EditAnywhere, Category = Performance)
392 EParticleSignificanceLevel MaxSignificanceLevel;
393
394 UPROPERTY(EditAnywhere, Category = Performance, meta = (ToolTip = "Minimum duration between ticks; 33=tick at max. 30FPS, 16=60FPS, 8=120FPS"))
395 uint32 MinTimeBetweenTicks;
396
398 UPROPERTY(EditAnywhere, Category = Performance)
399 float InsignificanceDelay;
400
402 UPROPERTY(EditAnywhere, Category=MacroUV)
403 FVector MacroUVPosition;
404
406 UPROPERTY(EditAnywhere, Category=Occlusion)
407 FBox CustomOcclusionBounds;
408
411
417 UPROPERTY(EditAnywhere, Category = Materials)
418 TArray<FNamedEmitterMaterial> NamedMaterialSlots;
419
420 //~ Begin UObject Interface.
421#if WITH_EDITOR
422 virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
423#endif // WITH_EDITOR
424 virtual void PreSave(FObjectPreSaveContext ObjectSaveContext) override;
425 virtual void PostLoad() override;
426 virtual bool IsPostLoadThreadSafe() const override;
427 virtual void GetAssetRegistryTags(FAssetRegistryTagsContext Context) const override;
428 UE_DEPRECATED(5.4, "Implement the version that takes FAssetRegistryTagsContext instead.")
430 bool UsesCPUCollision() const;
431 virtual bool CanBeClusterRoot() const override;
433
434 //~ End UObject Interface.
435
436 void PrecachePSOs();
437
438 bool CanBePooled()const;
439
440 // @todo document
441 void UpdateColorModuleClampAlpha(class UParticleModuleColorBase* ColorModule);
442
451 virtual bool CalculateMaxActiveParticleCounts();
452
459 ENGINE_API void GetParametersUtilized(TArray<TArray<FString> >& ParticleSysParamList,
461
465 ENGINE_API void SetupSoloing();
466
474 ENGINE_API bool ToggleSoloing(class UParticleEmitter* InEmitter);
475
481 ENGINE_API bool TurnOffSoloing();
482
486 ENGINE_API void SetupLODValidity();
487
491 ENGINE_API void SetDelay(float InDelay);
492
493#if WITH_EDITOR
503
508#endif
510 virtual enum ParticleSystemLODMethod GetCurrentLODMethod();
511
517 virtual int32 GetLODLevelCount();
518
527 virtual float GetLODDistance(int32 LODLevelIndex);
528
534 virtual void SetCurrentLODMethod(ParticleSystemLODMethod InMethod);
535
545 virtual bool SetLODDistance(int32 LODLevelIndex, float InDistance);
546
555 bool DoesAnyEmitterHaveMotionBlur(int32 LODLevelIndex) const;
556
560 ENGINE_API void BuildEmitters();
561
563 inline bool CanTickInAnyThread()
564 {
565 if (!bIsElligibleForAsyncTickComputed)
566 {
567 ComputeCanTickInAnyThread();
568 }
569 return bIsElligibleForAsyncTick;
570 }
572 ENGINE_API void ComputeCanTickInAnyThread();
573
575 bool HasGPUEmitter() const;
576
581 UFUNCTION(BlueprintCallable, Category = "Particle System")
582 bool ContainsEmitterType(UClass* TypeData);
583
585 bool IsLooping() const { return bAnyEmitterLoopsForever; }
586 bool IsImmortal() const { return bIsImmortal; }
587 bool WillBecomeZombie() const { return bWillBecomeZombie; }
588
589 EParticleSignificanceLevel GetHighestSignificance()const { return HighestSignificance; }
590 EParticleSignificanceLevel GetLowestSignificance()const { return LowestSignificance; }
591 bool ShouldManageSignificance()const { return bShouldManageSignificance; }
592
593 inline bool AllowManagedTicking()const { return bAllowManagedTicking; }
594private:
595
597 EParticleSignificanceLevel HighestSignificance;
599 EParticleSignificanceLevel LowestSignificance;
600
601 uint8 bShouldManageSignificance : 1;
602
604 uint8 bIsImmortal : 1;
606 uint8 bWillBecomeZombie : 1;
607};
virtual bool IsPostLoadThreadSafe() const override
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
EParticleSignificanceLevel
Definition ParticleHelper.h:2398
EParticleSystemInsignificanceReaction
Definition ParticleHelper.h:2414
EParticleSystemOcclusionBoundsMethod
Definition ParticleSystem.h:56
@ UMETA
Definition ParticleSystem.h:32
EParticleSystemUpdateMode
Definition ParticleSystem.h:30
uint32 FMaterialPSOPrecacheRequestID
Definition ParticleSystem.h:114
ParticleSystemLODMethod
Definition ParticleSystem.h:42
if(Failed) console_printf("Failed.\n")
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition AssetRegistryTagsContext.h:98
Definition NameTypes.h:617
Definition ObjectSaveContext.h:244
Definition Array.h:670
Definition EnumAsByte.h:22
Definition UnrealString.h.inl:34
Definition Class.h:3793
Definition ParticleSystem.h:118
UFXSystemAsset()
Definition ParticleSystem.h:121
const FGraphEventRef & GetPrecachePSOsEvent() const
Definition ParticleSystem.h:141
const bool HasLaunchedPSOPrecaching() const
Definition ParticleSystem.h:140
FGraphEventRef PrecachePSOsEvent
Definition ParticleSystem.h:149
const TArray< FMaterialPSOPrecacheRequestID > & GetMaterialPSOPrecacheRequestIDs() const
Definition ParticleSystem.h:142
TArray< FMaterialPSOPrecacheRequestID > MaterialPSOPrecacheRequestIDs
Definition ParticleSystem.h:150
Definition InterpCurveEdSetup.h:105
Definition MaterialInterface.h:296
virtual bool CanBeClusterRoot() const
Definition UObjectBaseUtility.h:396
Definition Object.h:95
virtual COREUOBJECT_API void GetAssetRegistryTags(FAssetRegistryTagsContext Context) const
Definition Obj.cpp:2423
Definition ParticleEmitter.h:98
Definition ParticleModuleColorBase.h:13
Definition ParticleSystem.h:160
bool WillBecomeZombie() const
Definition ParticleSystem.h:587
EParticleSignificanceLevel GetHighestSignificance() const
Definition ParticleSystem.h:589
bool CanTickInAnyThread()
Definition ParticleSystem.h:563
EParticleSignificanceLevel GetLowestSignificance() const
Definition ParticleSystem.h:590
bool AllowManagedTicking() const
Definition ParticleSystem.h:593
bool IsImmortal() const
Definition ParticleSystem.h:586
bool ShouldManageSignificance() const
Definition ParticleSystem.h:591
Definition Color.h:486
Definition ParticleSystem.h:88
Definition ParticleSystem.h:98
Definition ParticlePerfStats.h:171
Definition ParticleSystem.h:68
static FParticleSystemLOD CreateParticleSystemLOD()
Definition ParticleSystem.h:75
Definition UnrealType.h:6865
Definition ObjectPtr.h:488
Definition Object.h:827