ShowFlag.VisualizeVirtualShadowMap

ShowFlag.VisualizeVirtualShadowMap

#Overview

name: ShowFlag.VisualizeVirtualShadowMap

This variable is created as a Console Variable (cvar).

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:

  1. The Editor Viewport Client (EditorViewportClient.cpp)
  2. The Show Flags system (ShowFlags.cpp)
  3. The Deferred Shading Renderer (DeferredShadingRenderer.cpp)
  4. The Post-Processing system (PostProcessing.cpp)
  5. 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:

  1. Use it primarily during development and debugging phases.
  2. Be cautious about enabling it in performance-critical scenarios.
  3. Combine it with other debugging tools and metrics to get a comprehensive understanding of shadow map behavior.
  4. 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)
			{