ShowFlag.VisualizeBuffer
ShowFlag.VisualizeBuffer
#Overview
name: ShowFlag.VisualizeBuffer
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 25
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of ShowFlag.VisualizeBuffer is to enable the buffer visualization mode in Unreal Engine 5. This setting is primarily used for debugging and visual inspection of various render targets and buffers within the rendering pipeline.
The Unreal Engine subsystems that rely on this setting variable are primarily the rendering system and the viewport client. It’s used in several key areas:
- In the game viewport client and editor viewport client to control buffer visualization.
- In the scene view setup to configure buffer visualization settings.
- In post-processing passes to determine whether to apply certain effects.
- In various rendering modules to decide whether to perform certain operations.
The value of this variable is typically set through the engine show flags system, which allows toggling of various debug visualization modes. It can be controlled through the engine’s debug console, blueprint functions, or editor UI.
This variable interacts with several other variables and systems:
- It’s often used in conjunction with CurrentBufferVisualizationMode to determine which specific buffer to visualize.
- It affects the behavior of other systems like tonemapping, auto-exposure, and certain post-processing effects.
- It’s used in decision-making for whether to render certain effects like light shafts or ambient occlusion.
Developers should be aware that:
- Enabling this flag can significantly change the rendering output and may affect performance.
- It’s primarily intended for debugging and development purposes, not for use in shipping games.
- It can interfere with other visualization modes or debug views.
Best practices when using this variable include:
- Only enable it when needed for debugging or inspection purposes.
- Be aware of its interactions with other systems and how it might affect the overall rendering pipeline.
- Remember to disable it before final builds or performance testing.
The associated variable VisualizeBuffer is used in similar contexts, often as a more specific control for which buffer to visualize. It’s typically used to set or check the current buffer visualization mode. 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:63
Scope: file
Source code excerpt:
SHOWFLAG_FIXED_IN_SHIPPING(0, ReflectionOverride, SFG_Hidden, NSLOCTEXT("UnrealEd", "ReflectionOverrideSF", "Reflections"))
/** needed for VMI_VisualizeBuffer, Whether to enable the buffer visualization mode. */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeBuffer, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeBufferSF", "Buffer Visualization"))
/** Needed for VMI_VisualizeNanite, Whether to enable the Nanite visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeNanite, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeNaniteSF", "Nanite Visualization"))
/** Needed for VMI_VisualizeLumen, Whether to enable the Lumen visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeLumen, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeLumenSF", "Lumen Visualization"))
/** Needed for VMI_VisualizeSubstrate, Whether to enable the Substrate visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeSubstrate, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeSubstrateSF", "Substrate Visualization"))
#Associated Variable and Callsites
This variable is associated with another variable named VisualizeBuffer
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Plugins/Runtime/nDisplay/Source/DisplayCluster/Private/Game/EngineClasses/Basics/DisplayClusterViewportClient.cpp:529
Scope (from outer to inner):
file
function void UDisplayClusterViewportClient::Draw
Source code excerpt:
EngineShowFlagOverride(ESFIM_Game, ViewFamily.ViewMode, ViewFamily.EngineShowFlags, false);
if (ViewFamily.EngineShowFlags.VisualizeBuffer && AllowDebugViewmodes())
{
// Process the buffer visualization console command
FName NewBufferVisualizationMode = NAME_None;
static IConsoleVariable* ICVar = IConsoleManager::Get().FindConsoleVariable(FBufferVisualizationData::GetVisualizationTargetConsoleCommandName());
if (ICVar)
{
#Loc: <Workspace>/Engine/Plugins/VirtualProduction/DMX/DMXEngine/Source/DMXEditor/Private/Widgets/Monitors/SDMXActivityInUniverse.cpp:118
Scope (from outer to inner):
file
function void SDMXActivityInUniverse::VisualizeBuffer
Source code excerpt:
}
void SDMXActivityInUniverse::VisualizeBuffer(const TArray<uint8, TFixedAllocator<DMX_UNIVERSE_SIZE>>& Values)
{
// is NewValue a different value from current one?
if (Buffer != Values)
{
// Activate timer to animate value bar color
if (!AnimationTimerHandle.IsValid())
#Loc: <Workspace>/Engine/Plugins/VirtualProduction/DMX/DMXEngine/Source/DMXEditor/Private/Widgets/Monitors/SDMXActivityInUniverse.h:55
Scope (from outer to inner):
file
class class SDMXActivityInUniverse : public SCompoundWidget
Source code excerpt:
/** Visualizes specified buffer */
void VisualizeBuffer(const TArray<uint8, TFixedAllocator<DMX_UNIVERSE_SIZE>>& Values);
/** Gets the universe ID this widget represents */
uint32 GetUniverseID() const { return UniverseID.Get(); }
protected:
/** Updates Channels along with their UI representation */
#Loc: <Workspace>/Engine/Plugins/VirtualProduction/DMX/DMXEngine/Source/DMXEditor/Private/Widgets/Monitors/SDMXActivityMonitor.cpp:281
Scope (from outer to inner):
file
function void SDMXActivityMonitor::Tick
Source code excerpt:
{
const TSharedRef<SDMXActivityInUniverse>& ActivityWidget = GetOrCreateActivityWidget(UniverseToDataKvp.Key);
ActivityWidget->VisualizeBuffer(UniverseToDataKvp.Value);
}
}
TSharedRef<ITableRow> SDMXActivityMonitor::OnGenerateUniverseRow(TSharedPtr<SDMXActivityInUniverse> ActivityWidget, const TSharedRef<STableViewBase>& OwnerTable)
{
return
SNew(STableRow<TSharedPtr<SDMXActivityInUniverse>>, OwnerTable)
#Loc: <Workspace>/Engine/Source/Developer/FunctionalTesting/Private/AutomationBlueprintFunctionLibrary.cpp:165
Scope (from outer to inner):
file
class class FAutomationViewExtension : public FWorldSceneViewExtension
function virtual void SetupView
Source code excerpt:
virtual void SetupView(FSceneViewFamily& InViewFamily, FSceneView& InView)
{
//if (Options.VisualizeBuffer != NAME_None)
//{
// InViewFamily.ViewMode = VMI_VisualizeBuffer;
// InViewFamily.EngineShowFlags.SetVisualizeBuffer(true);
// InViewFamily.EngineShowFlags.SetTonemapper(false);
// if (GetBufferVisualizationData().GetMaterial(Options.VisualizeBuffer) == NULL)
// {
// InView.CurrentBufferVisualizationMode = Options.VisualizeBuffer;
// }
//}
}
virtual void SetupViewFamily(FSceneViewFamily& InViewFamily) override
{
#Loc: <Workspace>/Engine/Source/Developer/FunctionalTesting/Private/AutomationBlueprintFunctionLibrary.cpp:312
Scope (from outer to inner):
file
function void FAutomationTestScreenshotEnvSetup::Setup
Source code excerpt:
if (ViewportClient->GetEngineShowFlags())
{
ViewportClient->GetEngineShowFlags()->SetVisualizeBuffer(InOutOptions.VisualizeBuffer == NAME_None ? false : true);
ViewportClient->GetEngineShowFlags()->SetTonemapper(InOutOptions.VisualizeBuffer == NAME_None ? true : false);
ICVar->Set(*InOutOptions.VisualizeBuffer.ToString());
}
}
}
}
void FAutomationTestScreenshotEnvSetup::Restore()
#Loc: <Workspace>/Engine/Source/Developer/FunctionalTesting/Public/AutomationBlueprintFunctionLibrary.h:215
Scope (from outer to inner):
file
function class FUNCTIONALTESTING_API UAutomationBlueprintFunctionLibrary : public UBlueprintFunctionLibrary { GENERATED_UCLASS_BODY
Source code excerpt:
static void SetEditorViewportViewMode(EViewModeIndex Index);
/** Sets all viewports of the first found level editor to have the VisualizeBuffer ViewMode and also display a given buffer (BaseColor/Metallic/Roughness/etc.) **/
UFUNCTION(BlueprintCallable, Category = "Automation")
static void SetEditorViewportVisualizeBuffer(FName BufferName);
/**
* Add info to currently running automated test.
*/
#Loc: <Workspace>/Engine/Source/Developer/FunctionalTesting/Public/AutomationScreenshotOptions.h:79
Scope (from outer to inner):
file
function FAutomationScreenshotOptions
Source code excerpt:
, bDisableTonemapping(true)
, ViewSettings(nullptr)
, VisualizeBuffer(NAME_None)
, Tolerance(EComparisonTolerance::Zero)
, ToleranceAmount()
, MaximumLocalError(0.10f)
, MaximumGlobalError(0.02f)
, bIgnoreAntiAliasing(true)
, bIgnoreColors(false)
#Loc: <Workspace>/Engine/Source/Developer/FunctionalTesting/Public/AutomationScreenshotOptions.h:98
Scope (from outer to inner):
file
function FAutomationScreenshotOptions
Source code excerpt:
, bDisableTonemapping(true)
, ViewSettings(nullptr)
, VisualizeBuffer(NAME_None)
, Tolerance(InTolerance)
, ToleranceAmount()
, MaximumLocalError(0.10f)
, MaximumGlobalError(0.02f)
, bIgnoreAntiAliasing(true)
, bIgnoreColors(false)
#Loc: <Workspace>/Engine/Source/Developer/FunctionalTesting/Public/AutomationScreenshotOptions.h:168
Scope: file
Source code excerpt:
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Screenshot")
FName VisualizeBuffer;
/**
* These are quick defaults for tolerance levels, we default to low, because generally there's some
* constant variability in every pixel's color introduced by TxAA.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Comparison")
#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/GameViewportClient.cpp:1462
Scope (from outer to inner):
file
function void UGameViewportClient::Draw
Source code excerpt:
EngineShowFlagOverride(ESFIM_Game, ViewFamily.ViewMode, ViewFamily.EngineShowFlags, false);
if (ViewFamily.EngineShowFlags.VisualizeBuffer && AllowDebugViewmodes())
{
// Process the buffer visualization console command
FName NewBufferVisualizationMode = NAME_None;
static IConsoleVariable* ICVar = IConsoleManager::Get().FindConsoleVariable(FBufferVisualizationData::GetVisualizationTargetConsoleCommandName());
if (ICVar)
{
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/SceneView.cpp:2330
Scope (from outer to inner):
file
function void FSceneView::ConfigureBufferVisualizationSettings
Source code excerpt:
{
bool bBufferDumpingRequired = (FScreenshotRequest::IsScreenshotRequested() || GIsHighResScreenshot || GIsDumpingMovie);
bool bVisualizationRequired = Family->EngineShowFlags.VisualizeBuffer;
if (bVisualizationRequired || bBufferDumpingRequired)
{
FinalPostProcessSettings.bBufferVisualizationDumpRequired = bBufferDumpingRequired;
FinalPostProcessSettings.BufferVisualizationOverviewMaterials.Empty();
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/ShowFlags.cpp:613
Scope (from outer to inner):
file
function void EngineShowFlagOverride
Source code excerpt:
// Disable AA in full screen GBuffer visualization or calibration material visualization
if (bCanDisableTonemapper && EngineShowFlags.VisualizeBuffer)
{
EngineShowFlags.SetTonemapper(false);
}
if (EngineShowFlags.Bones)
{
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/ShowFlags.cpp:699
Scope (from outer to inner):
file
function EViewModeIndex FindViewMode
Source code excerpt:
EViewModeIndex FindViewMode(const FEngineShowFlags& EngineShowFlags)
{
if (EngineShowFlags.VisualizeBuffer)
{
return VMI_VisualizeBuffer;
}
else if (EngineShowFlags.VisualizeNanite)
{
return VMI_VisualizeNanite;
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:63
Scope: file
Source code excerpt:
SHOWFLAG_FIXED_IN_SHIPPING(0, ReflectionOverride, SFG_Hidden, NSLOCTEXT("UnrealEd", "ReflectionOverrideSF", "Reflections"))
/** needed for VMI_VisualizeBuffer, Whether to enable the buffer visualization mode. */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeBuffer, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeBufferSF", "Buffer Visualization"))
/** Needed for VMI_VisualizeNanite, Whether to enable the Nanite visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeNanite, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeNaniteSF", "Nanite Visualization"))
/** Needed for VMI_VisualizeLumen, Whether to enable the Lumen visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeLumen, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeLumenSF", "Lumen Visualization"))
/** Needed for VMI_VisualizeSubstrate, Whether to enable the Substrate visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeSubstrate, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeSubstrateSF", "Substrate Visualization"))
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/CompositionLighting/CompositionLighting.cpp:92
Scope (from outer to inner):
file
function bool ShouldRenderScreenSpaceAmbientOcclusion
Source code excerpt:
&& View.FinalPostProcessSettings.AmbientOcclusionRadius >= 0.1f
&& !View.Family->UseDebugViewPS()
&& (FSSAOHelper::IsBasePassAmbientOcclusionRequired(View) || IsAmbientCubemapPassRequired(View) || IsReflectionEnvironmentActive(View) || IsSkylightActive(View) || IsForwardShadingEnabled(View.GetShaderPlatform()) || View.Family->EngineShowFlags.VisualizeBuffer || bLumenWantsSSAO);
#if RHI_RAYTRACING
bEnabled &= !ShouldRenderRayTracingAmbientOcclusion(View);
#endif
return bEnabled;
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/LightShaftRendering.cpp:112
Scope (from outer to inner):
file
function bool ShouldRenderLightShafts
Source code excerpt:
&& !ViewFamily.UseDebugViewPS()
&& !ViewFamily.EngineShowFlags.VisualizeDOF
&& !ViewFamily.EngineShowFlags.VisualizeBuffer
&& !ViewFamily.EngineShowFlags.VisualizeHDR
&& !ViewFamily.EngineShowFlags.VisualizeMotionBlur;
}
bool ShouldRenderLightShaftsForLight(const FViewInfo& View, const FLightSceneProxy& LightSceneProxy)
{
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessEyeAdaptation.cpp:342
Scope (from outer to inner):
file
function bool IsAutoExposureDebugMode
Source code excerpt:
return View.Family->UseDebugViewPS() ||
!EngineShowFlags.Lighting ||
(EngineShowFlags.VisualizeBuffer && View.CurrentBufferVisualizationMode != NAME_None && !GetBufferVisualizationData().GetMaterialApplyAutoExposure(View.CurrentBufferVisualizationMode)) ||
EngineShowFlags.RayTracingDebug ||
EngineShowFlags.VisualizeDistanceFieldAO ||
EngineShowFlags.VisualizeVolumetricCloudConservativeDensity ||
EngineShowFlags.VisualizeVolumetricCloudEmptySpaceSkipping ||
EngineShowFlags.CollisionVisibility ||
EngineShowFlags.CollisionPawn ||
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessEyeAdaptation.cpp:1204
Scope (from outer to inner):
file
function void FViewInfo::UpdatePreExposure
Source code excerpt:
&& !ViewFamily.EngineShowFlags.HLODColoration
&& !ViewFamily.EngineShowFlags.ActorColoration
&& ((!ViewFamily.EngineShowFlags.VisualizeBuffer) || CurrentBufferVisualizationMode != NAME_None) // disable pre-exposure for the buffer visualization modes
&& !ViewFamily.EngineShowFlags.RayTracingDebug;
// Compute the PreExposure to use.
bool bUpdateLastExposure = false;
PreExposure = 1.f;
if (!ViewState)
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessMaterial.cpp:946
Scope (from outer to inner):
file
function FPostProcessMaterialChain GetPostProcessMaterialChain
Source code excerpt:
FBlendableEntry* Iterator = nullptr;
if (ViewFamily.EngineShowFlags.VisualizeBuffer)
{
UMaterialInterface* VisMaterial = GetBufferVisualizationData().GetMaterial(View.CurrentBufferVisualizationMode);
UMaterial* Material = VisMaterial ? VisMaterial->GetMaterial() : nullptr;
if (Material && (Material->BlendableLocation == Location || Location == EBlendableLocation::BL_MAX))
{
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessVisualizeBuffer.cpp:127
Scope (from outer to inner):
file
function BEGIN_SHADER_PARAMETER_STRUCT
Source code excerpt:
bool IsVisualizeGBufferOverviewEnabled(const FViewInfo& View)
{
return View.Family->EngineShowFlags.VisualizeBuffer && View.CurrentBufferVisualizationMode == NAME_None;
}
bool IsVisualizeGBufferDumpToFileEnabled(const FViewInfo& View)
{
static const auto CVarDumpFrames = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.BufferVisualizationDumpFrames"));
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/TemporalSuperResolution.cpp:1469
Scope (from outer to inner):
file
function FDefaultTemporalUpscaler::FOutputs AddTemporalSuperResolutionPasses
Source code excerpt:
static FName PerformanceOverviewName = FName(TEXT("PerformanceOverview"));
bHasSeparateTranslucency &=
(!View.Family->EngineShowFlags.VisualizeBuffer || (View.Family->EngineShowFlags.VisualizeBuffer && View.CurrentBufferVisualizationMode == OverviewName))
&& (!View.Family->EngineShowFlags.VisualizeNanite || (View.Family->EngineShowFlags.VisualizeNanite && View.CurrentNaniteVisualizationMode == OverviewName))
&& (!View.Family->EngineShowFlags.VisualizeLumen || (View.Family->EngineShowFlags.VisualizeLumen && (View.CurrentLumenVisualizationMode == OverviewName || View.CurrentLumenVisualizationMode == PerformanceOverviewName)))
&& (!View.Family->EngineShowFlags.VisualizeGroom || (View.Family->EngineShowFlags.VisualizeGroom && View.CurrentGroomVisualizationMode == OverviewName));
#endif
if (bHasSeparateTranslucency)
{
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/SceneRendering.cpp:3153
Scope (from outer to inner):
file
function void FSceneRenderer::PrepareViewRectsForRendering
Source code excerpt:
if (View.PrimaryScreenPercentageMethod == EPrimaryScreenPercentageMethod::TemporalUpscale &&
(!IsTemporalAccumulationBasedMethod(View.AntiAliasingMethod) ||
ViewFamily.EngineShowFlags.VisualizeBuffer ||
ViewFamily.EngineShowFlags.VisualizeSSS))
{
View.PrimaryScreenPercentageMethod = EPrimaryScreenPercentageMethod::SpatialUpscale;
}
}