UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FVirtualShadowMapArray Class Reference

#include <VirtualShadowMapArray.h>

Public Member Functions

 FVirtualShadowMapArray (FScene &InScene)
 
 ~FVirtualShadowMapArray ()
 
void Initialize (FRDGBuilder &GraphBuilder, FVirtualShadowMapArrayCacheManager *InCacheManager, bool bInEnabled, const FEngineShowFlags &EngineShowFlags)
 
bool IsEnabled () const
 
int32 AllocateDirectional (int32 Count)
 
int32 AllocateLocal (bool bSinglePageShadowMap, int32 Count)
 
int32 AllocateUnreferenced (bool bSinglePageShadowMap, int32 Count)
 
void UpdateNextData (int32 PrevVirtualShadowMapId, const FNextVirtualShadowMapData &Data)
 
bool IsDirectional (int32 VirtualShadowMapId)
 
int32 GetNumShadowMapSlots () const
 
int32 GetNumFullShadowMaps () const
 
int32 GetNumSinglePageShadowMaps () const
 
int32 GetNumShadowMaps () const
 
FIntPoint GetPhysicalPoolSize () const
 
FIntPoint GetHZBPhysicalPoolSize () const
 
uint32 GetMaxPhysicalPages () const
 
uint32 GetTotalAllocatedPhysicalPages () const
 
EPixelFormat GetPackedShadowMaskFormat () const
 
void UpdatePhysicalPageAddresses (FRDGBuilder &GraphBuilder)
 
void BeginMarkPages (FRDGBuilder &GraphBuilder, const FSceneRenderer &SceneRenderer, const FSingleLayerWaterPrePassResult *SingleLayerWaterPrePassResult, const FFrontLayerTranslucencyData &FrontLayerTranslucencyData, const Froxel::FRenderer &FroxelRenderer, bool bAnyLocalLightsWithVSMs)
 
void BuildPageAllocations (FRDGBuilder &GraphBuilder, const FMinimalSceneTextures &SceneTextures, const TConstArrayView< FViewInfo > &Views)
 
bool IsAllocated () const
 
bool ShouldCacheStaticSeparately () const
 
bool HasSeparateDynamicHZB () const
 
void CreateMipViews (TArray< Nanite::FPackedView, SceneRenderingAllocator > &Views) const
 
void RenderVirtualShadowMapsNanite (FRDGBuilder &GraphBuilder, FSceneRenderer &SceneRenderer, bool bUpdateNaniteStreaming, const FNaniteVisibilityQuery *VisibilityQuery, TConstArrayView< FNaniteVirtualShadowMapRenderPass > VirtualShadowMapPasses)
 
void RenderVirtualShadowMapsNonNanite (FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUniformBuffer, const TArray< FProjectedShadowInfo *, SceneRenderingAllocator > &VirtualSmMeshCommandPasses, TArrayView< FViewInfo > Views)
 
void PostRender (FRDGBuilder &GraphBuilder)
 
void RenderDebugInfo (FRDGBuilder &GraphBuilder, TArrayView< FViewInfo > Views)
 
bool ShouldGenerateStats () const
 
bool IsCsvLogEnabled () const
 
void LogStats (FRDGBuilder &GraphBuilder, const FViewInfo &View)
 
FVirtualShadowMapSamplingParameters GetSamplingParameters (FRDGBuilder &GraphBuilder, int32 ViewIndex) const
 
FVirtualShadowMapMarkingParameters GetMarkingParameters (FRDGBuilder &GraphBuilder, int32 ViewIndex) const
 
TRDGUniformBufferRef< FVirtualShadowMapUniformParametersGetUniformBuffer (int32 ViewIndex) const
 
bool HasAnyShadowData () const
 
bool ShouldCullBackfacingPixels () const
 
void UpdateHZB (FRDGBuilder &GraphBuilder)
 
void AddRenderViews (const FProjectedShadowInfo *ProjectedShadowInfo, TConstArrayView< FViewInfo > Views, float LODScaleFactor, bool bSetHzbParams, bool bUpdateHZBMetaData, TArray< Nanite::FPackedView, SceneRenderingAllocator > &OutVirtualShadowViews) const
 
bool IsVisualizePassEnabled (const FViewInfo &View, int32 ViewIndex, EVSMVisualizationPostPass Pass) const
 
FScreenPassTexture AddVisualizePass (FRDGBuilder &GraphBuilder, const FViewInfo &View, int32 ViewIndex, EVSMVisualizationPostPass Pass, FSceneUniformBuffer &SceneUniformBuffer, FScreenPassTexture &SceneColor, const FScreenPassTexture &SceneDepth, FScreenPassRenderTarget &Output)
 
void RenderShadowCasterBounds (FRDGBuilder &GraphBuilder, const FViewInfo &View, int32 ViewIndex, FSceneUniformBuffer &SceneUniformBuffer, const FIntRect &ViewRect, FRDGTextureRef OutputColor, FRDGTextureRef OutputDepth, FRDGTextureRef SceneDepth)
 
bool UseHzbOcclusion () const
 

Static Public Member Functions

static bool IsSinglePage (int32 VirtualShadowMapId)
 
static void SetShaderDefines (FShaderCompilerEnvironment &OutEnvironment)
 
static float InterpolateResolutionBias (float BiasNonMoving, float BiasMoving, float LightMobilityFactor)
 
static FVirtualShadowMapSamplingParameters CreateDummySamplingParameters (FRDGBuilder &GraphBuilder)
 

Public Attributes

FVirtualShadowMapArrayCacheManagerCacheManager = nullptr
 
FVirtualShadowMapUniformParameters UniformParameters
 
TArray< FVirtualShadowMapPerViewParametersPerViewParameters
 
FRDGTextureRef PhysicalPagePoolRDG = nullptr
 
TRefCountPtr< IPooledRenderTargetHZBPhysicalArray = nullptr
 
FRDGTextureRef HZBPhysicalArrayRDG = nullptr
 
FRDGBufferRef PhysicalPageMetaDataRDG = nullptr
 
FRDGTextureRef PageTableRDG = nullptr
 
FRDGTextureRef PageRequestFlagsRDG = nullptr
 
FRDGTextureRef PageFlagsRDG = nullptr
 
FRDGTextureRef PageReceiverMasksRDG = nullptr
 
FRDGBufferRef NanitePerformanceFeedbackRDG = nullptr
 
FRDGBufferRef ThrottleBufferRDG = nullptr
 
bool bThrottlingEnabled = false
 
FRDGBufferRef PhysicalPageListsRDG = nullptr
 
FRDGBufferRef CachedPageInfosRDG = nullptr
 
FRDGBufferRef UncachedPageRectBoundsRDG = nullptr
 
FRDGBufferRef AllocatedPageRectBoundsRDG = nullptr
 
FRDGBufferRef ProjectionDataRDG = nullptr
 
FRDGBufferRef DirtyPageFlagsRDG = nullptr
 
bool bHZBBuiltThisFrame = false
 
FRDGBufferRef StatsBufferRDG = nullptr
 
FRDGBufferUAVRef StatsBufferUAV = nullptr
 
FRDGBufferRef StatsNaniteBufferRDG = nullptr
 
TArray< FRDGTextureRefDebugVisualizationOutput
 
TArray< FVirtualShadowMapVisualizeLightSearchVisualizeLight
 
bool bEnableVisualization = false
 
bool bEnableNaniteVisualization = false
 

Static Public Attributes

static constexpr uint32 MaxPageAreaDiagnosticSlots = 32
 
static constexpr uint32 MaxNPFDiagnosticSlotsSinglePage = 32
 
static constexpr uint32 MaxNPFDiagnosticSlotsMultiPage = 96
 

Constructor & Destructor Documentation

◆ FVirtualShadowMapArray()

FVirtualShadowMapArray::FVirtualShadowMapArray ( FScene InScene)

◆ ~FVirtualShadowMapArray()

FVirtualShadowMapArray::~FVirtualShadowMapArray ( )

Member Function Documentation

◆ AddRenderViews()

void FVirtualShadowMapArray::AddRenderViews ( const FProjectedShadowInfo ProjectedShadowInfo,
TConstArrayView< FViewInfo Views,
float  LODScaleFactor,
bool  bSetHzbParams,
bool  bUpdateHZBMetaData,
TArray< Nanite::FPackedView, SceneRenderingAllocator > &  OutVirtualShadowViews 
) const

◆ AddVisualizePass()

FScreenPassTexture FVirtualShadowMapArray::AddVisualizePass ( FRDGBuilder GraphBuilder,
const FViewInfo View,
int32  ViewIndex,
EVSMVisualizationPostPass  Pass,
FSceneUniformBuffer SceneUniformBuffer,
FScreenPassTexture SceneColor,
const FScreenPassTexture SceneDepth,
FScreenPassRenderTarget Output 
)

◆ AllocateDirectional()

int32 FVirtualShadowMapArray::AllocateDirectional ( int32  Count)

◆ AllocateLocal()

int32 FVirtualShadowMapArray::AllocateLocal ( bool  bSinglePageShadowMap,
int32  Count 
)

◆ AllocateUnreferenced()

int32 FVirtualShadowMapArray::AllocateUnreferenced ( bool  bSinglePageShadowMap,
int32  Count 
)

◆ BeginMarkPages()

void FVirtualShadowMapArray::BeginMarkPages ( FRDGBuilder GraphBuilder,
const FSceneRenderer SceneRenderer,
const FSingleLayerWaterPrePassResult SingleLayerWaterPrePassResult,
const FFrontLayerTranslucencyData FrontLayerTranslucencyData,
const Froxel::FRenderer FroxelRenderer,
bool  bAnyLocalLightsWithVSMs 
)

◆ BuildPageAllocations()

void FVirtualShadowMapArray::BuildPageAllocations ( FRDGBuilder GraphBuilder,
const FMinimalSceneTextures SceneTextures,
const TConstArrayView< FViewInfo > &  Views 
)

◆ CreateDummySamplingParameters()

FVirtualShadowMapSamplingParameters FVirtualShadowMapArray::CreateDummySamplingParameters ( FRDGBuilder GraphBuilder)
static

Creates an uniform buffer filled with dummy values that can be used in scenarios where a shader is used that pulls in the VSM sampling UB but is not actually expected to do anything useful.

◆ CreateMipViews()

void FVirtualShadowMapArray::CreateMipViews ( TArray< Nanite::FPackedView, SceneRenderingAllocator > &  Views) const

◆ GetHZBPhysicalPoolSize()

FIntPoint FVirtualShadowMapArray::GetHZBPhysicalPoolSize ( ) const

◆ GetMarkingParameters()

FVirtualShadowMapMarkingParameters FVirtualShadowMapArray::GetMarkingParameters ( FRDGBuilder GraphBuilder,
int32  ViewIndex 
) const

◆ GetMaxPhysicalPages()

uint32 FVirtualShadowMapArray::GetMaxPhysicalPages ( ) const
inline

◆ GetNumFullShadowMaps()

int32 FVirtualShadowMapArray::GetNumFullShadowMaps ( ) const
inline

◆ GetNumShadowMaps()

int32 FVirtualShadowMapArray::GetNumShadowMaps ( ) const
inline

Return the total of allocated SMs, both full and single-page SMs

◆ GetNumShadowMapSlots()

int32 FVirtualShadowMapArray::GetNumShadowMapSlots ( ) const
inline

◆ GetNumSinglePageShadowMaps()

int32 FVirtualShadowMapArray::GetNumSinglePageShadowMaps ( ) const
inline

◆ GetPackedShadowMaskFormat()

EPixelFormat FVirtualShadowMapArray::GetPackedShadowMaskFormat ( ) const

◆ GetPhysicalPoolSize()

FIntPoint FVirtualShadowMapArray::GetPhysicalPoolSize ( ) const

◆ GetSamplingParameters()

FVirtualShadowMapSamplingParameters FVirtualShadowMapArray::GetSamplingParameters ( FRDGBuilder GraphBuilder,
int32  ViewIndex 
) const

◆ GetTotalAllocatedPhysicalPages()

uint32 FVirtualShadowMapArray::GetTotalAllocatedPhysicalPages ( ) const

◆ GetUniformBuffer()

TRDGUniformBufferRef< FVirtualShadowMapUniformParameters > FVirtualShadowMapArray::GetUniformBuffer ( int32  ViewIndex) const
inline

◆ HasAnyShadowData()

bool FVirtualShadowMapArray::HasAnyShadowData ( ) const
inline

◆ HasSeparateDynamicHZB()

bool FVirtualShadowMapArray::HasSeparateDynamicHZB ( ) const
inline

◆ Initialize()

void FVirtualShadowMapArray::Initialize ( FRDGBuilder GraphBuilder,
FVirtualShadowMapArrayCacheManager InCacheManager,
bool  bInEnabled,
const FEngineShowFlags EngineShowFlags 
)

◆ InterpolateResolutionBias()

float FVirtualShadowMapArray::InterpolateResolutionBias ( float  BiasNonMoving,
float  BiasMoving,
float  LightMobilityFactor 
)
static

Helper function to add clamping when interpolating the LOD resolution biases to ensure the bias for moving lights can never be lower than the one for not. This could occur fairly easily since it is possible to both set the values through console as well as scalability.

◆ IsAllocated()

bool FVirtualShadowMapArray::IsAllocated ( ) const
inline

◆ IsCsvLogEnabled()

bool FVirtualShadowMapArray::IsCsvLogEnabled ( ) const

◆ IsDirectional()

bool FVirtualShadowMapArray::IsDirectional ( int32  VirtualShadowMapId)
inline

◆ IsEnabled()

bool FVirtualShadowMapArray::IsEnabled ( ) const
inline

◆ IsSinglePage()

static bool FVirtualShadowMapArray::IsSinglePage ( int32  VirtualShadowMapId)
inlinestatic

◆ IsVisualizePassEnabled()

bool FVirtualShadowMapArray::IsVisualizePassEnabled ( const FViewInfo View,
int32  ViewIndex,
EVSMVisualizationPostPass  Pass 
) const

◆ LogStats()

void FVirtualShadowMapArray::LogStats ( FRDGBuilder GraphBuilder,
const FViewInfo View 
)

◆ PostRender()

void FVirtualShadowMapArray::PostRender ( FRDGBuilder GraphBuilder)

◆ RenderDebugInfo()

void FVirtualShadowMapArray::RenderDebugInfo ( FRDGBuilder GraphBuilder,
TArrayView< FViewInfo Views 
)

◆ RenderShadowCasterBounds()

void FVirtualShadowMapArray::RenderShadowCasterBounds ( FRDGBuilder GraphBuilder,
const FViewInfo View,
int32  ViewIndex,
FSceneUniformBuffer SceneUniformBuffer,
const FIntRect ViewRect,
FRDGTextureRef  OutputColor,
FRDGTextureRef  OutputDepth,
FRDGTextureRef  SceneDepth 
)

◆ RenderVirtualShadowMapsNanite()

void FVirtualShadowMapArray::RenderVirtualShadowMapsNanite ( FRDGBuilder GraphBuilder,
FSceneRenderer SceneRenderer,
bool  bUpdateNaniteStreaming,
const FNaniteVisibilityQuery VisibilityQuery,
TConstArrayView< FNaniteVirtualShadowMapRenderPass VirtualShadowMapPasses 
)

Draw Nanite geometry into the VSMs.

◆ RenderVirtualShadowMapsNonNanite()

void FVirtualShadowMapArray::RenderVirtualShadowMapsNonNanite ( FRDGBuilder GraphBuilder,
FSceneUniformBuffer SceneUniformBuffer,
const TArray< FProjectedShadowInfo *, SceneRenderingAllocator > &  VirtualSmMeshCommandPasses,
TArrayView< FViewInfo Views 
)

Draw Non-Nanite geometry into the VSMs.

◆ SetShaderDefines()

void FVirtualShadowMapArray::SetShaderDefines ( FShaderCompilerEnvironment OutEnvironment)
static

◆ ShouldCacheStaticSeparately()

bool FVirtualShadowMapArray::ShouldCacheStaticSeparately ( ) const
inline

◆ ShouldCullBackfacingPixels()

bool FVirtualShadowMapArray::ShouldCullBackfacingPixels ( ) const
inline

◆ ShouldGenerateStats()

bool FVirtualShadowMapArray::ShouldGenerateStats ( ) const

◆ UpdateHZB()

void FVirtualShadowMapArray::UpdateHZB ( FRDGBuilder GraphBuilder)

◆ UpdateNextData()

void FVirtualShadowMapArray::UpdateNextData ( int32  PrevVirtualShadowMapId,
const FNextVirtualShadowMapData Data 
)

◆ UpdatePhysicalPageAddresses()

void FVirtualShadowMapArray::UpdatePhysicalPageAddresses ( FRDGBuilder GraphBuilder)

◆ UseHzbOcclusion()

bool FVirtualShadowMapArray::UseHzbOcclusion ( ) const
inline

Member Data Documentation

◆ AllocatedPageRectBoundsRDG

FRDGBufferRef FVirtualShadowMapArray::AllocatedPageRectBoundsRDG = nullptr

◆ bEnableNaniteVisualization

bool FVirtualShadowMapArray::bEnableNaniteVisualization = false

◆ bEnableVisualization

bool FVirtualShadowMapArray::bEnableVisualization = false

◆ bHZBBuiltThisFrame

bool FVirtualShadowMapArray::bHZBBuiltThisFrame = false

◆ bThrottlingEnabled

bool FVirtualShadowMapArray::bThrottlingEnabled = false

◆ CachedPageInfosRDG

FRDGBufferRef FVirtualShadowMapArray::CachedPageInfosRDG = nullptr

◆ CacheManager

FVirtualShadowMapArrayCacheManager* FVirtualShadowMapArray::CacheManager = nullptr

◆ DebugVisualizationOutput

TArray<FRDGTextureRef> FVirtualShadowMapArray::DebugVisualizationOutput

◆ DirtyPageFlagsRDG

FRDGBufferRef FVirtualShadowMapArray::DirtyPageFlagsRDG = nullptr

◆ HZBPhysicalArray

TRefCountPtr<IPooledRenderTarget> FVirtualShadowMapArray::HZBPhysicalArray = nullptr

◆ HZBPhysicalArrayRDG

FRDGTextureRef FVirtualShadowMapArray::HZBPhysicalArrayRDG = nullptr

◆ MaxNPFDiagnosticSlotsMultiPage

constexpr uint32 FVirtualShadowMapArray::MaxNPFDiagnosticSlotsMultiPage = 96
staticconstexpr

◆ MaxNPFDiagnosticSlotsSinglePage

constexpr uint32 FVirtualShadowMapArray::MaxNPFDiagnosticSlotsSinglePage = 32
staticconstexpr

◆ MaxPageAreaDiagnosticSlots

constexpr uint32 FVirtualShadowMapArray::MaxPageAreaDiagnosticSlots = 32
staticconstexpr

◆ NanitePerformanceFeedbackRDG

FRDGBufferRef FVirtualShadowMapArray::NanitePerformanceFeedbackRDG = nullptr

◆ PageFlagsRDG

FRDGTextureRef FVirtualShadowMapArray::PageFlagsRDG = nullptr

◆ PageReceiverMasksRDG

FRDGTextureRef FVirtualShadowMapArray::PageReceiverMasksRDG = nullptr

◆ PageRequestFlagsRDG

FRDGTextureRef FVirtualShadowMapArray::PageRequestFlagsRDG = nullptr

◆ PageTableRDG

FRDGTextureRef FVirtualShadowMapArray::PageTableRDG = nullptr

◆ PerViewParameters

TArray<FVirtualShadowMapPerViewParameters> FVirtualShadowMapArray::PerViewParameters

◆ PhysicalPageListsRDG

FRDGBufferRef FVirtualShadowMapArray::PhysicalPageListsRDG = nullptr

◆ PhysicalPageMetaDataRDG

FRDGBufferRef FVirtualShadowMapArray::PhysicalPageMetaDataRDG = nullptr

◆ PhysicalPagePoolRDG

FRDGTextureRef FVirtualShadowMapArray::PhysicalPagePoolRDG = nullptr

◆ ProjectionDataRDG

FRDGBufferRef FVirtualShadowMapArray::ProjectionDataRDG = nullptr

◆ StatsBufferRDG

FRDGBufferRef FVirtualShadowMapArray::StatsBufferRDG = nullptr

◆ StatsBufferUAV

FRDGBufferUAVRef FVirtualShadowMapArray::StatsBufferUAV = nullptr

◆ StatsNaniteBufferRDG

FRDGBufferRef FVirtualShadowMapArray::StatsNaniteBufferRDG = nullptr

◆ ThrottleBufferRDG

FRDGBufferRef FVirtualShadowMapArray::ThrottleBufferRDG = nullptr

◆ UncachedPageRectBoundsRDG

FRDGBufferRef FVirtualShadowMapArray::UncachedPageRectBoundsRDG = nullptr

◆ UniformParameters

FVirtualShadowMapUniformParameters FVirtualShadowMapArray::UniformParameters

◆ VisualizeLight

TArray<FVirtualShadowMapVisualizeLightSearch> FVirtualShadowMapArray::VisualizeLight

The documentation for this class was generated from the following files: