ShowFlag.VisualizeVirtualShadowMap
ShowFlag.VisualizeVirtualShadowMap
#Overview
name: ShowFlag.VisualizeVirtualShadowMap
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 7
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of ShowFlag.VisualizeVirtualShadowMap is to enable the visualization mode for virtual shadow maps in Unreal Engine 5. This setting variable is primarily used for debugging and analysis of the virtual shadow map system, which is part of the engine’s advanced rendering capabilities.
This setting variable is mainly utilized by the rendering system in Unreal Engine 5. Specifically, it is used in the following subsystems and modules:
- The Editor Viewport Client (EditorViewportClient.cpp)
- The Show Flags system (ShowFlags.cpp)
- The Deferred Shading Renderer (DeferredShadingRenderer.cpp)
- The Post-Processing system (PostProcessing.cpp)
- The Virtual Shadow Map Array system (VirtualShadowMapArray.cpp)
The value of this variable is set through the engine’s show flags system, which is typically controlled via the editor UI or through code. It’s defined as an always accessible show flag, meaning it can be toggled at runtime.
This variable interacts closely with the EngineShowFlags structure, which contains various flags for controlling rendering features. It’s also associated with the VMI_VisualizeVirtualShadowMap view mode index, which is used to determine the current visualization mode.
Developers should be aware that enabling this flag may have performance implications, as it’s primarily intended for debugging and visualization purposes. It should generally be disabled in shipping builds or during normal gameplay.
Best practices when using this variable include:
- Use it primarily during development and debugging phases.
- Be cautious about enabling it in performance-critical scenarios.
- Combine it with other debugging tools and metrics to get a comprehensive understanding of shadow map behavior.
- Disable it when not actively debugging shadow map issues to ensure optimal performance.
Regarding the associated variable VisualizeVirtualShadowMap, it appears to be the same variable, just referenced in different contexts. The usage and considerations mentioned above apply equally to this associated variable. It’s used in the same systems and modules, and serves the same purpose of enabling virtual shadow map visualization.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:73
Scope: file
Source code excerpt:
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeGroom, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeGroomSF", "Groom Visualization"))
/** Needed for VMI_VisualizeVirtualShadowMap, Whether to enable the virtual shadow map visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeVirtualShadowMap, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeVirtualShadowMapSF", "Virtual Shadow Map Visualization"))
/** Allows to disable all direct lighting (does not affect indirect light) */
SHOWFLAG_FIXED_IN_SHIPPING(1, DirectLighting, SFG_LightingComponents, NSLOCTEXT("UnrealEd", "DirectLightingSF", "Direct Lighting"))
/** Allows to disable lighting from Directional Lights */
SHOWFLAG_FIXED_IN_SHIPPING(1, DirectionalLights, SFG_LightTypes, NSLOCTEXT("UnrealEd", "DirectionalLightsSF", "Directional Lights"))
/** Allows to disable lighting from Point Lights, for now SHOWFLAG_ALWAYS_ACCESSIBLE because it's exposed in SceneCapture */
SHOWFLAG_ALWAYS_ACCESSIBLE(PointLights, SFG_LightTypes, NSLOCTEXT("UnrealEd", "PointLightsSF", "Point Lights"))
#Associated Variable and Callsites
This variable is associated with another variable named VisualizeVirtualShadowMap
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/EditorViewportClient.cpp:2887
Scope (from outer to inner):
file
function bool FEditorViewportClient::SupportsPreviewResolutionFraction
Source code excerpt:
// Don't do preview screen percentage in certain cases.
if (EngineShowFlags.VisualizeBuffer || EngineShowFlags.VisualizeNanite || EngineShowFlags.VisualizeVirtualShadowMap || IsVisualizeCalibrationMaterialEnabled())
{
return false;
}
return true;
}
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/ShowFlags.cpp:719
Scope (from outer to inner):
file
function EViewModeIndex FindViewMode
Source code excerpt:
return VMI_VisualizeGroom;
}
else if (EngineShowFlags.VisualizeVirtualShadowMap)
{
return VMI_VisualizeVirtualShadowMap;
}
else if (EngineShowFlags.StationaryLightOverlap)
{
return VMI_StationaryLightOverlap;
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:73
Scope: file
Source code excerpt:
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeGroom, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeGroomSF", "Groom Visualization"))
/** Needed for VMI_VisualizeVirtualShadowMap, Whether to enable the virtual shadow map visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeVirtualShadowMap, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeVirtualShadowMapSF", "Virtual Shadow Map Visualization"))
/** Allows to disable all direct lighting (does not affect indirect light) */
SHOWFLAG_FIXED_IN_SHIPPING(1, DirectLighting, SFG_LightingComponents, NSLOCTEXT("UnrealEd", "DirectLightingSF", "Direct Lighting"))
/** Allows to disable lighting from Directional Lights */
SHOWFLAG_FIXED_IN_SHIPPING(1, DirectionalLights, SFG_LightTypes, NSLOCTEXT("UnrealEd", "DirectionalLightsSF", "Directional Lights"))
/** Allows to disable lighting from Point Lights, for now SHOWFLAG_ALWAYS_ACCESSIBLE because it's exposed in SceneCapture */
SHOWFLAG_ALWAYS_ACCESSIBLE(PointLights, SFG_LightTypes, NSLOCTEXT("UnrealEd", "PointLightsSF", "Point Lights"))
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:2474
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::Render
Source code excerpt:
}
// VisualizeVirtualShadowMap TODO
}
FRDGTextureRef ExposureIlluminanceSetup = nullptr;
if (!bHasRayTracedOverlay)
{
// Extract emissive from SceneColor (before lighting is applied)
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:1758
Scope (from outer to inner):
file
function void AddPostProcessingPasses
Source code excerpt:
}
if (EngineShowFlags.VisualizeVirtualShadowMap && VirtualShadowMapArray != nullptr)
{
VirtualShadowMapArray->AddVisualizePass(GraphBuilder, View, ViewIndex, SceneColor);
}
#if WITH_EDITOR
if (CVarGBufferPicking.GetValueOnRenderThread())
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/VirtualShadowMaps/VirtualShadowMapArray.cpp:499
Scope (from outer to inner):
file
function void FVirtualShadowMapArray::Initialize
Source code excerpt:
// Set up nanite visualization if enabled. We use an extra array slice in the physical page pool for debug output
// so need to set this up in advance.
if (EngineShowFlags.VisualizeVirtualShadowMap)
{
bEnableVisualization = true;
FVirtualShadowMapVisualizationData& VisualizationData = GetVirtualShadowMapVisualizationData();
if (VisualizationData.GetActiveModeID() == VIRTUAL_SHADOW_MAP_VISUALIZE_NANITE_OVERDRAW)
{