UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ParticleSystemSceneProxy.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
9
12class UParticleSystemComponent;
14
16
33
35
37{
38public:
39 SIZE_T GetTypeHash() const override;
40
44
45 // FPrimitiveSceneProxy interface.
46 virtual bool CanBeOccluded() const override
47 {
48 return bCanBeOccluded ? !MaterialRelevance.bDisableDepthTest : false;
49 }
50
56 virtual bool HasCustomOcclusionBounds() const override
57 {
58 return bCanBeOccluded ? bHasCustomOcclusionBounds : FPrimitiveSceneProxy::HasCustomOcclusionBounds();
59 }
60
67 {
68 return bCanBeOccluded ? OcclusionBounds.TransformBy(GetLocalToWorld()) : FPrimitiveSceneProxy::GetCustomOcclusionBounds();
69 }
70
71 virtual void GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const override;
72 virtual FPrimitiveViewRelevance GetViewRelevance(const FSceneView* View) const override;
73 virtual void OnTransformChanged(FRHICommandListBase& RHICmdList) override;
74
76 virtual void GatherSimpleLights(const FSceneViewFamily& ViewFamily, FSimpleLightArray& OutParticleLights) const override;
77
82 virtual void CreateRenderThreadResources(FRHICommandListBase& RHICmdList) override;
83
88
91
96
101
106
107 virtual uint32 GetMemoryFootprint( void ) const override { return( sizeof( *this ) + GetAllocatedSize() ); }
114
115 // @param FrameNumber from ViewFamily.FrameNumber
116 void DetermineLODDistance(const FSceneView* View, int32 FrameNumber);
117
124
127
128 // While this isn't good OO design, access to everything is made public.
129 // This is to allow custom emitter instances to easily be written when extending the engine.
131 bool GetCastShadow() const { return bCastShadow; }
133 {
134 return MaterialRelevance;
135 }
139
141
143
146
147 // persistent proxy storage for mesh emitter LODs; need to store these here, because GDME needs to calc the index,
148 // but VF needs to be init'ed with the correct LOD, and DynamicData goes away every frame
151protected:
152
157
162
163#if STATS
164 double LastStatCaptureTime;
166#endif
167
170
171private:
172 uint8 bCanBeOccluded : 1;
173 uint8 bHasCustomOcclusionBounds : 1;
174
175protected:
177
179
180 FParticleDynamicData* DynamicData; // RENDER THREAD USAGE ONLY
181 FParticleDynamicData* LastDynamicData; // RENDER THREAD USAGE ONLY
182
184
187 int32 VisualizeLODIndex; // Only used in the LODColoration view mode.
188
189 // from ViewFamily.FrameNumber
191
196
200
201private:
203 FBoxSphereBounds OcclusionBounds;
204
205protected:
207
209
210#if WITH_PARTICLE_PERF_STATS
211public:
213#endif
214};
215
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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MaterialRenderProxy.h:309
Definition MeshElementCollector.h:26
Definition ParticleHelper.h:2241
Definition ParticleSystemSceneProxy.h:37
virtual void CreateRenderThreadResources(FRHICommandListBase &RHICmdList) override
Definition ParticleSystemSceneProxy.cpp:233
void CreateRenderThreadResourcesForEmitterData()
Definition ParticleSystemSceneProxy.cpp:244
void UpdateWorldSpacePrimitiveUniformBuffer(FRHICommandListBase &RHICmdList) const
Definition ParticleSystemSceneProxy.cpp:463
void UpdateData_RenderThread(FParticleDynamicData *NewDynamicData)
Definition ParticleSystemSceneProxy.cpp:295
float GetPendingLODDistance() const
Definition ParticleSystemSceneProxy.h:136
TArray< int32 > MeshEmitterLODIndices
Definition ParticleSystemSceneProxy.h:149
int32 LastFramePreRendered
Definition ParticleSystemSceneProxy.h:190
TUniformBuffer< FPrimitiveUniformShaderParameters > WorldSpacePrimitiveUniformBuffer
Definition ParticleSystemSceneProxy.h:193
TArray< FDynamicEmitterDataBase * > DynamicDataForThisFrame
Definition ParticleSystemSceneProxy.h:206
FMeshBatch * GetPooledMeshBatch()
Definition ParticleSystemSceneProxy.cpp:141
uint8 bManagingSignificance
Definition ParticleSystemSceneProxy.h:169
ERHIFeatureLevel::Type GetFeatureLevel() const
Definition ParticleSystemSceneProxy.h:150
float PendingLODDistance
Definition ParticleSystemSceneProxy.h:186
void SetLastDynamicData(FParticleDynamicData *InLastDynamicData)
Definition ParticleSystemSceneProxy.h:102
int32 VisualizeLODIndex
Definition ParticleSystemSceneProxy.h:187
virtual bool HasCustomOcclusionBounds() const override
Definition ParticleSystemSceneProxy.h:56
virtual FPrimitiveViewRelevance GetViewRelevance(const FSceneView *View) const override
Definition ParticleSystemSceneProxy.cpp:425
int32 GetVisualizeLODIndex() const
Definition ParticleSystemSceneProxy.h:138
uint32 WorldSpaceUBHash
Definition ParticleSystemSceneProxy.h:194
FParticleDynamicData * DynamicData
Definition ParticleSystemSceneProxy.h:180
uint32 GetAllocatedSize(void) const
Definition ParticleSystemSceneProxy.h:108
TEnumAsByte< ERHIFeatureLevel::Type > FeatureLevel
Definition ParticleSystemSceneProxy.h:176
void SetVisualizeLODIndex(int32 InVisualizeLODIndex)
Definition ParticleSystemSceneProxy.h:137
FMatrix GetWorldToLocal() const
Definition ParticleSystemSceneProxy.h:130
const FMaterialRelevance & GetMaterialRelevance() const
Definition ParticleSystemSceneProxy.h:132
virtual void OnTransformChanged(FRHICommandListBase &RHICmdList) override
Definition ParticleSystemSceneProxy.cpp:457
SIZE_T GetTypeHash() const override
Definition ParticleSystemSceneProxy.cpp:124
virtual FBoxSphereBounds GetCustomOcclusionBounds() const override
Definition ParticleSystemSceneProxy.h:66
virtual void GatherSimpleLights(const FSceneViewFamily &ViewFamily, FSimpleLightArray &OutParticleLights) const override
Definition ParticleSystemSceneProxy.cpp:506
TIndirectArray< FMeshBatch, TInlineAllocator< 4 > > MeshBatchPool
Definition ParticleSystemSceneProxy.h:198
uint8 bCastShadow
Definition ParticleSystemSceneProxy.h:168
virtual ~FParticleSystemSceneProxy()
Definition ParticleSystemSceneProxy.cpp:130
UE::FMutex WorldSpacePrimitiveUniformBufferMutex
Definition ParticleSystemSceneProxy.h:195
FParticleDynamicData * LastDynamicData
Definition ParticleSystemSceneProxy.h:181
FRHIUniformBuffer * GetWorldSpacePrimitiveUniformBuffer() const
Definition ParticleSystemSceneProxy.h:140
void ReleaseRenderThreadResourcesForEmitterData()
Definition ParticleSystemSceneProxy.cpp:260
void DetermineLODDistance(const FSceneView *View, int32 FrameNumber)
Definition ParticleSystemSceneProxy.cpp:309
bool GetCastShadow() const
Definition ParticleSystemSceneProxy.h:131
virtual uint32 GetMemoryFootprint(void) const override
Definition ParticleSystemSceneProxy.h:107
void ReleaseRenderThreadResources()
Definition ParticleSystemSceneProxy.cpp:238
virtual void GetDynamicMeshElements(const TArray< const FSceneView * > &Views, const FSceneViewFamily &ViewFamily, uint32 VisibilityMap, FMeshElementCollector &Collector) const override
Definition ParticleSystemSceneProxy.cpp:159
int32 LODMethod
Definition ParticleSystemSceneProxy.h:185
FParticleDynamicData * GetLastDynamicData()
Definition ParticleSystemSceneProxy.h:97
virtual bool CanBeOccluded() const override
Definition ParticleSystemSceneProxy.h:46
ENGINE_API void UpdateData(FParticleDynamicData *NewDynamicData)
Definition ParticleSystemSceneProxy.cpp:276
int32 FirstFreeMeshBatch
Definition ParticleSystemSceneProxy.h:199
FMaterialRelevance MaterialRelevance
Definition ParticleSystemSceneProxy.h:178
void GetObjectPositionAndScale(const FSceneView &View, FVector2D &ObjectNDCPosition, FVector2D &ObjectMacroUVScales) const
Definition ParticleSystemSceneProxy.cpp:341
FColoredMaterialRenderProxy * DeselectedWireframeMaterialInstance
Definition ParticleSystemSceneProxy.h:183
FParticleDynamicData * GetDynamicData()
Definition ParticleSystemSceneProxy.h:92
const FColoredMaterialRenderProxy * GetDeselectedWireframeMatInst() const
Definition ParticleSystemSceneProxy.h:142
Definition PrimitiveSceneProxy.h:296
SIZE_T GetAllocatedSize(void) const
Definition PrimitiveSceneProxy.h:684
virtual FBoxSphereBounds GetCustomOcclusionBounds() const
Definition PrimitiveSceneProxy.h:1015
const FMatrix & GetLocalToWorld() const
Definition PrimitiveSceneProxy.h:736
virtual bool HasCustomOcclusionBounds() const
Definition PrimitiveSceneProxy.h:1005
Definition RHICommandList.h:455
Definition RHIResources.h:1232
Definition SceneView.h:2212
Definition SceneView.h:1425
Definition PrimitiveSceneProxy.h:172
Definition Array.h:670
Definition EnumAsByte.h:22
Definition IndirectArray.h:20
Definition UniformBuffer.h:29
FRHIUniformBuffer * GetUniformBufferRHI() const
Definition UniformBuffer.h:98
Definition Mutex.h:18
Definition ParticleSystem.h:160
Type
Definition RHIFeatureLevel.h:20
Definition ParticleHelper.h:1265
Definition ParticleHelper.h:1366
Definition MaterialRelevance.h:13
uint8 bDisableDepthTest
Definition MaterialRelevance.h:51
Definition MeshBatch.h:371
Definition ParticlePerfStats.h:302
Definition ParticleSystemSceneProxy.h:18
uint8 bManagingSignificance
Definition ParticleSystemSceneProxy.h:28
int32 LODMethod
Definition ParticleSystemSceneProxy.h:26
UParticleSystem * SystemAsset
Definition ParticleSystemSceneProxy.h:22
virtual ENGINE_API void GetUsedMaterials(TArray< UMaterialInterface * > &OutMaterials, bool bGetDebugMaterials=false) const override
Definition ParticleSystemSceneProxy.cpp:75
uint8 bAlwaysHasVelocity
Definition ParticleSystemSceneProxy.h:29
ENGINE_API FParticleSystemSceneProxyDesc()
Definition ParticleSystemSceneProxy.cpp:42
FMaterialRelevance MaterialRelevance
Definition ParticleSystemSceneProxy.h:24
uint8 bCanBeOccluded
Definition ParticleSystemSceneProxy.h:27
FParticleDynamicData * DynamicData
Definition ParticleSystemSceneProxy.h:23
int32 VisualizeLODIndex
Definition ParticleSystemSceneProxy.h:25
Definition PrimitiveSceneProxyDesc.h:12
UObject * Component
Definition PrimitiveSceneProxyDesc.h:19
Definition PrimitiveViewRelevance.h:14
Definition BoxSphereBounds.h:25
TBoxSphereBounds< T, TExtent > TransformBy(const TMatrix< T > &M) const
Definition BoxSphereBounds.h:501
TMatrix< T > Inverse() const
Definition Matrix.inl:384