UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ParticleModuleRequired.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"
12#include "ParticleModuleRequired.generated.h"
13
16struct FCurveEdEntry;
17
18UENUM()
38
41{
42 static const float HalfRandMax = 0.5f;
43
44 switch (FlipMode)
45 {
47 return;
48
51 return;
52
54 OutSize.X = -OutSize.X;
55 return;
56
58 OutSize.Y = -OutSize.Y;
59 return;
60
63 return;
64
66 OutSize.X = InRandomStream.FRand() > HalfRandMax ? -OutSize.X : OutSize.X;
67 return;
68
70 OutSize.Y = InRandomStream.FRand() > HalfRandMax ? -OutSize.Y : OutSize.Y;
71 return;
72
74 OutSize.X = InRandomStream.FRand() > HalfRandMax ? -OutSize.X : OutSize.X;
75 OutSize.Y = InRandomStream.FRand() > HalfRandMax ? -OutSize.Y : OutSize.Y;
76 return;
77
78 default:
80 break;
81 }
82}
83
84UENUM()
94
95UENUM()
106
118
119
120
121UCLASS(editinlinenew, hidecategories=(Object, Cascade), meta=(DisplayName = "Required"), MinimalAPI)
123{
125
126 //
127 // General.
128 //
129
130
131 UPROPERTY(EditAnywhere, Category=Emitter)
133
135 UPROPERTY(EditAnywhere, Category = Emitter, meta = (UIMin = "0", DisplayAfter="ScreenAlignment"))
136 float MinFacingCameraBlendDistance;
137
139 UPROPERTY(EditAnywhere, Category = Emitter, meta = (UIMin = "0", DisplayAfter="MinFacingCameraBlendDistance"))
140 float MaxFacingCameraBlendDistance;
141
142 UPROPERTY(EditAnywhere, Category=Emitter)
144
145 UPROPERTY(EditAnywhere, Category=Emitter)
147
160 UPROPERTY(EditAnywhere, Category=Emitter)
162
164 UPROPERTY(EditAnywhere, Category=Emitter, meta = (DisplayAfter = "MaxFacingCameraBlendDistance"))
165 uint8 bUseLocalSpace:1;
166
168 UPROPERTY(EditAnywhere, Category=Emitter)
169 uint8 bKillOnDeactivate:1;
170
172 UPROPERTY(EditAnywhere, Category=Emitter)
173 uint8 bKillOnCompleted:1;
174
184 UPROPERTY(EditAnywhere, Category=Emitter)
186
197 UPROPERTY(EditAnywhere, Category=Emitter)
199
201 UPROPERTY(EditAnywhere, Category=Emitter, meta=(DisplayName = "Remove HMD Roll"))
202 uint8 bRemoveHMDRoll:1;
203
205 UPROPERTY(EditAnywhere, Category=Emitter)
207
212 UPROPERTY(EditAnywhere, Category = Duration)
214
215
216 UPROPERTY(EditAnywhere, Category = Rendering)
218
223 UPROPERTY(EditAnywhere, Category = Rendering, meta=(EditCondition = "bOverrideUseVelocityForMotionBlur"))
224 uint8 bUseVelocityForMotionBlur : 1;
225
229 UPROPERTY(EditAnywhere, Category=Duration, meta = (DisplayAfter="bRemoveHMDRoll"))
230 float EmitterDuration;
231
232 //
233 // Spawn-related.
234 //
235
237 UPROPERTY()
239
242 TArray<FParticleBurst> BurstList;
243
244 //
245 // Delay-related.
246 //
247
251 UPROPERTY(EditAnywhere, Category=Delay)
252 float EmitterDelay;
253
257 UPROPERTY(EditAnywhere, Category=Delay)
258 float EmitterDelayLow;
259
263 UPROPERTY(EditAnywhere, Category=Delay)
265
266 //
267 // SubUV-related.
268 //
269
283 UPROPERTY(EditAnywhere, Category=SubUV)
284 TEnumAsByte<EParticleSubUVInterpMethod> InterpolationMethod;
285
287 UPROPERTY(EditAnywhere, Category = SubUV)
288 uint8 bScaleUV : 1;
289
294 UPROPERTY(EditAnywhere, Category=Delay)
296
298 UPROPERTY()
299 TEnumAsByte<EParticleBurstMethod> ParticleBurstMethod;
300
302 UPROPERTY(EditAnywhere, Category = MacroUV)
304
309 UPROPERTY(EditAnywhere, Category = Rendering)
311
312 UPROPERTY(EditAnywhere, Category=ParticleCutout)
313 TEnumAsByte<enum EOpacitySourceMode> OpacitySourceMode;
314
316 UPROPERTY(EditAnywhere, Category = Normals)
317 TEnumAsByte<enum EEmitterNormalsMode> EmitterNormalsMode;
318
322 UPROPERTY(EditAnywhere, Category = Emitter)
324
326 UPROPERTY(EditAnywhere, Category=SubUV)
327 int32 SubImages_Horizontal;
328
330 UPROPERTY(EditAnywhere, Category=SubUV)
331 int32 SubImages_Vertical;
332
338 UPROPERTY()
339 float RandomImageTime;
340
342 UPROPERTY(EditAnywhere, Category=SubUV)
344
346 UPROPERTY(EditAnywhere, Category=MacroUV)
347 FVector MacroUVPosition;
348
350 UPROPERTY(EditAnywhere, Category=MacroUV)
351 float MacroUVRadius;
352
356 UPROPERTY(EditAnywhere, Category = Rendering)
358
364 UPROPERTY(EditAnywhere, Category=ParticleCutout)
366
370 UPROPERTY(EditAnywhere, Category = Duration)
372
377 UPROPERTY(EditAnywhere, Category=Normals)
378 FVector NormalsSphereCenter;
379
384 UPROPERTY(EditAnywhere, Category = ParticleCutout, meta = (UIMin = "0", UIMax = "1"))
385 float AlphaThreshold;
386
390 UPROPERTY(EditAnywhere, Category = Duration)
392
396 UPROPERTY(EditAnywhere, Category = ParticleCutout)
398
403 UPROPERTY(EditAnywhere, Category = Rendering)
404 int32 MaxDrawCount;
405
409 UPROPERTY(EditAnywhere, Category = Duration, meta = (DisplayAfter = "EmitterDuration"))
410 float EmitterDurationLow;
411
417 UPROPERTY(EditAnywhere, Category=Normals)
418 FVector NormalsCylinderDirection;
419
424 UPROPERTY(EditAnywhere, Category = Materials)
426
428 void InitializeDefaults();
429
430 //~ Begin UObject Interface
431 virtual void PostLoad() override;
432 virtual void PostInitProperties() override;
433 virtual void Serialize(FStructuredArchive::FRecord Record) override;
434#if WITH_EDITOR
435 virtual void PreEditChange(FProperty* PropertyAboutToChange) override;
436 virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
437 virtual bool IsValidForLODLevel(UParticleLODLevel* LODLevel, FString& OutErrorString) override;
438#endif // WITH_EDITOR
439 virtual void BeginDestroy() override;
440 virtual bool IsReadyForFinishDestroy() override;
441 virtual void FinishDestroy() override;
442 //~ End UObject Interface
443
444 //~ Begin UParticleModule Interface
445 virtual void SetToSensibleDefaults(UParticleEmitter* Owner) override;
446 virtual bool AddModuleCurvesToEditor(UInterpCurveEdSetup* EdSetup, TArray<const FCurveEdEntry*>& OutCurveEntries) override
447 {
448 // Overide the base implementation to prevent old SpawnRate from being added...
449 return true;
450 }
451 virtual EModuleType GetModuleType() const override { return EPMT_Required; }
452 virtual bool GenerateLODModuleValues(UParticleModule* SourceModule, float Percentage, UParticleLODLevel* LODLevel) override;
453 //~ End UParticleModule Interface
454
456
457 inline int32 GetNumFrames() const
458 {
459 return SubImages_Vertical * SubImages_Horizontal;
460 }
461
462 inline bool IsBoundingGeometryValid() const
463 {
464 return CutoutTexture != nullptr;
465 }
466
467 inline FRHIShaderResourceView* GetBoundingGeometrySRV() const
468 {
469 return BoundingGeometryBuffer->ShaderResourceView;
470 }
471
472 inline int32 GetNumBoundingVertices() const
473 {
474 return BoundingMode == BVC_FourVertices ? 4 : 8;
475 }
476
477 inline int32 GetNumBoundingTriangles() const
478 {
479 return BoundingMode == BVC_FourVertices ? 2 : 6;
480 }
481
482 inline const FVector2f* GetFrameData(int32 FrameIndex) const
483 {
484 return &DerivedData.BoundingGeometry[FrameIndex * GetNumBoundingVertices()];
485 }
486
488 {
490 FReqMod->bCutoutTexureIsValid = IsBoundingGeometryValid();
491 FReqMod->bUseVelocityForMotionBlur = ShouldUseVelocityForMotionBlur();
492 FReqMod->NumFrames = GetNumFrames();
493 FReqMod->FrameData = DerivedData.BoundingGeometry;
494 FReqMod->NumBoundingVertices = GetNumBoundingVertices();
495 FReqMod->NumBoundingTriangles = GetNumBoundingTriangles();
496 check(FReqMod->NumBoundingTriangles == 2 || FReqMod->NumBoundingTriangles == 6);
497 FReqMod->AlphaThreshold = AlphaThreshold;
498 FReqMod->BoundingGeometryBufferSRV = GetBoundingGeometrySRV();
499 return FReqMod;
500 }
501
502protected:
504 friend struct FParticleEmitterInstance;
505
506private:
509
511 FRenderCommandFence ReleaseFence;
512
514 FSubUVBoundingGeometryBuffer* BoundingGeometryBuffer;
515
516 void CacheDerivedData();
518 void GetDefaultCutout();
519};
520
521
522
#define check(expr)
Definition AssertionMacros.h:314
#define checkNoEntry()
Definition AssertionMacros.h:316
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 UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
EEmitterNormalsMode
Definition ParticleModuleRequired.h:97
@ ENM_Cylindrical
Definition ParticleModuleRequired.h:103
@ ENM_Spherical
Definition ParticleModuleRequired.h:101
@ ENM_CameraFacing
Definition ParticleModuleRequired.h:99
@ ENM_MAX
Definition ParticleModuleRequired.h:104
EParticleSortMode
Definition ParticleModuleRequired.h:86
@ PSORTMODE_MAX
Definition ParticleModuleRequired.h:92
@ PSORTMODE_Age_NewestFirst
Definition ParticleModuleRequired.h:91
@ PSORTMODE_DistanceToView
Definition ParticleModuleRequired.h:89
@ PSORTMODE_Age_OldestFirst
Definition ParticleModuleRequired.h:90
@ PSORTMODE_ViewProjDepth
Definition ParticleModuleRequired.h:88
@ PSORTMODE_None
Definition ParticleModuleRequired.h:87
void AdjustParticleBaseSizeForUVFlipping(FVector &OutSize, EParticleUVFlipMode FlipMode, FRandomStream &InRandomStream)
Definition ParticleModuleRequired.h:40
EParticleUVFlipMode
Definition ParticleModuleRequired.h:20
EModuleType
Definition ParticleModule.h:31
@ BVC_FourVertices
Definition SubUVAnimation.h:41
@ Percentage
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition UnrealType.h:174
Definition RHIResources.h:3304
Definition RenderCommandFence.h:15
Definition StructuredArchiveSlots.h:144
Definition SubUVAnimation.h:68
Definition SubUVAnimation.h:56
Definition Array.h:670
Definition EnumAsByte.h:22
Definition InterpCurveEdSetup.h:105
virtual COREUOBJECT_API void PostLoad()
Definition Obj.cpp:462
virtual bool IsReadyForFinishDestroy()
Definition Object.h:373
virtual COREUOBJECT_API void BeginDestroy()
Definition Obj.cpp:1071
virtual COREUOBJECT_API void FinishDestroy()
Definition Obj.cpp:1101
virtual COREUOBJECT_API void PostInitProperties()
Definition UObjectGlobals.cpp:3961
Definition ParticleEmitter.h:98
Definition ParticleLODLevel.h:22
Definition ParticleModule.h:149
Definition InterpCurveEdSetup.h:15
Definition ParticleEmitterInstances.h:226
Definition ParticleModuleRequired.h:108
uint8 bCutoutTexureIsValid
Definition ParticleModuleRequired.h:115
uint8 bUseVelocityForMotionBlur
Definition ParticleModuleRequired.h:116
FRHIShaderResourceView * BoundingGeometryBufferSRV
Definition ParticleModuleRequired.h:114
float AlphaThreshold
Definition ParticleModuleRequired.h:112
uint32 NumBoundingVertices
Definition ParticleModuleRequired.h:110
TArray< FVector2f > FrameData
Definition ParticleModuleRequired.h:113
uint32 NumBoundingTriangles
Definition ParticleModuleRequired.h:111
uint32 NumFrames
Definition ParticleModuleRequired.h:109
Definition UnrealType.h:6865
Definition RandomStream.h:20
Definition DistributionFloat.h:28
Definition ObjectPtr.h:488