UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LumenScreenProbeFiltering.cpp File Reference

Classes

class  FScreenProbeCompositeTracesWithScatterCS
 
class  FScreenProbeTemporallyAccumulateTraceRadianceCS
 
class  FScreenProbeFilterGatherTracesCS
 
class  FScreenProbeConvertToIrradianceCS
 
class  FScreenProbeCalculateMovingCS
 
class  FScreenProbeFixupBordersCS
 
class  FScreenProbeGenerateMipLevelCS
 

Functions

FAutoConsoleVariableRef GVarLumenScreenProbeSpatialFilterNumPasses (TEXT("r.Lumen.ScreenProbeGather.SpatialFilterNumPasses"), GLumenScreenProbeSpatialFilterNumPasses, TEXT("Number of spatial filter passes"), ECVF_Scalability|ECVF_RenderThreadSafe)
 
FAutoConsoleVariableRef GVarLumenScreenProbeSpatialFilterHalfKernelSize (TEXT("r.Lumen.ScreenProbeGather.SpatialFilterHalfKernelSize"), GLumenScreenProbeSpatialFilterHalfKernelSize, TEXT("Experimental"), ECVF_Scalability|ECVF_RenderThreadSafe)
 
FAutoConsoleVariableRef GVarLumenScreenProbeFilterMaxRadianceHitAngle (TEXT("r.Lumen.ScreenProbeGather.SpatialFilterMaxRadianceHitAngle"), GLumenScreenProbeFilterMaxRadianceHitAngle, TEXT("In Degrees. Larger angles allow more filtering but lose contact shadows."), ECVF_Scalability|ECVF_RenderThreadSafe)
 
FAutoConsoleVariableRef GVarLumenScreenFilterPositionWeightScale (TEXT("r.Lumen.ScreenProbeGather.SpatialFilterPositionWeightScale"), GLumenScreenFilterPositionWeightScale, TEXT("Determines how far probes can be in world space while still filtering lighting"), ECVF_Scalability|ECVF_RenderThreadSafe)
 
FAutoConsoleVariableRef GVarLumenScreenProbeGatherNumMips (TEXT("r.Lumen.ScreenProbeGather.GatherNumMips"), GLumenScreenProbeGatherNumMips, TEXT("Number of mip maps to prepare for diffuse integration"), ECVF_Scalability|ECVF_RenderThreadSafe)
 
FAutoConsoleVariableRef GVarLumenScreenProbeGatherMaxRayIntensity (TEXT("r.Lumen.ScreenProbeGather.MaxRayIntensity"), GLumenScreenProbeGatherMaxRayIntensity, TEXT("Clamps the maximum ray lighting intensity (with PreExposure) to reduce fireflies. Lower values reduce noise, but also remove some interesting GI features."), ECVF_Scalability|ECVF_RenderThreadSafe)
 
 IMPLEMENT_GLOBAL_SHADER (FScreenProbeCompositeTracesWithScatterCS, "/Engine/Private/Lumen/LumenScreenProbeFiltering.usf", "ScreenProbeCompositeTracesWithScatterCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FScreenProbeTemporallyAccumulateTraceRadianceCS, "/Engine/Private/Lumen/LumenScreenProbeFiltering.usf", "ScreenProbeTemporallyAccumulateTraceRadianceCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FScreenProbeFilterGatherTracesCS, "/Engine/Private/Lumen/LumenScreenProbeFiltering.usf", "ScreenProbeFilterGatherTracesCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FScreenProbeConvertToIrradianceCS, "/Engine/Private/Lumen/LumenScreenProbeFiltering.usf", "ScreenProbeConvertToIrradianceCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FScreenProbeCalculateMovingCS, "/Engine/Private/Lumen/LumenScreenProbeFiltering.usf", "ScreenProbeCalculateMovingCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FScreenProbeFixupBordersCS, "/Engine/Private/Lumen/LumenScreenProbeFiltering.usf", "ScreenProbeFixupBordersCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FScreenProbeGenerateMipLevelCS, "/Engine/Private/Lumen/LumenScreenProbeFiltering.usf", "ScreenProbeGenerateMipLevelCS", SF_Compute)
 
void FilterScreenProbes (FRDGBuilder &GraphBuilder, const FViewInfo &View, const FSceneTextures &SceneTextures, const FScreenProbeParameters &ScreenProbeParameters, FScreenProbeGatherParameters &GatherParameters, ERDGPassFlags ComputePassFlags)
 

Variables

int32 GLumenScreenProbeSpatialFilterNumPasses = 3
 
int32 GLumenScreenProbeSpatialFilterHalfKernelSize = 1
 
float GLumenScreenProbeFilterMaxRadianceHitAngle = 10.0f
 
float GLumenScreenFilterPositionWeightScale = 1000.0f
 
int32 GLumenScreenProbeGatherNumMips = 1
 
float GLumenScreenProbeGatherMaxRayIntensity = 10.0f
 
float GLumenScreenProbeTemporalFilterProbesHistoryDistanceThreshold = 30
 
FAutoConsoleVariableRef CVarLumenScreenProbeTemporalFilterProbesHistoryDistanceThreshold (TEXT("r.Lumen.ScreenProbeGather.TemporalFilterProbes.HistoryDistanceThreshold"), GLumenScreenProbeTemporalFilterProbesHistoryDistanceThreshold, TEXT(""), ECVF_RenderThreadSafe)
 
float GLumenScreenProbeTemporalFilterProbesHistoryWeight = .5f
 
FAutoConsoleVariableRef CVarLumenScreenProbeTemporalFilterProbesHistoryWeight (TEXT("r.Lumen.ScreenProbeGather.TemporalFilterProbes.HistoryWeight"), GLumenScreenProbeTemporalFilterProbesHistoryWeight, TEXT(""), ECVF_RenderThreadSafe)
 
int32 GLumenScreenProbeTemporalDebugForceTracesMoving = 0
 
FAutoConsoleVariableRef CVarLumenScreenProbeTemporalForceTracesMoving (TEXT("r.Lumen.ScreenProbeGather.Temporal.DebugForceTracesMoving"), GLumenScreenProbeTemporalDebugForceTracesMoving, TEXT(""), ECVF_RenderThreadSafe)
 
int32 GLumenScreenProbeFilteringWaveOps = 1
 
FAutoConsoleVariableRef CVarLumenScreenProbeFilteringWaveOps (TEXT("r.Lumen.ScreenProbeGather.Filtering.WaveOps"), GLumenScreenProbeFilteringWaveOps, TEXT("Whether to use Wave Ops path for screen probe filtering."), ECVF_RenderThreadSafe)
 

Function Documentation

◆ FilterScreenProbes()

void FilterScreenProbes ( FRDGBuilder GraphBuilder,
const FViewInfo View,
const FSceneTextures SceneTextures,
const FScreenProbeParameters ScreenProbeParameters,
FScreenProbeGatherParameters GatherParameters,
ERDGPassFlags  ComputePassFlags 
)

◆ GVarLumenScreenFilterPositionWeightScale()

FAutoConsoleVariableRef GVarLumenScreenFilterPositionWeightScale ( TEXT("r.Lumen.ScreenProbeGather.SpatialFilterPositionWeightScale")  ,
GLumenScreenFilterPositionWeightScale  ,
TEXT("Determines how far probes can be in world space while still filtering lighting" ,
ECVF_Scalability ECVF_RenderThreadSafe 
)

◆ GVarLumenScreenProbeFilterMaxRadianceHitAngle()

FAutoConsoleVariableRef GVarLumenScreenProbeFilterMaxRadianceHitAngle ( TEXT("r.Lumen.ScreenProbeGather.SpatialFilterMaxRadianceHitAngle")  ,
GLumenScreenProbeFilterMaxRadianceHitAngle  ,
TEXT("In Degrees. Larger angles allow more filtering but lose contact shadows." ,
ECVF_Scalability ECVF_RenderThreadSafe 
)

◆ GVarLumenScreenProbeGatherMaxRayIntensity()

FAutoConsoleVariableRef GVarLumenScreenProbeGatherMaxRayIntensity ( TEXT("r.Lumen.ScreenProbeGather.MaxRayIntensity")  ,
GLumenScreenProbeGatherMaxRayIntensity  ,
TEXT("Clamps the maximum ray lighting intensity (with PreExposure) to reduce fireflies. Lower values reduce noise, but also remove some interesting GI features." ,
ECVF_Scalability ECVF_RenderThreadSafe 
)

◆ GVarLumenScreenProbeGatherNumMips()

FAutoConsoleVariableRef GVarLumenScreenProbeGatherNumMips ( TEXT("r.Lumen.ScreenProbeGather.GatherNumMips")  ,
GLumenScreenProbeGatherNumMips  ,
TEXT("Number of mip maps to prepare for diffuse integration" ,
ECVF_Scalability ECVF_RenderThreadSafe 
)

◆ GVarLumenScreenProbeSpatialFilterHalfKernelSize()

FAutoConsoleVariableRef GVarLumenScreenProbeSpatialFilterHalfKernelSize ( TEXT("r.Lumen.ScreenProbeGather.SpatialFilterHalfKernelSize")  ,
GLumenScreenProbeSpatialFilterHalfKernelSize  ,
TEXT("Experimental")  ,
ECVF_Scalability ECVF_RenderThreadSafe 
)

◆ GVarLumenScreenProbeSpatialFilterNumPasses()

FAutoConsoleVariableRef GVarLumenScreenProbeSpatialFilterNumPasses ( TEXT("r.Lumen.ScreenProbeGather.SpatialFilterNumPasses")  ,
GLumenScreenProbeSpatialFilterNumPasses  ,
TEXT("Number of spatial filter passes" ,
ECVF_Scalability ECVF_RenderThreadSafe 
)

◆ IMPLEMENT_GLOBAL_SHADER() [1/7]

IMPLEMENT_GLOBAL_SHADER ( FScreenProbeCalculateMovingCS  ,
"/Engine/Private/Lumen/LumenScreenProbeFiltering.usf"  ,
"ScreenProbeCalculateMovingCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [2/7]

IMPLEMENT_GLOBAL_SHADER ( FScreenProbeCompositeTracesWithScatterCS  ,
"/Engine/Private/Lumen/LumenScreenProbeFiltering.usf"  ,
"ScreenProbeCompositeTracesWithScatterCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [3/7]

IMPLEMENT_GLOBAL_SHADER ( FScreenProbeConvertToIrradianceCS  ,
"/Engine/Private/Lumen/LumenScreenProbeFiltering.usf"  ,
"ScreenProbeConvertToIrradianceCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [4/7]

IMPLEMENT_GLOBAL_SHADER ( FScreenProbeFilterGatherTracesCS  ,
"/Engine/Private/Lumen/LumenScreenProbeFiltering.usf"  ,
"ScreenProbeFilterGatherTracesCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [5/7]

IMPLEMENT_GLOBAL_SHADER ( FScreenProbeFixupBordersCS  ,
"/Engine/Private/Lumen/LumenScreenProbeFiltering.usf"  ,
"ScreenProbeFixupBordersCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [6/7]

IMPLEMENT_GLOBAL_SHADER ( FScreenProbeGenerateMipLevelCS  ,
"/Engine/Private/Lumen/LumenScreenProbeFiltering.usf"  ,
"ScreenProbeGenerateMipLevelCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [7/7]

IMPLEMENT_GLOBAL_SHADER ( FScreenProbeTemporallyAccumulateTraceRadianceCS  ,
"/Engine/Private/Lumen/LumenScreenProbeFiltering.usf"  ,
"ScreenProbeTemporallyAccumulateTraceRadianceCS"  ,
SF_Compute   
)

Variable Documentation

◆ CVarLumenScreenProbeFilteringWaveOps

FAutoConsoleVariableRef CVarLumenScreenProbeFilteringWaveOps(TEXT("r.Lumen.ScreenProbeGather.Filtering.WaveOps"), GLumenScreenProbeFilteringWaveOps, TEXT("Whether to use Wave Ops path for screen probe filtering."), ECVF_RenderThreadSafe) ( TEXT("r.Lumen.ScreenProbeGather.Filtering.WaveOps")  ,
GLumenScreenProbeFilteringWaveOps  ,
TEXT("Whether to use Wave Ops path for screen probe filtering." ,
ECVF_RenderThreadSafe   
)

◆ CVarLumenScreenProbeTemporalFilterProbesHistoryDistanceThreshold

FAutoConsoleVariableRef CVarLumenScreenProbeTemporalFilterProbesHistoryDistanceThreshold(TEXT("r.Lumen.ScreenProbeGather.TemporalFilterProbes.HistoryDistanceThreshold"), GLumenScreenProbeTemporalFilterProbesHistoryDistanceThreshold, TEXT(""), ECVF_RenderThreadSafe) ( TEXT("r.Lumen.ScreenProbeGather.TemporalFilterProbes.HistoryDistanceThreshold")  ,
GLumenScreenProbeTemporalFilterProbesHistoryDistanceThreshold  ,
TEXT("")  ,
ECVF_RenderThreadSafe   
)

◆ CVarLumenScreenProbeTemporalFilterProbesHistoryWeight

FAutoConsoleVariableRef CVarLumenScreenProbeTemporalFilterProbesHistoryWeight(TEXT("r.Lumen.ScreenProbeGather.TemporalFilterProbes.HistoryWeight"), GLumenScreenProbeTemporalFilterProbesHistoryWeight, TEXT(""), ECVF_RenderThreadSafe) ( TEXT("r.Lumen.ScreenProbeGather.TemporalFilterProbes.HistoryWeight")  ,
GLumenScreenProbeTemporalFilterProbesHistoryWeight  ,
TEXT("")  ,
ECVF_RenderThreadSafe   
)

◆ CVarLumenScreenProbeTemporalForceTracesMoving

FAutoConsoleVariableRef CVarLumenScreenProbeTemporalForceTracesMoving(TEXT("r.Lumen.ScreenProbeGather.Temporal.DebugForceTracesMoving"), GLumenScreenProbeTemporalDebugForceTracesMoving, TEXT(""), ECVF_RenderThreadSafe) ( TEXT("r.Lumen.ScreenProbeGather.Temporal.DebugForceTracesMoving")  ,
GLumenScreenProbeTemporalDebugForceTracesMoving  ,
TEXT("")  ,
ECVF_RenderThreadSafe   
)

◆ GLumenScreenFilterPositionWeightScale

float GLumenScreenFilterPositionWeightScale = 1000.0f

◆ GLumenScreenProbeFilteringWaveOps

int32 GLumenScreenProbeFilteringWaveOps = 1

◆ GLumenScreenProbeFilterMaxRadianceHitAngle

float GLumenScreenProbeFilterMaxRadianceHitAngle = 10.0f

◆ GLumenScreenProbeGatherMaxRayIntensity

float GLumenScreenProbeGatherMaxRayIntensity = 10.0f

◆ GLumenScreenProbeGatherNumMips

int32 GLumenScreenProbeGatherNumMips = 1

◆ GLumenScreenProbeSpatialFilterHalfKernelSize

int32 GLumenScreenProbeSpatialFilterHalfKernelSize = 1

◆ GLumenScreenProbeSpatialFilterNumPasses

int32 GLumenScreenProbeSpatialFilterNumPasses = 3

◆ GLumenScreenProbeTemporalDebugForceTracesMoving

int32 GLumenScreenProbeTemporalDebugForceTracesMoving = 0

◆ GLumenScreenProbeTemporalFilterProbesHistoryDistanceThreshold

float GLumenScreenProbeTemporalFilterProbesHistoryDistanceThreshold = 30

◆ GLumenScreenProbeTemporalFilterProbesHistoryWeight

float GLumenScreenProbeTemporalFilterProbesHistoryWeight = .5f