ShowFlag.VisualizeDistanceFieldAO
ShowFlag.VisualizeDistanceFieldAO
#Overview
name: ShowFlag.VisualizeDistanceFieldAO
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 9
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of ShowFlag.VisualizeDistanceFieldAO is to enable the visualization of Distance Field Ambient Occlusion (DFAO) in the Unreal Engine 5 rendering system. This show flag is used for debugging and visual inspection of the DFAO effect in the scene.
The Unreal Engine subsystems that rely on this setting variable are primarily the Renderer module and the Engine module. It is used in various rendering-related classes and functions, such as FDeferredShadingSceneRenderer, FSceneRenderer, and post-processing components.
The value of this variable is set through the engine show flags system, which allows toggling various visual debugging features in the editor or at runtime.
This variable interacts with several other rendering-related variables and systems, such as:
- Other distance field visualization flags (VisualizeMeshDistanceFields, VisualizeGlobalDistanceField)
- Post-processing flags
- Skylight and ambient occlusion settings
Developers should be aware of the following when using this variable:
- It is primarily intended for debugging and visualization purposes, not for final rendering in shipping builds.
- Enabling this flag may disable other post-processing effects to isolate the DFAO visualization.
- It may impact performance when enabled, as it requires additional rendering passes.
Best practices when using this variable include:
- Use it during development and debugging phases to inspect the DFAO effect.
- Disable it in shipping builds to ensure optimal performance.
- Consider the interaction with other visualization flags and rendering features when analyzing the results.
The associated variable VisualizeDistanceFieldAO serves the same purpose and is used interchangeably with ShowFlag.VisualizeDistanceFieldAO in the codebase. It is referenced in similar contexts and follows the same best practices and considerations as mentioned above. The main difference is that VisualizeDistanceFieldAO is used directly in some function calls and conditional statements, while ShowFlag.VisualizeDistanceFieldAO is typically accessed through the EngineShowFlags structure.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:333
Scope: file
Source code excerpt:
SHOWFLAG_ALWAYS_ACCESSIBLE(Paper2DSprites, SFG_Advanced, NSLOCTEXT("UnrealEd", "Paper2DSpritesSF", "Paper 2D Sprites"))
/** Visualization of distance field AO */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeDistanceFieldAO, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeDistanceFieldAOSF", "Distance Field Ambient Occlusion"))
/** Mesh Distance fields */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeMeshDistanceFields, SFG_Visualize, NSLOCTEXT("UnrealEd", "MeshDistanceFieldsSF", "Mesh DistanceFields"))
/** Physics field */
SHOWFLAG_FIXED_IN_SHIPPING(0, PhysicsField, SFG_Visualize, NSLOCTEXT("UnrealEd", "PhysicsField", "Physics Field"))
/** Global Distance field */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeGlobalDistanceField, SFG_Visualize, NSLOCTEXT("UnrealEd", "GlobalDistanceFieldSF", "Global DistanceField"))
#Associated Variable and Callsites
This variable is associated with another variable named VisualizeDistanceFieldAO
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Plugins/Media/MediaIOFramework/Source/MediaIOCore/Private/MediaCaptureSceneViewExtension.h:49
Scope (from outer to inner):
file
class class FMediaCaptureSceneViewExtension : public FSceneViewExtensionBase
function virtual void SetupView
Source code excerpt:
bPostProcessingEnabled =
InView.Family->EngineShowFlags.PostProcessing &&
!InView.Family->EngineShowFlags.VisualizeDistanceFieldAO &&
!InView.Family->EngineShowFlags.VisualizeShadingModels &&
!InView.Family->EngineShowFlags.VisualizeVolumetricCloudConservativeDensity &&
!InView.Family->EngineShowFlags.VisualizeVolumetricCloudEmptySpaceSkipping &&
!InView.Family->EngineShowFlags.ShaderComplexity;
}
else
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:333
Scope: file
Source code excerpt:
SHOWFLAG_ALWAYS_ACCESSIBLE(Paper2DSprites, SFG_Advanced, NSLOCTEXT("UnrealEd", "Paper2DSpritesSF", "Paper 2D Sprites"))
/** Visualization of distance field AO */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeDistanceFieldAO, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeDistanceFieldAOSF", "Distance Field Ambient Occlusion"))
/** Mesh Distance fields */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeMeshDistanceFields, SFG_Visualize, NSLOCTEXT("UnrealEd", "MeshDistanceFieldsSF", "Mesh DistanceFields"))
/** Physics field */
SHOWFLAG_FIXED_IN_SHIPPING(0, PhysicsField, SFG_Visualize, NSLOCTEXT("UnrealEd", "PhysicsField", "Physics Field"))
/** Global Distance field */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeGlobalDistanceField, SFG_Visualize, NSLOCTEXT("UnrealEd", "GlobalDistanceFieldSF", "Global DistanceField"))
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:3222
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::Render
Source code excerpt:
}
if (ViewFamily.EngineShowFlags.VisualizeDistanceFieldAO && ShouldRenderDistanceFieldLighting())
{
GraphBuilder.SetCommandListStat(GET_STATID(STAT_CLM_RenderDistanceFieldLighting));
// Use the skylight's max distance if there is one, to be consistent with DFAO shadowing on the skylight
const float OcclusionMaxDistance = Scene->SkyLight && !Scene->SkyLight->bWantsStaticShadowing ? Scene->SkyLight->OcclusionMaxDistance : Scene->DefaultMaxDistanceFieldOcclusionDistance;
TArray<FRDGTextureRef> DummyOutput;
RenderDistanceFieldLighting(GraphBuilder, SceneTextures, FDistanceFieldAOParameters(OcclusionMaxDistance), DummyOutput, false, ViewFamily.EngineShowFlags.VisualizeDistanceFieldAO);
}
// Draw visualizations just before use to avoid target contamination
if (ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields || ViewFamily.EngineShowFlags.VisualizeGlobalDistanceField)
{
RenderMeshDistanceFieldVisualization(GraphBuilder, SceneTextures);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DistanceFieldAmbientOcclusion.cpp:712
Scope (from outer to inner):
file
function bool FSceneRenderer::ShouldPrepareForDistanceFieldAO
Source code excerpt:
return SupportsDistanceFieldAO(Scene->GetFeatureLevel(), Scene->GetShaderPlatform())
&& ((ShouldRenderDeferredDynamicSkyLight(Scene, ViewFamily) && bAnyViewHasGIMethodSupportingDFAO && Scene->SkyLight->bCastShadows && ViewFamily.EngineShowFlags.DistanceFieldAO)
|| ViewFamily.EngineShowFlags.VisualizeDistanceFieldAO
|| (GDistanceFieldAOApplyToStaticIndirect && bAnyViewHasGIMethodSupportingDFAO && ViewFamily.EngineShowFlags.DistanceFieldAO));
}
bool FSceneRenderer::ShouldPrepareDistanceFieldScene() const
{
if (!ensure(Scene != nullptr))
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DistanceFieldAmbientOcclusion.cpp:933
Scope (from outer to inner):
file
function bool FSceneRenderer::ShouldRenderDistanceFieldAO
Source code excerpt:
return ViewFamily.EngineShowFlags.DistanceFieldAO
&& !bShouldRenderRTAO
&& !ViewFamily.EngineShowFlags.VisualizeDistanceFieldAO
&& !ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields
&& !ViewFamily.EngineShowFlags.VisualizeGlobalDistanceField
&& !ViewFamily.EngineShowFlags.PathTracing;
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessEyeAdaptation.cpp:344
Scope (from outer to inner):
file
function bool IsAutoExposureDebugMode
Source code excerpt:
(EngineShowFlags.VisualizeBuffer && View.CurrentBufferVisualizationMode != NAME_None && !GetBufferVisualizationData().GetMaterialApplyAutoExposure(View.CurrentBufferVisualizationMode)) ||
EngineShowFlags.RayTracingDebug ||
EngineShowFlags.VisualizeDistanceFieldAO ||
EngineShowFlags.VisualizeVolumetricCloudConservativeDensity ||
EngineShowFlags.VisualizeVolumetricCloudEmptySpaceSkipping ||
EngineShowFlags.CollisionVisibility ||
EngineShowFlags.CollisionPawn ||
!EngineShowFlags.PostProcessing;
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:182
Scope (from outer to inner):
file
function bool IsPostProcessingEnabled
Source code excerpt:
return
View.Family->EngineShowFlags.PostProcessing &&
!View.Family->EngineShowFlags.VisualizeDistanceFieldAO &&
!View.Family->EngineShowFlags.VisualizeShadingModels &&
!View.Family->EngineShowFlags.VisualizeVolumetricCloudConservativeDensity &&
!View.Family->EngineShowFlags.VisualizeVolumetricCloudEmptySpaceSkipping &&
!View.Family->EngineShowFlags.ShaderComplexity;
}
else
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/SceneRendering.cpp:3711
Scope (from outer to inner):
file
function void FSceneRenderer::OnRenderFinish
Source code excerpt:
const bool bMeshDistanceFieldEnabled = DoesProjectSupportDistanceFields();
extern bool UseDistanceFieldAO();
const bool bShowDFAODisabledWarning = !UseDistanceFieldAO() && (ViewFamily.EngineShowFlags.VisualizeDistanceFieldAO);
const bool bShowDFDisabledWarning = !bMeshDistanceFieldEnabled && (ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields || ViewFamily.EngineShowFlags.VisualizeGlobalDistanceField || ViewFamily.EngineShowFlags.VisualizeDistanceFieldAO);
const bool bShowNoSkyAtmosphereComponentWarning = !Scene->HasSkyAtmosphere() && ViewFamily.EngineShowFlags.VisualizeSkyAtmosphere;
const bool bStationarySkylight = Scene->SkyLight && Scene->SkyLight->bWantsStaticShadowing;
const bool bShowSkylightWarning = bStationarySkylight && !FReadOnlyCVARCache::EnableStationarySkylight();
const bool bRealTimeSkyCaptureButNothingToCapture = Scene->SkyLight && Scene->SkyLight->bRealTimeCaptureEnabled && (!Scene->HasSkyAtmosphere() && !Scene->HasVolumetricCloud() && (Views.Num() > 0 && !Views[0].bSceneHasSkyMaterial));