ShowFlag.VisualizePostProcessStack

ShowFlag.VisualizePostProcessStack

#Overview

name: ShowFlag.VisualizePostProcessStack

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.VisualizePostProcessStack is to visualize information about the post-processing stack on screen. This setting variable is primarily used for debugging and development purposes in the Unreal Engine’s rendering system.

This setting variable is mainly relied upon by the Unreal Engine’s rendering subsystem, specifically the post-processing module. It’s used in the Engine and Renderer modules of Unreal Engine.

The value of this variable is set through the engine show flags system. It’s defined as a show flag that is fixed in shipping builds (set to 0) and belongs to the SFG_Visualize group.

The associated variable VisualizePostProcessStack interacts directly with ShowFlag.VisualizePostProcessStack. They share the same value and are used interchangeably in the code.

Developers must be aware that this variable is primarily for development and debugging purposes. It’s not available in shipping builds, as indicated by the SHOWFLAG_FIXED_IN_SHIPPING macro.

Best practices when using this variable include:

  1. Only enable it when debugging post-processing effects.
  2. Be aware that enabling this flag may impact performance, so it should be used judiciously.
  3. Remember that this functionality is not available in shipping builds, so any features relying on it should have alternative implementations for release versions.

Regarding the associated variable VisualizePostProcessStack:

The purpose of VisualizePostProcessStack is the same as ShowFlag.VisualizePostProcessStack - to visualize information about the post-processing stack on screen.

It’s used in the Engine and Renderer modules, particularly in the post-processing pipeline.

The value is set through the engine show flags system, just like ShowFlag.VisualizePostProcessStack.

It interacts directly with ShowFlag.VisualizePostProcessStack, sharing the same value.

Developers should be aware that this variable is only enabled when DEBUG_POST_PROCESS_VOLUME_ENABLE is defined, indicating it’s for debugging purposes.

Best practices include using it only for debugging, being mindful of potential performance impacts, and ensuring any dependent features have alternatives for shipping builds where this functionality is disabled.

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:409

Scope: file

Source code excerpt:

SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeCalibrationCustom, SFG_Developer, NSLOCTEXT("UnrealEd", "VisualizeCalibrationCustomSF", "Visualize Calibration Custom"))
/** Visualise information about the post processes stacked on screen */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizePostProcessStack, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizePostProcessStackSF", "Visualize Post Process Stack"))

/** Draw in the main pass the primitives that would normally only contribute to runtime virtual textures. */
SHOWFLAG_FIXED_IN_SHIPPING(0, VirtualTexturePrimitives, SFG_Developer, NSLOCTEXT("UnrealEd", "VirtualTexturePrimitivesSF", "Virtual Texture Primitives"))

/** Visualize volumetric cloud conservative density. */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeVolumetricCloudConservativeDensity, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeVolumetricCloudConservativeDensitySF", "Volumetric Cloud Conservative Density"))

#Associated Variable and Callsites

This variable is associated with another variable named VisualizePostProcessStack. They share the same value. See the following C++ source code.

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/World.cpp:9299

Scope (from outer to inner):

file
function     static void DoPostProcessVolume

Source code excerpt:


#if DEBUG_POST_PROCESS_VOLUME_ENABLE
	if (SceneView->Family && SceneView->Family->EngineShowFlags.VisualizePostProcessStack)
	{
		FPostProcessSettingsDebugInfo& PPDebug = SceneView->FinalPostProcessDebugInfo.AddDefaulted_GetRef();

		PPDebug.Name = Volume->GetDebugName();

		FPostProcessVolumeProperties VProperties = Volume->GetProperties();

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:409

Scope: file

Source code excerpt:

SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeCalibrationCustom, SFG_Developer, NSLOCTEXT("UnrealEd", "VisualizeCalibrationCustomSF", "Visualize Calibration Custom"))
/** Visualise information about the post processes stacked on screen */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizePostProcessStack, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizePostProcessStackSF", "Visualize Post Process Stack"))

/** Draw in the main pass the primitives that would normally only contribute to runtime virtual textures. */
SHOWFLAG_FIXED_IN_SHIPPING(0, VirtualTexturePrimitives, SFG_Developer, NSLOCTEXT("UnrealEd", "VirtualTexturePrimitivesSF", "Virtual Texture Primitives"))

/** Visualize volumetric cloud conservative density. */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeVolumetricCloudConservativeDensity, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeVolumetricCloudConservativeDensitySF", "Volumetric Cloud Conservative Density"))

#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:370

Scope (from outer to inner):

file
function     void AddPostProcessingPasses

Source code excerpt:

		VisualizeStationaryLightOverlap,
		VisualizeLightCulling,
		VisualizePostProcessStack,
		VisualizeSubstrate,
		VisualizeLightGrid,
		VisualizeSkyAtmosphere,
		VisualizeSkyLightIlluminanceMeter,
		VisualizeLightFunctionAtlas,
		VisualizeLevelInstance,

#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:460

Scope (from outer to inner):

file
function     void AddPostProcessingPasses

Source code excerpt:

	PassSequence.SetEnabled(EPass::VisualizeLightCulling, EngineShowFlags.VisualizeLightCulling);
#if DEBUG_POST_PROCESS_VOLUME_ENABLE
	PassSequence.SetEnabled(EPass::VisualizePostProcessStack, EngineShowFlags.VisualizePostProcessStack);
#else
	PassSequence.SetEnabled(EPass::VisualizePostProcessStack, false);
#endif
	PassSequence.SetEnabled(EPass::VisualizeLumenScene, LumenVisualizeMode >= 0 && LumenVisualizeMode != VISUALIZE_MODE_OVERVIEW && LumenVisualizeMode != VISUALIZE_MODE_PERFORMANCE_OVERVIEW && bPostProcessingEnabled);
	PassSequence.SetEnabled(EPass::VisualizeSubstrate, Substrate::ShouldRenderSubstrateDebugPasses(View));
	PassSequence.SetEnabled(EPass::VisualizeLightGrid, ShouldVisualizeLightGrid());

#if WITH_EDITOR

#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:1417

Scope (from outer to inner):

file
function     void AddPostProcessingPasses

Source code excerpt:


#if DEBUG_POST_PROCESS_VOLUME_ENABLE
	if (PassSequence.IsEnabled(EPass::VisualizePostProcessStack))
	{
		FScreenPassRenderTarget OverrideOutput;
		PassSequence.AcceptOverrideIfLastPass(EPass::VisualizePostProcessStack, OverrideOutput);
		OverrideOutput = OverrideOutput.IsValid() ? OverrideOutput : FScreenPassRenderTarget::CreateFromInput(GraphBuilder, SceneColor, View.GetOverwriteLoadAction(), TEXT("VisualizePostProcessStack"));
		SceneColor = AddFinalPostProcessDebugInfoPasses(GraphBuilder, View, OverrideOutput);
	}
#endif

	if (PassSequence.IsEnabled(EPass::VisualizeSubstrate))
	{

#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/SceneRendering.cpp:4364

Scope (from outer to inner):

file
function     bool FSceneRenderer::ShouldCompositeEditorPrimitives

Source code excerpt:

	const FEngineShowFlags& ShowFlags = View.Family->EngineShowFlags;
	if (ShowFlags.VisualizeHDR || ShowFlags.VisualizeSkyLightIlluminance ||
		ShowFlags.VisualizePostProcessStack || View.Family->UseDebugViewPS())
	{
		// certain visualize modes get obstructed too much
		return false;
	}

	if (ShowFlags.Wireframe)