ShowFlag.VisualizeInstanceOcclusionQueries

ShowFlag.VisualizeInstanceOcclusionQueries

#Overview

name: ShowFlag.VisualizeInstanceOcclusionQueries

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

It is referenced in 4 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of ShowFlag.VisualizeInstanceOcclusionQueries is to enable visualization of instance culling occlusion queries in the Unreal Engine rendering system. This setting is primarily used for debugging and performance optimization purposes.

This setting variable is mainly utilized by the rendering subsystem of Unreal Engine. Based on the callsites, it’s specifically used in the deferred shading renderer and mobile shading renderer modules.

The value of this variable is set using the SHOWFLAG_FIXED_IN_SHIPPING macro in the ShowFlagsValues.inl file. It’s set to 0 by default and is only available in non-shipping builds.

The associated variable VisualizeInstanceOcclusionQueries interacts directly with ShowFlag.VisualizeInstanceOcclusionQueries. They share the same value and purpose.

Developers must be aware that this variable is intended for development and debugging purposes only. It should not be used or relied upon in shipping builds of the game. Also, enabling this visualization may have a performance impact, so it should be used judiciously.

Best practices when using this variable include:

  1. Only enable it when actively debugging occlusion query issues.
  2. Disable it when not needed to avoid unnecessary performance overhead.
  3. Use it in conjunction with other debugging tools to get a comprehensive view of occlusion and culling behavior.
  4. Remember that it’s not available in shipping builds, so any gameplay or visual elements should not depend on it.

Regarding the associated variable VisualizeInstanceOcclusionQueries:

The purpose of VisualizeInstanceOcclusionQueries is identical to ShowFlag.VisualizeInstanceOcclusionQueries. It’s used to enable the visualization of instance culling occlusion queries in the rendering system.

This variable is used in the same subsystems as ShowFlag.VisualizeInstanceOcclusionQueries, namely the deferred shading renderer and mobile shading renderer.

The value is set in the same manner as ShowFlag.VisualizeInstanceOcclusionQueries, using the SHOWFLAG_FIXED_IN_SHIPPING macro.

It interacts directly with ShowFlag.VisualizeInstanceOcclusionQueries, sharing the same value and purpose.

The same considerations and best practices apply to VisualizeInstanceOcclusionQueries as to ShowFlag.VisualizeInstanceOcclusionQueries. Developers should treat them as essentially the same variable, used in different contexts within the engine code.

#References in C++ code

#Callsites

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

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

Scope: file

Source code excerpt:

SHOWFLAG_FIXED_IN_SHIPPING(0, OcclusionMeshes, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeOcclusionQueries", "Visualize Occlusion Queries"))
/** Visualize Occlusion Query bounding meshes */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeInstanceOcclusionQueries, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeInstanceOcclusionQueriesSF", "Visualize Instance Culling Occlusion Queries"))
/** Disable hardware occlusion queries, similar to setting r.AllowOcclusionQueries=0, but just for this scene. */
SHOWFLAG_FIXED_IN_SHIPPING(0, DisableOcclusionQueries, SFG_Developer, NSLOCTEXT("UnrealEd", "DisableOcclusionQueries", "Disable Hardware Occlusion Queries"))

// RHI_RAYTRACING begin
SHOWFLAG_ALWAYS_ACCESSIBLE(PathTracing, SFG_Hidden, NSLOCTEXT("UnrealEd", "PathTracing", "Path tracing"))
SHOWFLAG_FIXED_IN_SHIPPING(0, RayTracingDebug, SFG_Hidden, NSLOCTEXT("UnrealEd", "RayTracingDebug", "Ray tracing debug"))

#Associated Variable and Callsites

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

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

Scope: file

Source code excerpt:

SHOWFLAG_FIXED_IN_SHIPPING(0, OcclusionMeshes, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeOcclusionQueries", "Visualize Occlusion Queries"))
/** Visualize Occlusion Query bounding meshes */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeInstanceOcclusionQueries, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeInstanceOcclusionQueriesSF", "Visualize Instance Culling Occlusion Queries"))
/** Disable hardware occlusion queries, similar to setting r.AllowOcclusionQueries=0, but just for this scene. */
SHOWFLAG_FIXED_IN_SHIPPING(0, DisableOcclusionQueries, SFG_Developer, NSLOCTEXT("UnrealEd", "DisableOcclusionQueries", "Disable Hardware Occlusion Queries"))

// RHI_RAYTRACING begin
SHOWFLAG_ALWAYS_ACCESSIBLE(PathTracing, SFG_Hidden, NSLOCTEXT("UnrealEd", "PathTracing", "Path tracing"))
SHOWFLAG_FIXED_IN_SHIPPING(0, RayTracingDebug, SFG_Hidden, NSLOCTEXT("UnrealEd", "RayTracingDebug", "Ray tracing debug"))

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

Scope (from outer to inner):

file
function     void FDeferredShadingSceneRenderer::Render

Source code excerpt:

		}

		if (ViewFamily.EngineShowFlags.VisualizeInstanceOcclusionQueries
			&& Scene->InstanceCullingOcclusionQueryRenderer)
		{
			for (FViewInfo& View : Views)
			{
				Scene->InstanceCullingOcclusionQueryRenderer->RenderDebug(GraphBuilder, Scene->GPUScene, View, SceneTextures);
			}

#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/MobileShadingRenderer.cpp:1360

Scope (from outer to inner):

file
function     void FMobileSceneRenderer::Render

Source code excerpt:

		}
	
		if (ViewFamily.EngineShowFlags.VisualizeInstanceOcclusionQueries
			&& Scene->InstanceCullingOcclusionQueryRenderer)
		{
			for (FViewInfo& View : Views)
			{
				Scene->InstanceCullingOcclusionQueryRenderer->RenderDebug(GraphBuilder, Scene->GPUScene, View, SceneTextures);
			}