UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
InstancedStaticMesh.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 InstancedStaticMesh.h: Instanced static mesh header
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
11#include "Stats/Stats.h"
12#include "HAL/IConsoleManager.h"
13#include "RenderingThread.h"
14#include "RenderResource.h"
15#include "RayTracingGeometry.h"
17#include "ShaderParameters.h"
18#include "SceneView.h"
19#include "VertexFactory.h"
20#include "LocalVertexFactory.h"
21#include "MaterialShared.h"
22#include "Materials/Material.h"
23#include "StaticMeshResources.h"
26#include "Engine/StaticMesh.h"
27
28#include "StaticMeshLight.h"
29
30#if WITH_EDITOR
31#include "LightMap.h"
32#include "ShadowMap.h"
33#endif
34
35class ULightComponent;
37
41
46 SHADER_PARAMETER_SRV(Buffer<float>, InstanceCustomDataBuffer)
47 SHADER_PARAMETER(int32, NumCustomDataFloats)
49
58
60
61// This must match the maximum a user could specify in the material (see
62// FHLSLMaterialTranslator::TextureCoordinate), otherwise the material will attempt
63// to look up a texture coordinate we didn't provide an element for.
65
66/*-----------------------------------------------------------------------------
67 FStaticMeshInstanceBuffer
68-----------------------------------------------------------------------------*/
69
71{
72public:
73
76
79
84 ENGINE_API void InitFromPreallocatedData(FStaticMeshInstanceData& Other);
85
89 ENGINE_API void operator=(const FStaticMeshInstanceBuffer &Other);
90
91 // Other accessors.
92 inline uint32 GetNumInstances() const
93 {
94 return InstanceData->GetNumInstances();
95 }
96
97 inline void GetInstanceTransform(int32 InstanceIndex, FRenderTransform& Transform) const
98 {
99 InstanceData->GetInstanceTransform(InstanceIndex, Transform);
100 }
101
102 inline void GetInstanceRandomID(int32 InstanceIndex, float& RandomInstanceID) const
103 {
104 InstanceData->GetInstanceRandomID(InstanceIndex, RandomInstanceID);
105 }
106
107#if WITH_EDITOR
108 inline void GetInstanceEditorData(int32 InstanceIndex, FColor& HitProxyColorOut, bool& bSelectedOut) const
109 {
110 InstanceData->GetInstanceEditorData(InstanceIndex, HitProxyColorOut, bSelectedOut);
111 }
112#endif
113
114
115 inline void GetInstanceLightMapData(int32 InstanceIndex, FVector4f& InstanceLightmapAndShadowMapUVBias) const
116 {
117 InstanceData->GetInstanceLightMapData(InstanceIndex, InstanceLightmapAndShadowMapUVBias);
118 }
119
120 inline void GetInstanceCustomDataValues(int32 InstanceIndex, TArray<float>& InstanceCustomData) const
121 {
122 InstanceData->GetInstanceCustomDataValues(InstanceIndex, InstanceCustomData);
123 }
124
126 {
127 return InstanceData.Get();
128 }
129
130 // FRenderResource interface.
131 ENGINE_API virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
132 ENGINE_API virtual void ReleaseRHI() override;
133 ENGINE_API virtual void InitResource(FRHICommandListBase& RHICmdList) override;
134 ENGINE_API virtual void ReleaseResource() override;
135 virtual FString GetFriendlyName() const override { return TEXT("Static-mesh instances"); }
136 SIZE_T GetResourceSize() const;
137
138 ENGINE_API void BindInstanceVertexBuffer(const class FVertexFactory* VertexFactory, struct FInstancedStaticMeshDataType& InstancedStaticMeshData) const;
139
144 void FlushGPUUpload(FRHICommandListBase& RHICmdList);
145
146public:
149
152
154 {
155 check(!bFlushToGPUPending);
156 return InstanceOriginBuffer.VertexBufferRHI;
157 }
158
160 {
161 check(!bFlushToGPUPending);
162 return InstanceTransformBuffer.VertexBufferRHI;
163 }
164
166 {
167 check(!bFlushToGPUPending);
168 return InstanceLightmapBuffer.VertexBufferRHI;
169 }
170
175 {
176 bFlushToGPUPending = true;
177 }
178private:
179
184 bool bFlushToGPUPending;
185
186 class FInstanceOriginBuffer : public FVertexBuffer
187 {
188 virtual FString GetFriendlyName() const override { return TEXT("FInstanceOriginBuffer"); }
189 } InstanceOriginBuffer;
190 FShaderResourceViewRHIRef InstanceOriginSRV;
191
192 class FInstanceTransformBuffer : public FVertexBuffer
193 {
194 virtual FString GetFriendlyName() const override { return TEXT("FInstanceTransformBuffer"); }
195 } InstanceTransformBuffer;
196 FShaderResourceViewRHIRef InstanceTransformSRV;
197
198 class FInstanceLightmapBuffer : public FVertexBuffer
199 {
200 virtual FString GetFriendlyName() const override { return TEXT("FInstanceLightmapBuffer"); }
201 } InstanceLightmapBuffer;
202 FShaderResourceViewRHIRef InstanceLightmapSRV;
203
204 class FInstanceCustomDataBuffer : public FVertexBuffer
205 {
206 virtual FString GetFriendlyName() const override { return TEXT("FInstanceCustomDataBuffer"); }
207 } InstanceCustomDataBuffer;
208 FShaderResourceViewRHIRef InstanceCustomDataSRV;
209
211 void CleanUp();
212
214};
215
216/*-----------------------------------------------------------------------------
217 FInstancedStaticMeshVertexFactory
218-----------------------------------------------------------------------------*/
219
238
257
262{
264public:
269
274
280
285 static ENGINE_API void GetVertexElements(ERHIFeatureLevel::Type FeatureLevel, EVertexInputStreamType InputStreamType, bool bSupportsManualVertexFetch, FDataType& Data, FInstancedStaticMeshDataType& InstanceData, FVertexDeclarationElementList& Elements);
286
288 const FStaticMeshVertexBuffers& VertexBuffers,
289 const FColorVertexBuffer* ColorVertexBuffer,
290 const FStaticMeshInstanceBuffer* InstanceBuffer,
291 const FInstancedStaticMeshVertexFactory* VertexFactory,
296
301 {
302 Data = InData;
303 if (InInstanceData)
304 {
305 InstanceData = *InInstanceData;
306 }
307 UpdateRHI(RHICmdList);
308 }
309
315
316 // FRenderResource interface.
317 ENGINE_API virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
318
321 {
322 return 8 * sizeof(uint64);
323 }
324
326 {
327 return InstanceData.InstanceOriginSRV;
328 }
329
331 {
332 return InstanceData.InstanceTransformSRV;
333 }
334
336 {
337 return InstanceData.InstanceLightmapSRV;
338 }
339
341 {
342 return InstanceData.InstanceCustomDataSRV;
343 }
344
346 {
347 return UniformBuffer.GetReference();
348 }
349protected:
350 static ENGINE_API void GetVertexElements(ERHIFeatureLevel::Type FeatureLevel, EVertexInputStreamType InputStreamType, bool bSupportsManualVertexFetch, FDataType& Data, FInstancedStaticMeshDataType& InstanceData, FVertexDeclarationElementList& Elements, FVertexStreamList& Streams);
351
352private:
353 FInstancedStaticMeshDataType InstanceData;
354
356};
357
359{
361public:
362 void Bind(const FShaderParameterMap& ParameterMap)
363 {
365
366 InstancingOffsetParameter.Bind(ParameterMap, TEXT("InstancingOffset"));
367 VertexFetch_InstanceOriginBufferParameter.Bind(ParameterMap, TEXT("VertexFetch_InstanceOriginBuffer"));
368 VertexFetch_InstanceTransformBufferParameter.Bind(ParameterMap, TEXT("VertexFetch_InstanceTransformBuffer"));
369 VertexFetch_InstanceLightmapBufferParameter.Bind(ParameterMap, TEXT("VertexFetch_InstanceLightmapBuffer"));
370 InstanceOffset.Bind(ParameterMap, TEXT("InstanceOffset"));
371 }
372
374 const class FSceneInterface* Scene,
375 const FSceneView* View,
378 ERHIFeatureLevel::Type FeatureLevel,
379 const FVertexFactory* VertexFactory,
381 FMeshDrawSingleShaderBindings& ShaderBindings,
382 FVertexInputStreamArray& VertexStreams
383 ) const;
384
385private:
390 LAYOUT_FIELD(FShaderParameter, InstanceOffset)
391};
392
393/*-----------------------------------------------------------------------------
394 FInstancedStaticMeshRenderData
395-----------------------------------------------------------------------------*/
396
433
434
435/*-----------------------------------------------------------------------------
436 FInstancedStaticMeshSceneProxy
437-----------------------------------------------------------------------------*/
438
440
442{
443public:
444 ENGINE_API SIZE_T GetTypeHash() const override;
445
449
453
454 // FPrimitiveSceneProxy interface.
455 ENGINE_API virtual void CreateRenderThreadResources(FRHICommandListBase& RHICmdList) override;
456
457 ENGINE_API virtual void DestroyRenderThreadResources() override;
458
460
461 virtual FPrimitiveViewRelevance GetViewRelevance(const FSceneView* View) const override
462 {
464 if(View->Family->EngineShowFlags.InstancedStaticMeshes)
465 {
467#if WITH_EDITOR
468 // use dynamic path to render selected indices
470 {
471 Result.bDynamicRelevance = true;
472 Result.bStaticRelevance = false;
473 }
474#endif
475 }
476 return Result;
477 }
478
481
483
484#if RHI_RAYTRACING
485 ENGINE_API virtual void GetDynamicRayTracingInstances(FRayTracingInstanceCollector& Collector) final override;
486#endif
487
488 ENGINE_API virtual void GetLightRelevance(const FLightSceneProxy* LightSceneProxy, bool& bDynamic, bool& bRelevant, bool& bLightMapped, bool& bShadowMapped) const override;
489 ENGINE_API virtual void GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const override;
490
491 virtual int32 GetNumMeshBatches() const override
492 {
493 return 1;
494 }
495
497 ENGINE_API virtual bool GetShadowMeshElement(int32 LODIndex, int32 BatchIndex, uint8 InDepthPriorityGroup, FMeshBatch& OutMeshBatch, bool bDitheredLODTransition) const override;
498
500 ENGINE_API virtual bool GetMeshElement(int32 LODIndex, int32 BatchIndex, int32 ElementIndex, uint8 InDepthPriorityGroup, bool bUseSelectionOutline, bool bAllowPreCulledIndices, FMeshBatch& OutMeshBatch) const override;
501
504
506 ENGINE_API virtual bool GetRayTracingMeshElement(int32 LODIndex, int32 BatchIndex, int32 SectionIndex, uint8 InDepthPriorityGroup, FMeshBatch& OutMeshBatch) const;
507
509
518
520
521 ENGINE_API virtual float GetLodScreenSizeScale() const override;
522 ENGINE_API virtual float GetGpuLodInstanceRadius() const override;
524
525 virtual bool IsDetailMesh() const override { return true; }
526
527 ENGINE_API virtual void SetInstanceCullDistance_RenderThread(float StartCullDistance, float EndCullDistance) override;
528
530
531protected:
533
536
539
540#if WITH_EDITOR
541 /* If we we have any selected instances */
543#else
544 static const bool bHasSelectedInstances = false;
545#endif
546
551
554
555#if RHI_RAYTRACING
557
558 ENGINE_API void SetupRayTracingDynamicInstances(FRHICommandListBase& RHICmdList, int32 NumDynamicInstances, int32 LODIndex);
560
562 {
565 };
566
568
570#endif
571
573 ENGINE_API void SetupInstancedMeshBatch(int32 LODIndex, int32 BatchIndex, FMeshBatch& OutMeshBatch) const;
575
578private:
579
580 void SetupProxy(const FInstancedStaticMeshSceneProxyDesc& InProxyDesc);
581 bool CanSetupInstancedMeshBatch(int32 LODIndex) const;
582 bool CanSetupRayTracingInstancedMeshBatch(int32 LODIndex) const;
583
586
589
591};
592
593#if WITH_EDITOR
594/*-----------------------------------------------------------------------------
595 FInstancedStaticMeshStaticLightingMesh
596-----------------------------------------------------------------------------*/
597
603{
604public:
605
609 {
610 // override the local to world to combine the per instance transform with the component's standard transform
611 SetLocalToWorld(InPrimitive->PerInstanceSMData[InstanceIndex].Transform * InPrimitive->GetComponentTransform().ToMatrixWithScale());
612 }
613
615
616 virtual bool IsInstancedMesh() const override { return true; }
617};
618
619/*-----------------------------------------------------------------------------
620 FInstancedStaticMeshStaticLightingTextureMapping
621-----------------------------------------------------------------------------*/
622
623
625class FStaticLightingTextureMapping_InstancedStaticMesh : public FStaticMeshStaticLightingTextureMapping
626{
627public:
631 , InstanceIndex(InInstanceIndex)
632 , QuantizedData(nullptr)
633 , ShadowMapData()
634 , bComplete(false)
635 {
636 }
637
638 FStaticLightingTextureMapping_InstancedStaticMesh (const FArchive& Ar)
640 , InstanceIndex(-1)
641 , QuantizedData(nullptr)
642 , ShadowMapData()
643 , bComplete(false)
644 {
645
646 }
647
648 // FStaticLightingTextureMapping interface
650 {
651 check(bComplete == false);
652
654
656 {
657 // Save the static lighting until all of the component's static lighting has been built.
659 ShadowMapData.Empty(InShadowMapData.Num());
660 for (auto& ShadowDataPair : InShadowMapData)
661 {
662 ShadowMapData.Add(ShadowDataPair.Key, TUniquePtr<FShadowMapData2D>(ShadowDataPair.Value));
663 }
664
665 InstancedComponent->ApplyLightMapping(this, LightingContext);
666 }
667
668 bComplete = true;
669 }
670
671 virtual bool DebugThisMapping() const override
672 {
673 return false;
674 }
675
676 virtual FString GetDescription() const override
677 {
678 return FString(TEXT("InstancedSMLightingMapping"));
679 }
680
681 ENGINE_API virtual void Serialize(FArchive& Ar) override;
682
683private:
685
687 int32 InstanceIndex;
688
689 // Light/shadow map data stored until all instances for this component are processed
690 // so we can apply them all into one light/shadowmap
693
695 bool bComplete;
696};
697
698#endif
699
723
724
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
#define TEXT(x)
Definition Platform.h:1272
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
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TAutoConsoleVariable< float > CVarFoliageMinimumScreenSize
const int32 InstancedStaticMeshMaxTexCoord
Definition InstancedStaticMesh.cpp:78
TAutoConsoleVariable< float > CVarRandomLODRange
TAutoConsoleVariable< int32 > CVarMinLOD
#define LAYOUT_FIELD(T, Name,...)
Definition MemoryLayout.h:471
#define DECLARE_TYPE_LAYOUT(T, Interface)
Definition MemoryLayout.h:557
EBufferUsageFlags
Definition RHIDefinitions.h:892
EUniformBufferUsage
Definition RHIDefinitions.h:536
FRDGBufferRef CreateVertexBuffer(FRDGBuilder &GraphBuilder, const TCHAR *Name, const FRDGBufferDesc &Desc, const void *InitialData, uint64 InitialDataSize, ERDGInitialDataFlags InitialDataFlags)
Definition RenderGraphUtils.cpp:957
#define END_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1669
#define SHADER_PARAMETER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1720
#define BEGIN_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1663
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
EVertexInputStreamType
Definition VertexFactory.h:128
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 ColorVertexBuffer.h:16
Definition DistanceFieldAtlas.h:241
Definition InstanceDataSceneProxy.h:425
Definition InstancedStaticMesh.h:401
UInstancedStaticMeshComponent * Component
Definition InstancedStaticMesh.h:410
ENGINE_API void ReleaseResources(FSceneInterface *Scene, const UStaticMesh *StaticMesh)
Definition InstancedStaticMesh.cpp:961
ENGINE_API void BindBuffersToVertexFactories(FRHICommandListBase &RHICmdList, FStaticMeshInstanceBuffer *InstanceBuffer)
Definition InstancedStaticMesh.cpp:1018
const FStaticMeshRayTracingProxyLODArray * RayTracingProxyLODs
Definition InstancedStaticMesh.h:422
TIndirectArray< FInstancedStaticMeshVertexFactory > VertexFactories
Definition InstancedStaticMesh.h:416
int32 LightMapCoordinateIndex
Definition InstancedStaticMesh.h:413
ERHIFeatureLevel::Type FeatureLevel
Definition InstancedStaticMesh.h:425
FStaticMeshLODResourcesArray & LODModels
Definition InstancedStaticMesh.h:419
TIndirectArray< FInstancedStaticMeshVertexFactory > RayTracingProxyVertexFactories
Definition InstancedStaticMesh.h:421
Definition InstancedStaticMesh.h:442
UStaticMesh * StaticMesh
Definition InstancedStaticMesh.h:535
FInstancingUserData UserData_DeselectedInstances
Definition InstancedStaticMesh.h:550
virtual ENGINE_API void GetPreSkinnedLocalBounds(FBoxSphereBounds &OutBounds) const override
Definition InstancedStaticMesh.cpp:2319
FInstancingUserData UserData_SelectedInstances
Definition InstancedStaticMesh.h:549
virtual FPrimitiveViewRelevance GetViewRelevance(const FSceneView *View) const override
Definition InstancedStaticMesh.h:461
virtual ENGINE_API HHitProxy * CreateHitProxies(IPrimitiveComponent *Component, TArray< TRefCountPtr< HHitProxy > > &OutHitProxies) override
Definition InstancedStaticMesh.cpp:1765
ENGINE_API FInstancedStaticMeshVFLooseUniformShaderParametersRef CreateLooseUniformBuffer(const FSceneView *View, const FInstancingUserData *InstancingUserData, uint32 InstancedLODRange, uint32 InstancedLODIndex, EUniformBufferUsage UniformBufferUsage) const
Definition InstancedStaticMesh.cpp:1273
static const bool bHasSelectedInstances
Definition InstancedStaticMesh.h:544
virtual ENGINE_API bool GetShadowMeshElement(int32 LODIndex, int32 BatchIndex, uint8 InDepthPriorityGroup, FMeshBatch &OutMeshBatch, bool bDitheredLODTransition) const override
Definition InstancedStaticMesh.cpp:1713
ENGINE_API SIZE_T GetTypeHash() const override
Definition InstancedStaticMesh.cpp:1093
bool bUseGpuLodSelection
Definition InstancedStaticMesh.h:480
~FInstancedStaticMeshSceneProxy()
Definition InstancedStaticMesh.h:450
virtual ENGINE_API void GetDistanceFieldAtlasData(const FDistanceFieldVolumeData *&OutDistanceFieldData, float &SelfShadowBias) const override
Definition InstancedStaticMesh.cpp:1755
virtual ENGINE_API bool GetWireframeMeshElement(int32 LODIndex, int32 BatchIndex, const FMaterialRenderProxy *WireframeRenderProxy, uint8 InDepthPriorityGroup, bool bAllowPreCulledIndices, FMeshBatch &OutMeshBatch) const override
Definition InstancedStaticMesh.cpp:1735
ENGINE_API void SetupRayTracingInstancedMeshBatch(int32 LODIndex, int32 BatchIndex, FMeshBatch &OutMeshBatch) const
Definition InstancedStaticMesh.cpp:1673
virtual ENGINE_API void DestroyRenderThreadResources() override
Definition InstancedStaticMesh.cpp:1623
virtual ENGINE_API void GetLightRelevance(const FLightSceneProxy *LightSceneProxy, bool &bDynamic, bool &bRelevant, bool &bLightMapped, bool &bShadowMapped) const override
Definition InstancedStaticMesh.cpp:1703
virtual int32 GetNumMeshBatches() const override
Definition InstancedStaticMesh.h:491
virtual ENGINE_API void SetInstanceCullDistance_RenderThread(float StartCullDistance, float EndCullDistance) override
Definition InstancedStaticMesh.cpp:2297
FInstancedStaticMeshRenderData InstancedRenderData
Definition InstancedStaticMesh.h:538
virtual ENGINE_API float GetGpuLodInstanceRadius() const override
Definition InstancedStaticMesh.cpp:1794
virtual ENGINE_API bool GetInstanceDrawDistanceMinMax(FVector2f &OutDistanceMinMax) const override
Definition InstancedStaticMesh.cpp:1775
bool bAnySegmentUsesWorldPositionOffset
Definition InstancedStaticMesh.h:479
virtual ENGINE_API float GetLodScreenSizeScale() const override
Definition InstancedStaticMesh.cpp:1789
virtual ENGINE_API void CreateRenderThreadResources(FRHICommandListBase &RHICmdList) override
Definition InstancedStaticMesh.cpp:1605
virtual ENGINE_API void GetDynamicMeshElements(const TArray< const FSceneView * > &Views, const FSceneViewFamily &ViewFamily, uint32 VisibilityMap, FMeshElementCollector &Collector) const override
Definition InstancedStaticMesh.cpp:1099
float InstanceLODDistanceScale
Definition InstancedStaticMesh.h:553
virtual bool IsDetailMesh() const override
Definition InstancedStaticMesh.h:525
virtual ENGINE_API bool GetRayTracingMeshElement(int32 LODIndex, int32 BatchIndex, int32 SectionIndex, uint8 InDepthPriorityGroup, FMeshBatch &OutMeshBatch) const
Definition InstancedStaticMesh.cpp:1745
FInstancingUserData UserData_AllInstances
Definition InstancedStaticMesh.h:548
ENGINE_API void SetupInstancedMeshBatch(int32 LODIndex, int32 BatchIndex, FMeshBatch &OutMeshBatch) const
Definition InstancedStaticMesh.cpp:1643
virtual ENGINE_API FInstanceDataUpdateTaskInfo * GetInstanceDataUpdateTaskInfo() const override
Definition InstancedStaticMesh.cpp:1801
FBoxSphereBounds StaticMeshBounds
Definition InstancedStaticMesh.h:577
virtual ENGINE_API void UpdateInstances_RenderThread(FRHICommandListBase &RHICmdList, const FBoxSphereBounds &InBounds, const FBoxSphereBounds &InLocalBounds) override
Definition InstancedStaticMesh.cpp:1633
virtual ENGINE_API void SetEvaluateWorldPositionOffsetInRayTracing(FRHICommandListBase &RHICmdList, bool bEvaluate) override
Definition InstancedStaticMesh.cpp:1806
virtual ENGINE_API bool GetMeshElement(int32 LODIndex, int32 BatchIndex, int32 ElementIndex, uint8 InDepthPriorityGroup, bool bUseSelectionOutline, bool bAllowPreCulledIndices, FMeshBatch &OutMeshBatch) const override
Definition InstancedStaticMesh.cpp:1724
Definition InstancedStaticMesh.h:359
void Bind(const FShaderParameterMap &ParameterMap)
Definition InstancedStaticMesh.h:362
ENGINE_API void GetElementShaderBindings(const class FSceneInterface *Scene, const FSceneView *View, const FMeshMaterialShader *Shader, const EVertexInputStreamType InputStreamType, ERHIFeatureLevel::Type FeatureLevel, const FVertexFactory *VertexFactory, const FMeshBatchElement &BatchElement, FMeshDrawSingleShaderBindings &ShaderBindings, FVertexInputStreamArray &VertexStreams) const
Definition InstancedStaticMesh.cpp:6012
Definition LightSceneProxy.h:43
Definition LocalVertexFactory.h:213
ENGINE_API void Bind(const FShaderParameterMap &ParameterMap)
Definition LocalVertexFactory.cpp:63
Definition LocalVertexFactory.h:51
FDataType Data
Definition LocalVertexFactory.h:188
Definition MaterialRenderProxy.h:102
Definition MeshDrawShaderBindings.h:104
Definition MeshElementCollector.h:26
Definition MeshMaterialShader.h:68
Definition RHICommandList.h:455
Definition RHIResources.h:3304
Definition RHIResources.h:1232
Definition RayTracingGeometry.h:31
Definition RenderResource.h:37
RENDERCORE_API void UpdateRHI(FRHICommandListBase &RHICmdList)
Definition RenderResource.cpp:225
Definition ResourceArray.h:77
Definition SceneInterface.h:106
Definition SceneView.h:2212
FEngineShowFlags EngineShowFlags
Definition SceneView.h:2324
Definition SceneView.h:1425
const FSceneViewFamily * Family
Definition SceneView.h:1427
Definition ShaderCore.h:323
Definition ShaderParameters.h:56
Definition ShaderParameters.h:87
Definition StaticLighting.h:114
virtual void Apply(struct FQuantizedLightmapData *QuantizedData, const TMap< ULightComponent *, class FShadowMapData2D * > &ShadowMapData, const FStaticLightingBuildContext *LightingContext)=0
Definition InstancedStaticMesh.h:71
FBufferRHIRef GetInstanceTransformBuffer()
Definition InstancedStaticMesh.h:159
uint32 GetNumInstances() const
Definition InstancedStaticMesh.h:92
void SetFlushToGPUPending()
Definition InstancedStaticMesh.h:174
FBufferRHIRef GetInstanceLightmapBuffer()
Definition InstancedStaticMesh.h:165
TSharedPtr< FStaticMeshInstanceData, ESPMode::ThreadSafe > InstanceData
Definition InstancedStaticMesh.h:148
void GetInstanceCustomDataValues(int32 InstanceIndex, TArray< float > &InstanceCustomData) const
Definition InstancedStaticMesh.h:120
void GetInstanceLightMapData(int32 InstanceIndex, FVector4f &InstanceLightmapAndShadowMapUVBias) const
Definition InstancedStaticMesh.h:115
void GetInstanceTransform(int32 InstanceIndex, FRenderTransform &Transform) const
Definition InstancedStaticMesh.h:97
virtual FString GetFriendlyName() const override
Definition InstancedStaticMesh.h:135
void GetInstanceRandomID(int32 InstanceIndex, float &RandomInstanceID) const
Definition InstancedStaticMesh.h:102
bool RequireCPUAccess
Definition InstancedStaticMesh.h:151
FBufferRHIRef GetInstanceOriginBuffer()
Definition InstancedStaticMesh.h:153
FStaticMeshInstanceData * GetInstanceData() const
Definition InstancedStaticMesh.h:125
Definition StaticMeshResources.h:1031
Definition StaticMeshResources.h:774
Definition StaticMeshSceneProxy.h:34
virtual ENGINE_API FPrimitiveViewRelevance GetViewRelevance(const FSceneView *View) const override
Definition StaticMeshSceneProxy.cpp:2372
Definition StaticMeshLight.h:24
void SetLocalToWorld(const FMatrix &InLocalToWorld)
Definition StaticMeshLight.cpp:93
virtual bool IsInstancedMesh() const override
Definition StaticMeshLight.h:53
Definition StaticMeshLight.h:109
virtual FString GetDescription() const override
Definition StaticMeshLight.h:132
Definition RenderResource.h:474
virtual RENDERCORE_API FString GetFriendlyName() const override
Definition RenderResource.cpp:561
Definition VertexFactory.h:661
TArray< FVertexStream, TInlineAllocator< 8 > > FVertexStreamList
Definition VertexFactory.h:834
FVertexStreamList Streams
Definition VertexFactory.h:837
Definition HitProxies.h:135
Definition ComponentInterfaces.h:59
Definition Array.h:670
Definition IConsoleManager.h:1792
Definition IndirectArray.h:20
Definition UnrealString.h.inl:34
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
Definition SharedPointer.h:692
Definition ShaderParameterMacros.h:136
Definition UniquePtr.h:107
Definition InstancedStaticMeshComponent.h:158
Definition StaticMesh.h:593
Definition Texture.h:1219
Type
Definition RHIFeatureLevel.h:20
@ false
Definition radaudio_common.h:23
Definition Color.h:486
Definition InstancedStaticMesh.h:705
FComponentInstanceSharingData()
Definition InstancedStaticMesh.h:716
UInstancedStaticMeshComponent * Component
Definition InstancedStaticMesh.h:707
UTexture * ShadowMapTexture
Definition InstancedStaticMesh.h:713
UTexture * LightMapTexture
Definition InstancedStaticMesh.h:710
Definition InstancedStaticMesh.h:729
TArray< FComponentInstanceSharingData > SharingData
Definition InstancedStaticMesh.h:734
TMap< UInstancedStaticMeshComponent *, TArray< FInstancedStaticMeshInstanceData > > ComponentInstances
Definition InstancedStaticMesh.h:731
Definition InstancedStaticMesh.h:240
FVertexStreamComponent InstanceOriginComponent
Definition InstancedStaticMesh.h:242
FRHIShaderResourceView * InstanceCustomDataSRV
Definition InstancedStaticMesh.h:253
FRHIShaderResourceView * InstanceOriginSRV
Definition InstancedStaticMesh.h:250
FVertexStreamComponent InstanceLightmapAndShadowMapUVBiasComponent
Definition InstancedStaticMesh.h:248
int32 NumCustomDataFloats
Definition InstancedStaticMesh.h:255
FRHIShaderResourceView * InstanceTransformSRV
Definition InstancedStaticMesh.h:251
FRHIShaderResourceView * InstanceLightmapSRV
Definition InstancedStaticMesh.h:252
FVertexStreamComponent InstanceTransformComponent[3]
Definition InstancedStaticMesh.h:245
Definition InstancedStaticMeshSceneProxyDesc.h:11
Definition InstancedStaticMesh.h:262
void SetData(FRHICommandListBase &RHICmdList, const FDataType &InData, const FInstancedStaticMeshDataType *InInstanceData)
Definition InstancedStaticMesh.h:300
FRHIUniformBuffer * GetUniformBuffer() const
Definition InstancedStaticMesh.h:345
static ENGINE_API void GetPSOPrecacheVertexFetchElements(EVertexInputStreamType VertexInputStreamType, FVertexDeclarationElementList &Elements)
Definition InstancedStaticMesh.cpp:736
static ENGINE_API bool ShouldCompilePermutation(const FVertexFactoryShaderPermutationParameters &Parameters)
Definition InstancedStaticMesh.cpp:697
virtual ENGINE_API void InitRHI(FRHICommandListBase &RHICmdList) override
Definition InstancedStaticMesh.cpp:760
FInstancedStaticMeshVertexFactory(ERHIFeatureLevel::Type InFeatureLevel)
Definition InstancedStaticMesh.h:265
static ENGINE_API void ModifyCompilationEnvironment(const FVertexFactoryShaderPermutationParameters &Parameters, FShaderCompilerEnvironment &OutEnvironment)
Definition InstancedStaticMesh.cpp:703
DECLARE_VERTEX_FACTORY_TYPE_API(FInstancedStaticMeshVertexFactory, ENGINE_API)
static constexpr uint32 NumBitsForVisibilityMask()
Definition InstancedStaticMesh.h:320
FRHIShaderResourceView * GetInstanceOriginSRV() const
Definition InstancedStaticMesh.h:325
FRHIShaderResourceView * GetInstanceCustomDataSRV() const
Definition InstancedStaticMesh.h:340
FRHIShaderResourceView * GetInstanceTransformSRV() const
Definition InstancedStaticMesh.h:330
static ENGINE_API void InitInstancedStaticMeshVertexFactoryComponents(const FStaticMeshVertexBuffers &VertexBuffers, const FColorVertexBuffer *ColorVertexBuffer, const FStaticMeshInstanceBuffer *InstanceBuffer, const FInstancedStaticMeshVertexFactory *VertexFactory, int32 LightMapCoordinateIndex, bool bRHISupportsManualVertexFetch, FInstancedStaticMeshVertexFactory::FDataType &OutData, FInstancedStaticMeshDataType &OutInstanceData)
Definition InstancedStaticMesh.cpp:983
FRHIShaderResourceView * GetInstanceLightmapSRV() const
Definition InstancedStaticMesh.h:335
static ENGINE_API void GetVertexElements(ERHIFeatureLevel::Type FeatureLevel, EVertexInputStreamType InputStreamType, bool bSupportsManualVertexFetch, FDataType &Data, FInstancedStaticMeshDataType &InstanceData, FVertexDeclarationElementList &Elements)
Definition InstancedStaticMesh.cpp:792
Definition InstancedStaticMesh.h:221
int32 StartCullDistance
Definition InstancedStaticMesh.h:226
class FStaticMeshRenderData * MeshRenderData
Definition InstancedStaticMesh.h:223
class FInstancedStaticMeshRenderData * RenderData
Definition InstancedStaticMesh.h:222
FVector InstancingOffset
Definition InstancedStaticMesh.h:236
int32 MinLOD
Definition InstancedStaticMesh.h:231
int32 EndCullDistance
Definition InstancedStaticMesh.h:227
bool bRenderSelected
Definition InstancedStaticMesh.h:233
FVector AverageInstancesScale
Definition InstancedStaticMesh.h:235
float LODDistanceScale
Definition InstancedStaticMesh.h:229
int32 MinDrawDistance
Definition InstancedStaticMesh.h:225
bool bRenderUnselected
Definition InstancedStaticMesh.h:234
Definition LocalVertexFactory.h:60
Definition MeshBatch.h:232
Definition MeshBatch.h:371
Definition PrimitiveViewRelevance.h:14
Definition LightMap.h:500
Definition RHIUtilities.h:181
Definition RenderTransform.h:23
Definition ShaderCore.h:544
Definition StaticMeshResources.h:320
Definition MeshMaterialShader.h:44
Definition VertexStreamComponent.h:22
Definition BoxSphereBounds.h:25