ShowFlag.VisualizeNanite

ShowFlag.VisualizeNanite

#Overview

name: ShowFlag.VisualizeNanite

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

It is referenced in 9 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of ShowFlag.VisualizeNanite is to enable the Nanite visualization mode. Nanite is Unreal Engine 5’s virtualized geometry system that allows for highly detailed geometric meshes.

This setting variable is primarily used in the rendering system, specifically for debug visualization of Nanite geometry. It is relied upon by the Renderer module.

The value of this variable is typically set through the engine show flags, which can be toggled in the editor or via console commands. It’s often used in conjunction with other visualization modes.

This variable interacts closely with other Nanite-related variables and systems, such as the NaniteVisualizationData and NaniteRasterResults.

Developers should be aware that enabling this flag may impact performance, as it adds additional visualization passes to the rendering pipeline. It should primarily be used for debugging and development purposes.

Best practices when using this variable include:

  1. Only enable it when actively debugging Nanite-related issues.
  2. Be aware of how it interacts with other visualization modes.
  3. Disable it in shipping builds to avoid unnecessary performance overhead.

The associated variable VisualizeNanite serves the same purpose and is used interchangeably in the code. It’s typically used in contexts where the full ShowFlag structure isn’t available or necessary.

#References in C++ code

#Callsites

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

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

Scope: file

Source code excerpt:

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"))
/** Needed for VMI_VisualizeGroom, Whether to enable the Groom visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeGroom, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeGroomSF", "Groom Visualization"))

#Associated Variable and Callsites

This variable is associated with another variable named VisualizeNanite. 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:703

Scope (from outer to inner):

file
function     EViewModeIndex FindViewMode

Source code excerpt:

		return VMI_VisualizeBuffer;
	}
	else if (EngineShowFlags.VisualizeNanite)
	{
		return VMI_VisualizeNanite;
	}
	else if (EngineShowFlags.VisualizeLumen)
	{
		return VMI_VisualizeLumen;

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

Scope: file

Source code excerpt:

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"))
/** Needed for VMI_VisualizeGroom, Whether to enable the Groom visualization mode. */
SHOWFLAG_ALWAYS_ACCESSIBLE(VisualizeGroom, SFG_Hidden, NSLOCTEXT("UnrealEd", "VisualizeGroomSF", "Groom Visualization"))

#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:1254

Scope (from outer to inner):

file
function     void FDeferredShadingSceneRenderer::RenderNanite

Source code excerpt:

			const FNaniteVisualizationData& VisualizationData = GetNaniteVisualizationData();

			bool bVisualizeActive = VisualizationData.IsActive() && ViewFamily.EngineShowFlags.VisualizeNanite;
			bool bVisualizeOverdraw = false;
			if (bVisualizeActive)
			{
				if (VisualizationData.GetActiveModeID() == 0) // Overview
				{
					bVisualizeOverdraw = VisualizationData.GetOverviewModeIDs().Contains(NANITE_VISUALIZE_OVERDRAW);

#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:1636

Scope (from outer to inner):

file
function     void FDeferredShadingSceneRenderer::Render

Source code excerpt:

			if (NaniteVisualization.Update(NaniteViewMode))
			{
				// When activating the view modes from the command line, automatically enable the VisualizeNanite show flag for convenience.
				ViewFamily.EngineShowFlags.SetVisualizeNanite(true);
			}

			bVisualizeNanite = NaniteVisualization.IsActive() && ViewFamily.EngineShowFlags.VisualizeNanite;
		}
	}

	CSV_SCOPED_TIMING_STAT_EXCLUSIVE(RenderOther);

	SCOPED_NAMED_EVENT(FDeferredShadingSceneRenderer_Render, FColor::Emerald);

#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Nanite/NaniteVisualize.cpp:607

Scope (from outer to inner):

file
namespace    Nanite
function     void AddVisualizationPasses

Source code excerpt:

	FRDGBufferRef PickingBuffer = nullptr;

	if (Scene && Views.Num() > 0 && VisualizationData.IsActive() && EngineShowFlags.VisualizeNanite)
	{
		// Don't create the hit proxy ID buffer until it's needed
		// TODO: Permutation with hit proxy support to keep this clean when !WITH_EDITOR?
		FRDGBufferRef HitProxyIDBuffer = GSystemTextures.GetDefaultByteAddressBuffer(GraphBuilder, 4u);
		bool bHitProxyIDBufferCreated = false;

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

Scope (from outer to inner):

file
function     void AddPostProcessingPasses

Source code excerpt:

		}

		if (EngineShowFlags.VisualizeNanite && NaniteRasterResults != nullptr)
		{
			AddVisualizeNanitePass(GraphBuilder, View, SceneColor, *NaniteRasterResults);
		}

		if (EngineShowFlags.VisualizeVirtualShadowMap && VirtualShadowMapArray != nullptr)
		{

#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/TemporalSuperResolution.cpp:1470

Scope (from outer to inner):

file
function     FDefaultTemporalUpscaler::FOutputs AddTemporalSuperResolutionPasses

Source code excerpt:

	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)
	{
		SeparateTranslucencyTexture = PassInputs.PostDOFTranslucencyResources.ColorTexture.Resolve;