UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
HeterogeneousVolumesLiveShadingPipeline.cpp File Reference
#include "HeterogeneousVolumes.h"
#include "HeterogeneousVolumeInterface.h"
#include "LightRendering.h"
#include "LocalVertexFactory.h"
#include "MeshPassUtils.h"
#include "PostProcess/PostProcessing.h"
#include "PixelShaderUtils.h"
#include "RayTracingDefinitions.h"
#include "RayTracingInstance.h"
#include "RayTracingInstanceBufferUtil.h"
#include "RendererPrivate.h"
#include "ScenePrivate.h"
#include "PrimitiveDrawingUtils.h"
#include "VolumeLighting.h"
#include "VolumetricFog.h"
#include "BlueNoise.h"

Classes

class  FRenderLightingCacheLooseBindings
 
class  FRenderLightingCacheWithLiveShadingCS
 
class  FRenderSingleScatteringWithLiveShadingCS< DispatchMode >
 
class  FScreenTileClassificationCS
 
class  FRenderShadowMapLooseBindings
 
class  FClearVolumetricShadowMapCS
 
class  FRenderVolumetricShadowMapForLightWithLiveShadingCS
 
class  FRenderVolumetricShadowMaskCS
 

Namespaces

namespace  HeterogeneousVolumes
 

Typedefs

typedef FRenderSingleScatteringWithLiveShadingCS< HeterogeneousVolumes::DirectDispatchFRenderSingleScatteringWithLiveShadingDirectCS
 
typedef FRenderSingleScatteringWithLiveShadingCS< HeterogeneousVolumes::DirectDispatchFRenderSingleScatteringWithLiveShadingIndirectCS
 

Enumerations

enum class  HeterogeneousVolumes::EAVSMSampleMode { HeterogeneousVolumes::Disabled , HeterogeneousVolumes::Performance , HeterogeneousVolumes::Quality }
 
enum  HeterogeneousVolumes::EDispatchMode { HeterogeneousVolumes::DirectDispatch , HeterogeneousVolumes::IndirectDispatch }
 

Functions

EScalabilityMode HeterogeneousVolumes::GetScalabilityMode ()
 
bool HeterogeneousVolumes::SupportsLightType (uint32 LightType)
 
bool HeterogeneousVolumes::ShouldBoundsCull ()
 
bool HeterogeneousVolumes::ShouldUseScreenTileClassification ()
 
bool HeterogeneousVolumes::SupportsOverlappingVolumes ()
 
bool HeterogeneousVolumes::UseExistenceMask ()
 
bool HeterogeneousVolumes::UseReferenceFastPath ()
 
bool HeterogeneousVolumes::ShadowsUseCameraSceneDepth ()
 
float HeterogeneousVolumes::GetShadowNearClippingDistance ()
 
EAVSMSampleMode HeterogeneousVolumes::GetAVSMSampleMode (bool bEnabled)
 
 IMPLEMENT_TYPE_LAYOUT (FRenderLightingCacheLooseBindings)
 
 IMPLEMENT_MATERIAL_SHADER_TYPE (, FRenderLightingCacheWithLiveShadingCS, TEXT("/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesLiveShadingPipeline.usf"), TEXT("RenderLightingCacheWithLiveShadingCS"), SF_Compute)
 
 IMPLEMENT_MATERIAL_SHADER_TYPE (template<>, FRenderSingleScatteringWithLiveShadingDirectCS, TEXT("/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesLiveShadingPipeline.usf"), TEXT("RenderSingleScatteringWithLiveShadingCS"), SF_Compute)
 
template<bool bWithLumen, HeterogeneousVolumes::EDispatchMode DispatchMode, typename ComputeShaderType >
void AddComputePass (FRDGBuilder &GraphBuilder, TShaderRef< ComputeShaderType > &ComputeShader, typename ComputeShaderType::FParameters *PassParameters, const FScene *Scene, const FMaterialRenderProxy *MaterialRenderProxy, const FMaterial &Material, const FString &PassName, FIntVector GroupCount, FRDGBufferRef IndirectArgsBuffer, uint32 IndirectArgOffset)
 
 IMPLEMENT_UNIFORM_BUFFER_STRUCT (FAdaptiveVolumetricShadowMaps, "AVSMs")
 
FAdaptiveVolumetricShadowMapParameters GetAdaptiveVolumetricShadowMapParametersFromUniformBuffer (const TRDGUniformBufferRef< FAdaptiveVolumetricShadowMapUniformBufferParameters > &UniformBuffer)
 
TRDGUniformBufferRef< FAdaptiveVolumetricShadowMapsCreateAdaptiveVolumetricShadowMapUniformBuffers (FRDGBuilder &GraphBuilder, FSceneViewState *ViewState, const FLightSceneInfo *LightSceneInfo)
 
 IMPLEMENT_GLOBAL_SHADER (FScreenTileClassificationCS, "/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesLiveShadingGlobalPipeline.usf", "ScreenTileClassificationCS", SF_Compute)
 
template<HeterogeneousVolumes::EDispatchMode DispatchMode>
void RenderSingleScatteringWithLiveShading (FRDGBuilder &GraphBuilder, const FScene *Scene, const FViewInfo &View, int32 ViewIndex, const FSceneTextures &SceneTextures, bool bApplyEmissionAndTransmittance, bool bApplyDirectLighting, bool bApplyShadowTransmittance, uint32 LightType, const FLightSceneInfo *LightSceneInfo, const FVisibleLightInfo *VisibleLightInfo, const FVirtualShadowMapArray &VirtualShadowMapArray, const IHeterogeneousVolumeInterface *HeterogeneousVolumeInterface, const FMaterialRenderProxy *DefaultMaterialRenderProxy, FPersistentPrimitiveIndex PersistentPrimitiveIndex, const FBoxSphereBounds LocalBoxSphereBounds, FRDGTextureRef LightingCacheTexture, FRDGTextureRef AmbientOcclusionTexture, FRDGTextureRef &HeterogeneousVolumeRadianceTexture, FRDGTextureRef &HeterogeneousVolumeVelocityTexture, FRDGTextureRef &HeterogeneousVolumeHoldoutTexture, FRDGTextureRef &HeterogeneousVolumeBeerShadowMapTexture)
 
void RenderWithLiveShading (FRDGBuilder &GraphBuilder, const FSceneTextures &SceneTextures, const FScene *Scene, const FViewInfo &View, int32 ViewIndex, TArray< FVisibleLightInfo, SceneRenderingAllocator > &VisibleLightInfos, const FVirtualShadowMapArray &VirtualShadowMapArray, const IHeterogeneousVolumeInterface *HeterogeneousVolumeInterface, const FMaterialRenderProxy *MaterialRenderProxy, const FPersistentPrimitiveIndex &PersistentPrimitiveIndex, const FBoxSphereBounds LocalBoxSphereBounds, FRDGTextureRef LightingCacheTexture, FRDGTextureRef &HeterogeneousVolumeRadiance, FRDGTextureRef &HeterogeneousVolumeVelocity, FRDGTextureRef &HeterogeneousVolumeHoldout, FRDGTextureRef &HeterogeneousVolumeBeerShadowMap)
 
 IMPLEMENT_TYPE_LAYOUT (FRenderShadowMapLooseBindings)
 
 IMPLEMENT_GLOBAL_SHADER (FClearVolumetricShadowMapCS, "/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesVoxelGridShadows.usf", "ClearVolumetricShadowMapCS", SF_Compute)
 
void ClearVolumetricShadowMap (FRDGBuilder &GraphBuilder, const FScene *Scene, const FViewInfo &View, FIntPoint ShadowMapResolution, FIntVector &GroupCount, FRDGBufferRef &VolumetricShadowLinkedListBuffer)
 
 IMPLEMENT_MATERIAL_SHADER_TYPE (, FRenderVolumetricShadowMapForLightWithLiveShadingCS, TEXT("/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesLiveShadingShadows.usf"), TEXT("RenderVolumetricShadowMapForLightWithLiveShadingCS"), SF_Compute)
 
void CollectHeterogeneousVolumeMeshBatchesForView (const FViewInfo &View, bool bCollectForShadowCasting, TSet< FVolumetricMeshBatch > &HeterogeneousVolumesMeshBatches, FBoxSphereBounds::Builder &WorldBoundsBuilder)
 
void CollectHeterogeneousVolumeMeshBatchesForLightWithShadowIndex (const FLightSceneInfo *LightSceneInfo, const FVisibleLightInfo *VisibleLightInfo, int32 ShadowIndexDiscard, const FViewInfo &View, TSet< FVolumetricMeshBatch > &HeterogeneousVolumesMeshBatches, FBoxSphereBounds::Builder &WorldBoundsBuilder)
 
bool RenderVolumetricShadowMapForLightForHeterogeneousVolumeWithLiveShading (FRDGBuilder &GraphBuilder, const FSceneTextures &SceneTextures, FScene *Scene, FViewInfo &View, uint32 LightType, const FLightSceneInfo *LightSceneInfo, const FVisibleLightInfo *VisibleLightInfo, HeterogeneousVolumes::EShadowType ShadowType, HeterogeneousVolumes::FLODInfo LODInfo, const FVector3f *TranslatedWorldOrigin, int32 NumShadowMatrices, FMatrix44f *TranslatedWorldToShadow, FMatrix44f *ShadowToTranslatedWorld, FIntPoint ShadowMapResolution, uint32 MaxSampleCount, float MaxShadowTraceDistance, bool bUseCameraSceneDepth, const FVolumetricMeshBatch &VolumetricMeshBatch, FIntVector &GroupCount, FRDGTextureRef &BeerShadowMapTexture, FRDGBufferRef &VolumetricShadowLinkedListBuffer)
 
FVector FloorToDouble (const FVector Vec)
 
TArray< FVectorGetFrustumVertices (const FMatrix &ClipToWorld)
 
TArray< FVectorTransformVertices (const TArray< FVector > &Vertices, const FMatrix &ToMatrix)
 
bool RenderVolumetricShadowMapForLightWithLiveShading (FRDGBuilder &GraphBuilder, const FSceneTextures &SceneTextures, FScene *Scene, FViewInfo &View, uint32 LightType, const FLightSceneInfo *LightSceneInfo, const FVisibleLightInfo *VisibleLightInfo, bool &bIsDirectionalLight, FVector3f *TranslatedWorldOrigin, FVector4f *TranslatedWorldPlane, FMatrix44f *TranslatedWorldToShadow, FVector4f *SplitDepths, FIntVector &GroupCount, int32 &NumShadowMatrices, FIntPoint &ShadowMapResolution, uint32 &MaxSampleCount, FRDGTextureRef &BeerShadowMapTexture, FRDGBufferRef &VolumetricShadowLinkedListBuffer)
 
void RenderAdaptiveVolumetricShadowMapWithLiveShading (FRDGBuilder &GraphBuilder, const FSceneTextures &SceneTextures, FScene *Scene, FViewInfo &View, TArray< FVisibleLightInfo, SceneRenderingAllocator > &VisibleLightInfos)
 
void RenderAdaptiveVolumetricCameraMapWithLiveShading (FRDGBuilder &GraphBuilder, const FSceneTextures &SceneTextures, FScene *Scene, FViewInfo &View)
 
 IMPLEMENT_GLOBAL_SHADER (FRenderVolumetricShadowMaskCS, "/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesShadowMask.usf", "RenderVolumetricShadowMaskCS", SF_Compute)
 
bool RenderVolumetricShadowMaskForLight (FRDGBuilder &GraphBuilder, const FViewInfo &View, const FLightSceneInfo *LightSceneInfo, FRDGTextureRef ShadowMaskTexture, FRDGTextureRef &VolumetricShadowMaskTexture)
 
 DECLARE_GPU_STAT_NAMED (VolumetricShadowMask, TEXT("Volumetric Shadow Mask"))
 
bool ShouldRenderVolumetricShadowMaskForLight (FRDGBuilder &GraphBuilder, const TConstArrayView< FViewInfo > &Views, const FLightSceneInfo *LightSceneInfo)
 
void RenderVolumetricShadowMaskForLight (FRDGBuilder &GraphBuilder, const FSceneTexturesConfig &Config, const TConstArrayView< FViewInfo > &Views, uint32 LightType, const FLightSceneInfo *LightSceneInfo, FRDGTextureRef &ScreenShadowMaskTexture)
 

Typedef Documentation

◆ FRenderSingleScatteringWithLiveShadingDirectCS

◆ FRenderSingleScatteringWithLiveShadingIndirectCS

Function Documentation

◆ AddComputePass()

void AddComputePass ( FRDGBuilder GraphBuilder,
TShaderRef< ComputeShaderType > &  ComputeShader,
typename ComputeShaderType::FParameters *  PassParameters,
const FScene Scene,
const FMaterialRenderProxy MaterialRenderProxy,
const FMaterial Material,
const FString &  PassName,
FIntVector  GroupCount,
FRDGBufferRef  IndirectArgsBuffer,
uint32  IndirectArgOffset 
)

◆ ClearVolumetricShadowMap()

void ClearVolumetricShadowMap ( FRDGBuilder GraphBuilder,
const FScene Scene,
const FViewInfo View,
FIntPoint  ShadowMapResolution,
FIntVector GroupCount,
FRDGBufferRef VolumetricShadowLinkedListBuffer 
)

◆ CollectHeterogeneousVolumeMeshBatchesForLightWithShadowIndex()

void CollectHeterogeneousVolumeMeshBatchesForLightWithShadowIndex ( const FLightSceneInfo LightSceneInfo,
const FVisibleLightInfo VisibleLightInfo,
int32  ShadowIndexDiscard,
const FViewInfo View,
TSet< FVolumetricMeshBatch > &  HeterogeneousVolumesMeshBatches,
FBoxSphereBounds::Builder WorldBoundsBuilder 
)

◆ CollectHeterogeneousVolumeMeshBatchesForView()

void CollectHeterogeneousVolumeMeshBatchesForView ( const FViewInfo View,
bool  bCollectForShadowCasting,
TSet< FVolumetricMeshBatch > &  HeterogeneousVolumesMeshBatches,
FBoxSphereBounds::Builder WorldBoundsBuilder 
)

◆ CreateAdaptiveVolumetricShadowMapUniformBuffers()

TRDGUniformBufferRef< FAdaptiveVolumetricShadowMaps > CreateAdaptiveVolumetricShadowMapUniformBuffers ( FRDGBuilder GraphBuilder,
FSceneViewState ViewState,
const FLightSceneInfo LightSceneInfo 
)

◆ DECLARE_GPU_STAT_NAMED()

DECLARE_GPU_STAT_NAMED ( VolumetricShadowMask  ,
TEXT("Volumetric Shadow Mask"  
)

◆ FloorToDouble()

FVector FloorToDouble ( const FVector  Vec)

◆ GetAdaptiveVolumetricShadowMapParametersFromUniformBuffer()

FAdaptiveVolumetricShadowMapParameters GetAdaptiveVolumetricShadowMapParametersFromUniformBuffer ( const TRDGUniformBufferRef< FAdaptiveVolumetricShadowMapUniformBufferParameters > &  UniformBuffer)

◆ GetFrustumVertices()

TArray< FVector > GetFrustumVertices ( const FMatrix ClipToWorld)

◆ IMPLEMENT_GLOBAL_SHADER() [1/3]

IMPLEMENT_GLOBAL_SHADER ( FClearVolumetricShadowMapCS  ,
"/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesVoxelGridShadows.usf"  ,
"ClearVolumetricShadowMapCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [2/3]

IMPLEMENT_GLOBAL_SHADER ( FRenderVolumetricShadowMaskCS  ,
"/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesShadowMask.usf"  ,
"RenderVolumetricShadowMaskCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [3/3]

IMPLEMENT_GLOBAL_SHADER ( FScreenTileClassificationCS  ,
"/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesLiveShadingGlobalPipeline.usf"  ,
"ScreenTileClassificationCS"  ,
SF_Compute   
)

◆ IMPLEMENT_MATERIAL_SHADER_TYPE() [1/3]

IMPLEMENT_MATERIAL_SHADER_TYPE ( FRenderLightingCacheWithLiveShadingCS  ,
TEXT("/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesLiveShadingPipeline.usf" ,
TEXT("RenderLightingCacheWithLiveShadingCS")  ,
SF_Compute   
)

◆ IMPLEMENT_MATERIAL_SHADER_TYPE() [2/3]

IMPLEMENT_MATERIAL_SHADER_TYPE ( FRenderVolumetricShadowMapForLightWithLiveShadingCS  ,
TEXT("/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesLiveShadingShadows.usf" ,
TEXT("RenderVolumetricShadowMapForLightWithLiveShadingCS")  ,
SF_Compute   
)

◆ IMPLEMENT_MATERIAL_SHADER_TYPE() [3/3]

IMPLEMENT_MATERIAL_SHADER_TYPE ( template<>  ,
FRenderSingleScatteringWithLiveShadingDirectCS  ,
TEXT("/Engine/Private/HeterogeneousVolumes/HeterogeneousVolumesLiveShadingPipeline.usf" ,
TEXT("RenderSingleScatteringWithLiveShadingCS")  ,
SF_Compute   
)

◆ IMPLEMENT_TYPE_LAYOUT() [1/2]

IMPLEMENT_TYPE_LAYOUT ( FRenderLightingCacheLooseBindings  )

◆ IMPLEMENT_TYPE_LAYOUT() [2/2]

IMPLEMENT_TYPE_LAYOUT ( FRenderShadowMapLooseBindings  )

◆ IMPLEMENT_UNIFORM_BUFFER_STRUCT()

IMPLEMENT_UNIFORM_BUFFER_STRUCT ( FAdaptiveVolumetricShadowMaps  ,
"AVSMs"   
)

◆ RenderAdaptiveVolumetricCameraMapWithLiveShading()

void RenderAdaptiveVolumetricCameraMapWithLiveShading ( FRDGBuilder GraphBuilder,
const FSceneTextures SceneTextures,
FScene Scene,
FViewInfo View 
)

◆ RenderAdaptiveVolumetricShadowMapWithLiveShading()

void RenderAdaptiveVolumetricShadowMapWithLiveShading ( FRDGBuilder GraphBuilder,
const FSceneTextures SceneTextures,
FScene Scene,
FViewInfo View,
TArray< FVisibleLightInfo, SceneRenderingAllocator > &  VisibleLightInfos 
)

◆ RenderSingleScatteringWithLiveShading()

template<HeterogeneousVolumes::EDispatchMode DispatchMode>
void RenderSingleScatteringWithLiveShading ( FRDGBuilder GraphBuilder,
const FScene Scene,
const FViewInfo View,
int32  ViewIndex,
const FSceneTextures SceneTextures,
bool  bApplyEmissionAndTransmittance,
bool  bApplyDirectLighting,
bool  bApplyShadowTransmittance,
uint32  LightType,
const FLightSceneInfo LightSceneInfo,
const FVisibleLightInfo VisibleLightInfo,
const FVirtualShadowMapArray VirtualShadowMapArray,
const IHeterogeneousVolumeInterface HeterogeneousVolumeInterface,
const FMaterialRenderProxy DefaultMaterialRenderProxy,
FPersistentPrimitiveIndex  PersistentPrimitiveIndex,
const FBoxSphereBounds  LocalBoxSphereBounds,
FRDGTextureRef  LightingCacheTexture,
FRDGTextureRef  AmbientOcclusionTexture,
FRDGTextureRef HeterogeneousVolumeRadianceTexture,
FRDGTextureRef HeterogeneousVolumeVelocityTexture,
FRDGTextureRef HeterogeneousVolumeHoldoutTexture,
FRDGTextureRef HeterogeneousVolumeBeerShadowMapTexture 
)

◆ RenderVolumetricShadowMapForLightForHeterogeneousVolumeWithLiveShading()

bool RenderVolumetricShadowMapForLightForHeterogeneousVolumeWithLiveShading ( FRDGBuilder GraphBuilder,
const FSceneTextures SceneTextures,
FScene Scene,
FViewInfo View,
uint32  LightType,
const FLightSceneInfo LightSceneInfo,
const FVisibleLightInfo VisibleLightInfo,
HeterogeneousVolumes::EShadowType  ShadowType,
HeterogeneousVolumes::FLODInfo  LODInfo,
const FVector3f TranslatedWorldOrigin,
int32  NumShadowMatrices,
FMatrix44f TranslatedWorldToShadow,
FMatrix44f ShadowToTranslatedWorld,
FIntPoint  ShadowMapResolution,
uint32  MaxSampleCount,
float  MaxShadowTraceDistance,
bool  bUseCameraSceneDepth,
const FVolumetricMeshBatch VolumetricMeshBatch,
FIntVector GroupCount,
FRDGTextureRef BeerShadowMapTexture,
FRDGBufferRef VolumetricShadowLinkedListBuffer 
)

◆ RenderVolumetricShadowMapForLightWithLiveShading()

bool RenderVolumetricShadowMapForLightWithLiveShading ( FRDGBuilder GraphBuilder,
const FSceneTextures SceneTextures,
FScene Scene,
FViewInfo View,
uint32  LightType,
const FLightSceneInfo LightSceneInfo,
const FVisibleLightInfo VisibleLightInfo,
bool bIsDirectionalLight,
FVector3f TranslatedWorldOrigin,
FVector4f TranslatedWorldPlane,
FMatrix44f TranslatedWorldToShadow,
FVector4f SplitDepths,
FIntVector GroupCount,
int32 NumShadowMatrices,
FIntPoint ShadowMapResolution,
uint32 MaxSampleCount,
FRDGTextureRef BeerShadowMapTexture,
FRDGBufferRef VolumetricShadowLinkedListBuffer 
)

◆ RenderVolumetricShadowMaskForLight() [1/2]

void RenderVolumetricShadowMaskForLight ( FRDGBuilder GraphBuilder,
const FSceneTexturesConfig Config,
const TConstArrayView< FViewInfo > &  Views,
uint32  LightType,
const FLightSceneInfo LightSceneInfo,
FRDGTextureRef ScreenShadowMaskTexture 
)

◆ RenderVolumetricShadowMaskForLight() [2/2]

bool RenderVolumetricShadowMaskForLight ( FRDGBuilder GraphBuilder,
const FViewInfo View,
const FLightSceneInfo LightSceneInfo,
FRDGTextureRef  ShadowMaskTexture,
FRDGTextureRef VolumetricShadowMaskTexture 
)

◆ RenderWithLiveShading()

void RenderWithLiveShading ( FRDGBuilder GraphBuilder,
const FSceneTextures SceneTextures,
const FScene Scene,
const FViewInfo View,
int32  ViewIndex,
TArray< FVisibleLightInfo, SceneRenderingAllocator > &  VisibleLightInfos,
const FVirtualShadowMapArray VirtualShadowMapArray,
const IHeterogeneousVolumeInterface HeterogeneousVolumeInterface,
const FMaterialRenderProxy MaterialRenderProxy,
const FPersistentPrimitiveIndex PersistentPrimitiveIndex,
const FBoxSphereBounds  LocalBoxSphereBounds,
FRDGTextureRef  LightingCacheTexture,
FRDGTextureRef HeterogeneousVolumeRadiance,
FRDGTextureRef HeterogeneousVolumeVelocity,
FRDGTextureRef HeterogeneousVolumeHoldout,
FRDGTextureRef HeterogeneousVolumeBeerShadowMap 
)

◆ ShouldRenderVolumetricShadowMaskForLight()

bool ShouldRenderVolumetricShadowMaskForLight ( FRDGBuilder GraphBuilder,
const TConstArrayView< FViewInfo > &  Views,
const FLightSceneInfo LightSceneInfo 
)

◆ TransformVertices()

TArray< FVector > TransformVertices ( const TArray< FVector > &  Vertices,
const FMatrix ToMatrix 
)