ShowFlag.LumenReflections
ShowFlag.LumenReflections
#Overview
name: ShowFlag.LumenReflections
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Allows to override a specific showflag (works in editor and game, \
It is referenced in 11
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of ShowFlag.LumenReflections is to control the visibility and rendering of Lumen reflections in Unreal Engine 5. This setting variable is part of the Lumen global illumination system, specifically for the reflection component.
-
This variable is primarily used by the rendering system, particularly the Lumen reflection subsystem within Unreal Engine 5.
-
The Lumen reflection system and related modules rely on this setting variable. It’s used in various parts of the renderer, including the main Lumen reflection rendering pass, front layer translucency, and radiance cache systems.
-
The value of this variable is typically set through the engine’s show flags system, which allows developers and users to toggle various rendering features on and off.
-
Several other variables and systems interact with it:
- It’s often used in conjunction with other Lumen settings and reflection-related variables.
- It’s checked alongside other conditions to determine if Lumen reflections should be rendered.
-
Developers should be aware that:
- This flag controls the visibility of Lumen reflections at a high level.
- It’s part of the View’s EngineShowFlags, meaning it can be toggled per-view.
- Disabling this flag will prevent Lumen reflections from rendering, even if other conditions for rendering reflections are met.
-
Best practices when using this variable:
- Use it as a high-level control for enabling/disabling Lumen reflections.
- Be aware that it interacts with other Lumen and reflection settings.
- Consider performance implications when enabling/disabling Lumen reflections.
The associated variable LumenReflections shares the same value and purpose. It’s used interchangeably with ShowFlag.LumenReflections in the codebase. The same considerations and best practices apply to this variable as well.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:147
Scope: file
Source code excerpt:
/** If screen space reflections are enabled, for now SHOWFLAG_ALWAYS_ACCESSIBLE because it's exposed in SceneCapture */
SHOWFLAG_ALWAYS_ACCESSIBLE(ScreenSpaceReflections, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "ScreenSpaceReflectionsSF", "Screen Space Reflections"))
SHOWFLAG_ALWAYS_ACCESSIBLE(LumenReflections, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "LumenReflectionsSF", "Lumen Reflections"))
/** If Screen space contact shadows are enabled. */
SHOWFLAG_ALWAYS_ACCESSIBLE(ContactShadows, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "ContactShadows", "Screen Space Contact Shadows"))
/** If RTDF shadows are enabled. */
SHOWFLAG_ALWAYS_ACCESSIBLE(RayTracedDistanceFieldShadows, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "RayTracedDistanceFieldShadows", "Distance Field Shadows"))
/** If Capsule shadows are enabled. */
SHOWFLAG_ALWAYS_ACCESSIBLE(CapsuleShadows, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "CapsuleShadows", "Capsule Shadows"))
#Loc: <Workspace>/Engine/Plugins/Experimental/CinematicPrestreaming/Source/CinematicPrestreamingEditor/Private/CinePrestreamingRecorderSetting.cpp:33
Scope (from outer to inner):
file
function UCinePrestreamingRecorderSetting::UCinePrestreamingRecorderSetting
Source code excerpt:
ShowFlagsToDisable.Add("ShowFlag.VolumetricLightmap");
ShowFlagsToDisable.Add("ShowFlag.LumenGlobalIllumiination");
ShowFlagsToDisable.Add("ShowFlag.LumenReflections");
ShowFlagsToDisable.Add("ShowFlag.AmbientOcclusion");
ShowFlagsToDisable.Add("ShowFlag.DistanceFieldAO");
}
void UCinePrestreamingRecorderSetting::SetupForPipelineImpl(UMoviePipeline* InPipeline)
{
#Associated Variable and Callsites
This variable is associated with another variable named LumenReflections
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:147
Scope: file
Source code excerpt:
/** If screen space reflections are enabled, for now SHOWFLAG_ALWAYS_ACCESSIBLE because it's exposed in SceneCapture */
SHOWFLAG_ALWAYS_ACCESSIBLE(ScreenSpaceReflections, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "ScreenSpaceReflectionsSF", "Screen Space Reflections"))
SHOWFLAG_ALWAYS_ACCESSIBLE(LumenReflections, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "LumenReflectionsSF", "Lumen Reflections"))
/** If Screen space contact shadows are enabled. */
SHOWFLAG_ALWAYS_ACCESSIBLE(ContactShadows, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "ContactShadows", "Screen Space Contact Shadows"))
/** If RTDF shadows are enabled. */
SHOWFLAG_ALWAYS_ACCESSIBLE(RayTracedDistanceFieldShadows, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "RayTracedDistanceFieldShadows", "Distance Field Shadows"))
/** If Capsule shadows are enabled. */
SHOWFLAG_ALWAYS_ACCESSIBLE(CapsuleShadows, SFG_LightingFeatures, NSLOCTEXT("UnrealEd", "CapsuleShadows", "Capsule Shadows"))
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Lumen/LumenFrontLayerTranslucency.cpp:54
Scope (from outer to inner):
file
namespace Lumen
function bool UseLumenFrontLayerTranslucencyReflections
Source code excerpt:
return (View.FinalPostProcessSettings.LumenFrontLayerTranslucencyReflections || GLumenFrontLayerTranslucencyReflectionsEnabled)
&& GLumenFrontLayerTranslucencyReflectionsAllowed != 0
&& View.Family->EngineShowFlags.LumenReflections;
}
bool ShouldRenderInFrontLayerTranslucencyGBufferPass(bool bShouldRenderInMainPass, const FMaterial& Material)
{
return bShouldRenderInMainPass
&& ShouldIncludeDomainInMeshPass(Material.GetMaterialDomain())
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Lumen/LumenReflectionHardwareRayTracing.cpp:125
Scope (from outer to inner):
file
function class FLumenReflectionHardwareRayTracing : public FLumenHardwareRayTracingShaderBase { /*ARE_LUMEN_RAYTRACING_SHADER
class class FLumenReflectionHardwareRayTracing : public FLumenHardwareRayTracingShaderBase
Source code excerpt:
DECLARE_LUMEN_RAYTRACING_SHADER(FLumenReflectionHardwareRayTracing, Lumen::ERayTracingShaderDispatchSize::DispatchSize1D)
class FRayTracingPass : SHADER_PERMUTATION_ENUM_CLASS("RAY_TRACING_PASS", LumenReflections::ERayTracingPass);
class FWriteDataForHitLightingPass : SHADER_PERMUTATION_BOOL("WRITE_DATA_FOR_HIT_LIGHTING_PASS");
class FRadianceCache : SHADER_PERMUTATION_BOOL("DIM_RADIANCE_CACHE");
class FHairStrandsOcclusionDim : SHADER_PERMUTATION_BOOL("DIM_HAIRSTRANDS_VOXEL");
class FRecursiveReflectionTraces : SHADER_PERMUTATION_BOOL("RECURSIVE_REFLECTION_TRACES");
class FRecursiveRefractionTraces : SHADER_PERMUTATION_BOOL("RECURSIVE_REFRACTION_TRACES");
using FPermutationDomain = TShaderPermutationDomain<FLumenHardwareRayTracingShaderBase::FBasePermutationDomain, FRayTracingPass, FWriteDataForHitLightingPass, FRadianceCache, FHairStrandsOcclusionDim, FRecursiveReflectionTraces, FRecursiveRefractionTraces>;
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Lumen/LumenReflectionHardwareRayTracing.cpp:161
Scope (from outer to inner):
file
function class FLumenReflectionHardwareRayTracing : public FLumenHardwareRayTracingShaderBase { /*ARE_LUMEN_RAYTRACING_SHADER
class class FLumenReflectionHardwareRayTracing : public FLumenHardwareRayTracingShaderBase
function class FWriteDataForHitLightingPass : SHADER_PERMUTATION_BOOL
class class FWriteDataForHitLightingPass : SHADER_PERMUTATION_BOOL("WRITE_DATA_FOR_HIT_LIGHTING_PASS"); class FRadianceCache : SHADER_PERMUTATION_BOOL("DIM_RADIANCE_CACHE"); class FHairStrandsOcclusionDim : SHADER_PERMUTATION_BOOL("DIM_HAIRSTRANDS_VOXEL"); class FRecursiveReflectionTraces : SHADER_PERMUTATION_BOOL("RECURSIVE_REFLECTION_TRACES"); class FRecursiveRefractionTraces : SHADER_PERMUTATION_BOOL("RECURSIVE_REFRACTION_TRACES"); using FPermutationDomain = TShaderPermutationDomain<FLumenHardwareRayTracingShaderBase::FBasePermutationDomain, FRayTracingPass, FWriteDataForHitLightingPass, FRadianceCache, FHairStrandsOcclusionDim, FRecursiveReflectionTraces, FRecursiveRefractionTraces>; BEGIN_SHADER_PARAMETER_STRUCT(FParameters, ) SHADER_PARAMETER_STRUCT_INCLUDE(FLumenHardwareRayTracingShaderBase::FSharedParameters, SharedParameters) RDG_BUFFER_ACCESS(HardwareRayTracingIndirectArgs, ERHIAccess::IndirectArgs | ERHIAccess::SRVCompute) SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, CompactedTraceTexelAllocator) SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, CompactedTraceTexelData) SHADER_PARAMETER_STRUCT_INCLUDE(FLumenHZBScreenTraceParameters, HZBScreenTraceParameters) SHADER_PARAMETER(float, RelativeDepthThickness) SHADER_PARAMETER(float, SampleSceneColorNormalTreshold) SHADER_PARAMETER(int32, SampleSceneColor) SHADER_PARAMETER(int, NearFieldLightingMode) SHADER_PARAMETER(uint32, UseReflectionCaptures) SHADER_PARAMETER(float, FarFieldBias) SHADER_PARAMETER(float, PullbackBias) SHADER_PARAMETER(uint32, MaxTraversalIterations) SHADER_PARAMETER(int, ApplySkyLight) SHADER_PARAMETER(int, HitLightingForceEnabled) SHADER_PARAMETER(FVector3f, FarFieldReferencePos) SHADER_PARAMETER_STRUCT_INCLUDE(FLumenReflectionTracingParameters, ReflectionTracingParameters) SHADER_PARAMETER_STRUCT_INCLUDE(FLumenReflectionTileParameters, ReflectionTileParameters) SHADER_PARAMETER_STRUCT_INCLUDE(LumenRadianceCache::FRadianceCacheInterpolationParameters, RadianceCacheParameters) SHADER_PARAMETER_RDG_UNIFORM_BUFFER(FVirtualVoxelParameters, HairStrandsVoxel) END_SHADER_PARAMETER_STRUCT() static FPermutationDomain RemapPermutation(FPermutationDomain PermutationVector) { if (PermutationVector.Get<FRayTracingPass>() == LumenReflections::ERayTracingPass::Default) { PermutationVector.Set<FRecursiveReflectionTraces>(false); }
Source code excerpt:
static FPermutationDomain RemapPermutation(FPermutationDomain PermutationVector)
{
if (PermutationVector.Get<FRayTracingPass>() == LumenReflections::ERayTracingPass::Default)
{
PermutationVector.Set<FRecursiveReflectionTraces>(false);
}
else if (PermutationVector.Get<FRayTracingPass>() == LumenReflections::ERayTracingPass::FarField)
{
PermutationVector.Set<FRecursiveReflectionTraces>(false);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Lumen/LumenReflectionTracing.cpp:334
Scope: file
Source code excerpt:
}
class FTraceCompactionMode : SHADER_PERMUTATION_ENUM_CLASS("TRACE_COMPACTION_MODE", LumenReflections::ETraceCompactionMode);
class FWaveOps : SHADER_PERMUTATION_BOOL("WAVE_OPS");
class FThreadGroupSize : SHADER_PERMUTATION_SPARSE_INT("THREADGROUP_SIZE", 64, 128, 256, 512, 1024);
using FPermutationDomain = TShaderPermutationDomain<FTraceCompactionMode, FWaveOps, FThreadGroupSize>;
static void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment)
{
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Lumen/LumenReflections.cpp:1
Scope: file
Source code excerpt:
/*=============================================================================
LumenReflections.cpp
=============================================================================*/
#include "LumenReflections.h"
#include "RendererPrivate.h"
#include "ScenePrivate.h"
#include "SceneUtils.h"
#include "PipelineStateCache.h"
#include "ShaderParameterStruct.h"
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Lumen/LumenReflections.cpp:658
Scope (from outer to inner):
file
function bool ShouldRenderLumenReflections
Source code excerpt:
return Lumen::IsLumenFeatureAllowedForView(Scene, View, bSkipTracingDataCheck, bSkipProjectCheck)
&& View.FinalPostProcessSettings.ReflectionMethod == EReflectionMethod::Lumen
&& View.Family->EngineShowFlags.LumenReflections
&& CVarLumenAllowReflections.GetValueOnAnyThread()
&& (ShouldRenderLumenDiffuseGI(Scene, View, bSkipTracingDataCheck, bSkipProjectCheck)
// GRHISupportsRayTracingShaders is required for standalone Lumen Reflections because Lumen::GetHardwareRayTracingLightingMode forces hit lighting
|| (bIncludeStandalone && Lumen::UseHardwareRayTracedReflections(*View.Family) && GRHISupportsRayTracingShaders))
&& (bSkipTracingDataCheck || Lumen::UseHardwareRayTracedReflections(*View.Family) || Lumen::IsSoftwareRayTracingSupported());
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Lumen/LumenReflections.cpp:1050
Scope (from outer to inner):
file
function FRDGTextureRef FDeferredShadingSceneRenderer::RenderLumenReflections
Source code excerpt:
LLM_SCOPE_BYTAG(Lumen);
RDG_EVENT_SCOPE(GraphBuilder, "LumenReflections");
RDG_GPU_STAT_SCOPE(GraphBuilder, LumenReflections);
FLumenReflectionTracingParameters ReflectionTracingParameters;
{
LumenReflections::SetupCompositeParameters(View, ReflectionTracingParameters.ReflectionsCompositeParameters);
ReflectionTracingParameters.PreIntegratedGF = GSystemTextures.PreintegratedGF->GetRHI();
ReflectionTracingParameters.PreIntegratedGFSampler = TStaticSamplerState<SF_Bilinear, AM_Clamp, AM_Clamp, AM_Clamp>::GetRHI();
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Lumen/LumenTranslucencyRadianceCache.cpp:50
Scope (from outer to inner):
file
namespace Lumen
function bool UseLumenTranslucencyRadianceCacheReflections
Source code excerpt:
bool UseLumenTranslucencyRadianceCacheReflections(const FViewInfo& View)
{
return GLumenTranslucencyRadianceCacheReflections != 0 && View.Family->EngineShowFlags.LumenReflections;
}
bool ShouldRenderInTranslucencyRadianceCacheMarkPass(bool bShouldRenderInMainPass, const FMaterial& Material)
{
const bool bIsTranslucent = IsTranslucentBlendMode(Material);
const ETranslucencyLightingMode TranslucencyLightingMode = Material.GetTranslucencyLightingMode();