ShowFlag.VisualizeMeshDistanceFields
ShowFlag.VisualizeMeshDistanceFields
#Overview
name: ShowFlag.VisualizeMeshDistanceFields
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.VisualizeMeshDistanceFields is to enable the visualization of mesh distance fields in Unreal Engine 5. This setting is primarily used for debugging and development purposes within the rendering system.
This setting variable is primarily relied upon by the Renderer module of Unreal Engine 5. It’s used in various rendering-related files such as DeferredShadingRenderer.cpp, DistanceFieldAmbientOcclusion.cpp, and DistanceFieldVisualization.cpp.
The value of this variable is set through the engine show flags system, which allows developers to toggle various visualization and debug options. It’s typically controlled via the editor UI or through console commands.
This variable interacts closely with other visualization flags, particularly VisualizeGlobalDistanceField. They are often used in conjunction to control different aspects of distance field visualization.
Developers should be aware that:
- This flag is fixed in shipping builds, meaning it cannot be toggled in released games.
- It’s part of the SFG_Visualize group, indicating its primary use is for visualization purposes.
- Enabling this flag may have performance implications, as it adds additional rendering passes.
Best practices when using this variable include:
- Only enable it when actively debugging distance field-related issues.
- Be aware that it may interfere with other visualization flags, particularly VisualizeGlobalDistanceField.
- Use it in conjunction with other distance field-related tools and visualizations for comprehensive debugging.
Regarding the associated variable VisualizeMeshDistanceFields:
This is actually the same variable as ShowFlag.VisualizeMeshDistanceFields. The ShowFlag prefix is likely used in some contexts to differentiate it as a show flag setting. The purpose and usage are identical to what was described above. It’s used throughout the rendering system to control the visualization of mesh distance fields, particularly in the context of deferred shading, ambient occlusion, and other advanced rendering techniques.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:335
Scope: file
Source code excerpt:
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"))
/** Enable the debug visualization of diffuse/specular lighting (direct and indirect) using probes */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeLightingOnProbes, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeLightingOnProbesSF", "Visualize Lighting on Probes"))
#Associated Variable and Callsites
This variable is associated with another variable named VisualizeMeshDistanceFields
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:335
Scope: file
Source code excerpt:
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"))
/** Enable the debug visualization of diffuse/specular lighting (direct and indirect) using probes */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeLightingOnProbes, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeLightingOnProbesSF", "Visualize Lighting on Probes"))
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:3233
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::Render
Source code excerpt:
// Draw visualizations just before use to avoid target contamination
if (ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields || ViewFamily.EngineShowFlags.VisualizeGlobalDistanceField)
{
RenderMeshDistanceFieldVisualization(GraphBuilder, SceneTextures);
}
if (bRenderDeferredLighting)
{
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DistanceFieldAmbientOcclusion.cpp:749
Scope (from outer to inner):
file
function bool FSceneRenderer::ShouldPrepareDistanceFieldScene
Source code excerpt:
|| bShouldPrepareForDFInsetIndirectShadow
|| ViewFamily.EngineShowFlags.VisualizeGlobalDistanceField
|| ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields;
}
bool FSceneRenderer::ShouldPrepareGlobalDistanceField() const
{
if (!ensure(Scene != nullptr))
{
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DistanceFieldAmbientOcclusion.cpp:934
Scope (from outer to inner):
file
function bool FSceneRenderer::ShouldRenderDistanceFieldAO
Source code excerpt:
&& !bShouldRenderRTAO
&& !ViewFamily.EngineShowFlags.VisualizeDistanceFieldAO
&& !ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields
&& !ViewFamily.EngineShowFlags.VisualizeGlobalDistanceField
&& !ViewFamily.EngineShowFlags.PathTracing;
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DistanceFieldVisualization.cpp:96
Scope (from outer to inner):
file
function void FSceneRenderer::RenderMeshDistanceFieldVisualization
Source code excerpt:
{
const bool bVisualizeGlobalDistanceField = ViewFamily.EngineShowFlags.VisualizeGlobalDistanceField;
const bool bVisualizeMeshDistanceFields = ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields
&& (Scene->DistanceFieldSceneData.NumObjectsInBuffer > 0)
&& !bVisualizeGlobalDistanceField; // only one visualization enabled at a time
if (!DoesPlatformSupportDistanceFields(ShaderPlatform)
|| !IsUsingDistanceFields(ShaderPlatform)
|| !(bVisualizeGlobalDistanceField || bVisualizeMeshDistanceFields))
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/LightGridInjection.cpp:971
Scope (from outer to inner):
file
function FComputeLightGridOutput FDeferredShadingSceneRenderer::GatherLightsAndComputeLightGrid
Source code excerpt:
const bool bCullLightsToGrid = GLightCullingQuality
&& (IsForwardShadingEnabled(ShaderPlatform) || bAnyViewUsesForwardLighting || IsRayTracingEnabled() || ShouldUseClusteredDeferredShading() ||
bAnyViewUsesLumen || ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields || VirtualShadowMapArray.IsEnabled() || ManyLights::IsEnabled());
// Store this flag if lights are injected in the grids, check with 'AreLightsInLightGrid()'
bAreLightsInLightGrid = bCullLightsToGrid;
Result = ComputeLightGrid(GraphBuilder, bCullLightsToGrid, SortedLightSet);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/MobileShadingRenderer.cpp:1355
Scope (from outer to inner):
file
function void FMobileSceneRenderer::Render
Source code excerpt:
}
if (ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields || ViewFamily.EngineShowFlags.VisualizeGlobalDistanceField)
{
RenderMeshDistanceFieldVisualization(GraphBuilder, SceneTextures);
}
if (ViewFamily.EngineShowFlags.VisualizeInstanceOcclusionQueries
&& Scene->InstanceCullingOcclusionQueryRenderer)
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/SceneRendering.cpp:3712
Scope (from outer to inner):
file
function void FSceneRenderer::OnRenderFinish
Source code excerpt:
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));