ShowFlag.PathTracing
ShowFlag.PathTracing
#Overview
name: ShowFlag.PathTracing
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 64
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of ShowFlag.PathTracing is to enable or disable path tracing rendering in Unreal Engine 5. Path tracing is an advanced rendering technique that simulates the physical behavior of light to produce highly realistic images.
Key points about ShowFlag.PathTracing:
-
It is primarily used by the rendering system to determine if path tracing should be enabled for a given view or scene.
-
Multiple Unreal Engine subsystems and modules check this flag to adjust their behavior when path tracing is enabled, including:
- The deferred shading renderer
- Ray tracing systems
- Various post-processing effects
- Volumetric cloud rendering
- Hair strands rendering
-
The value is typically set through the engine’s show flags system, likely controlled via the UI or console commands.
-
When enabled, it often causes other rendering techniques to be disabled or adjusted, as path tracing handles many lighting and material effects differently.
-
It interacts with other variables like ViewRayTracingMask to control which objects are included in path tracing calculations.
-
Developers should be aware that enabling path tracing can significantly impact performance and may require adjustments to other rendering settings for optimal results.
-
Best practices include carefully considering which objects need to be included in path tracing and potentially using it selectively for specific views or scenes rather than globally.
The associated variable PathTracing is used in similar contexts and likely serves as an internal representation of the show flag’s state. It’s used in various conditional checks throughout the rendering pipeline to enable or disable path tracing-specific code paths.
When using these variables, developers should:
- Ensure their materials and lighting setups are compatible with path tracing
- Be prepared to adjust other rendering settings that may conflict with or be redundant when path tracing is enabled
- Consider the performance implications and potentially implement quality/performance tradeoffs
- Test thoroughly in both path traced and non-path traced modes to ensure consistent visuals across different rendering configurations
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:394
Scope: file
Source code excerpt:
// 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"))
// RHI_RAYTRACING end
/** Enable the SkyAtmosphere visualization to be drawn on screen */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeSkyAtmosphere, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeSkyAtmosphereSF", "Sky Atmosphere"))
/** Enable the light function atlas debug visualization to be drawn on screen */
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/Kismet/KismetRenderingLibrary.h:249
Scope (from outer to inner):
file
class class UKismetRenderingLibrary : public UBlueprintFunctionLibrary
Source code excerpt:
/** Enables or disables the path tracer for the current Game Viewport.
* This command is equivalent to setting ShowFlag.PathTracing, but is accessible even from shipping builds.
*/
UFUNCTION(BlueprintCallable, Category = "Rendering", meta = (Keywords="EnablePathTracing"))
static ENGINE_API void EnablePathTracing(bool bEnablePathTracer);
/** Forces the path tracer to restart sample accumulation.
* This can be used to force the path tracer to compute a new frame in situations where it can not detect a change in the scene automatically.
*/
UFUNCTION(BlueprintCallable, Category = "Rendering", meta = (Keywords = "PathTracing"))
#Associated Variable and Callsites
This variable is associated with another variable named PathTracing
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Plugins/Experimental/Water/Source/Runtime/Private/WaterSubsystem.cpp:790
Scope (from outer to inner):
file
function void UWaterSubsystem::ComputeUnderwaterPostProcess
Source code excerpt:
SceneView->UnderwaterDepth = CachedDepthUnderwater;
if (!bUnderwaterForPostProcess || !IsUnderwaterPostProcessEnabled() || SceneView->Family->EngineShowFlags.PathTracing)
{
UnderwaterPostProcessVolume.PostProcessProperties.bIsEnabled = false;
UnderwaterPostProcessVolume.PostProcessProperties.Settings = nullptr;
}
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineRenderPasses/Private/Graph/Renderers/MovieGraphImagePassBase.cpp:242
Scope (from outer to inner):
file
namespace UE::MovieGraph::Rendering
function void FMovieGraphImagePassBase::ApplyMovieGraphOverridesToSceneView
Source code excerpt:
{
bool bIsSupportedAAMethod = View->AntiAliasingMethod == EAntiAliasingMethod::AAM_FXAA;
bool bIsPathTracer = InOutFamily->EngineShowFlags.PathTracing;
bool bWarnJitters = InCameraInfo.ProjectionMatrixJitterAmount.SquaredLength() > SMALL_NUMBER;
if ((!bIsPathTracer && !bIsSupportedAAMethod) || bWarnJitters)
{
UE_LOG(LogMovieRenderPipeline, Warning, TEXT("Orthographic Cameras are only supported with PathTracer or Deferred with FXAA Anti-Aliasing"));
}
}
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineRenderPasses/Private/Graph/Renderers/MovieGraphImagePassBase.cpp:274
Scope (from outer to inner):
file
namespace UE::MovieGraph::Rendering
function void FMovieGraphImagePassBase::ApplyMovieGraphOverridesToSceneView
Source code excerpt:
// inside FSceneRenderer::PreVisibilityFrameSetup. Path Tracing does its own anti-aliasing internally.
bool bApplyProjectionJitter = !bIsOrthographicCamera
&& !InOutFamily->EngineShowFlags.PathTracing
&& !IsTemporalAccumulationBasedMethod(View->AntiAliasingMethod);
if (bApplyProjectionJitter)
{
View->ViewMatrices.HackAddTemporalAAProjectionJitter(InCameraInfo.ProjectionMatrixJitterAmount);
}
}
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineRenderPasses/Private/MoviePipelineImagePassBase.cpp:296
Scope (from outer to inner):
file
function TSharedPtr<FSceneViewFamilyContext> UMoviePipelineImagePassBase::CalculateViewFamily
Source code excerpt:
{
bool bIsSupportedAAMethod = View->AntiAliasingMethod == EAntiAliasingMethod::AAM_FXAA;
bool bIsPathTracer = OutViewFamily->EngineShowFlags.PathTracing;
bool bWarnJitters = InOutSampleState.ProjectionMatrixJitterAmount.SquaredLength() > SMALL_NUMBER;
if ((!bIsPathTracer && !bIsSupportedAAMethod) || bWarnJitters)
{
UE_LOG(LogMovieRenderPipeline, Warning, TEXT("Orthographic Cameras are only supported with PathTracer or Deferred with FXAA Anti-Aliasing"));
}
}
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineRenderPasses/Private/MoviePipelineImagePassBase.cpp:345
Scope (from outer to inner):
file
function TSharedPtr<FSceneViewFamilyContext> UMoviePipelineImagePassBase::CalculateViewFamily
Source code excerpt:
// inside FSceneRenderer::PreVisibilityFrameSetup. Path Tracing does its own anti-aliasing internally.
bool bApplyProjectionJitter = !bIsOrthographicCamera
&& !OutViewFamily->EngineShowFlags.PathTracing
&& !IsTemporalAccumulationBasedMethod(View->AntiAliasingMethod);
if (bApplyProjectionJitter)
{
View->ViewMatrices.HackAddTemporalAAProjectionJitter(InOutSampleState.ProjectionMatrixJitterAmount);
}
}
// Path Tracer Sampling
if (OutViewFamily->EngineShowFlags.PathTracing)
{
// override whatever settings came from PostProcessVolume or Camera
// If motion blur is enabled:
// blend all spatial samples together while leaving the handling of temporal samples up to MRQ
// each temporal sample will include denoising and post-process effects
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomComponent.cpp:653
Scope (from outer to inner):
file
class class FHairStrandsSceneProxy final : public FPrimitiveSceneProxy
function virtual void GetDynamicRayTracingInstances
Source code excerpt:
const bool bWireframe = AllowDebugViewmodes() && Context.ReferenceViewFamily.EngineShowFlags.Wireframe;
const EHairViewRayTracingMask ViewRayTracingMask = Context.ReferenceViewFamily.EngineShowFlags.PathTracing ? EHairViewRayTracingMask::PathTracing : EHairViewRayTracingMask::RayTracing;
if (bWireframe)
return;
for (uint32 GroupIt = 0, GroupCount = HairGroupInstances.Num(); GroupIt < GroupCount; ++GroupIt)
{
FHairGroupInstance* Instance = HairGroupInstances[GroupIt];
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomComponent.cpp:669
Scope (from outer to inner):
file
class class FHairStrandsSceneProxy final : public FPrimitiveSceneProxy
function virtual void GetDynamicRayTracingInstances
Source code excerpt:
FHairStrandsRaytracingResource* RTGeometry = nullptr;
bool bIsHairStrands = false;
EHairViewRayTracingMask InstanceViewRayTracingMask = EHairViewRayTracingMask::PathTracing | EHairViewRayTracingMask::RayTracing;
switch (GeometryType)
{
case EHairGeometryType::Strands:
{
RTGeometry = Instance->Strands.RenRaytracingResource;
InstanceViewRayTracingMask = Instance->Strands.ViewRayTracingMask;
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomComponent.cpp:703
Scope (from outer to inner):
file
class class FHairStrandsSceneProxy final : public FPrimitiveSceneProxy
function virtual void GetDynamicRayTracingInstances
Source code excerpt:
check(Segment.VertexBuffer.IsValid());
}
// ViewFamily.EngineShowFlags.PathTracing
if (FMeshBatch* MeshBatch = CreateMeshBatch(Context.ReferenceView, Context.ReferenceViewFamily, Context.RayTracingMeshResourceCollector, EHairMeshBatchType::Raytracing, Instance, GroupIt, nullptr))
{
FRayTracingInstance RayTracingInstance;
RayTracingInstance.Geometry = &RTGeometry->RayTracingGeometry;
RayTracingInstance.Materials.Add(*MeshBatch);
RayTracingInstance.InstanceTransforms.Add(OverrideLocalToWorld);
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomComponent.cpp:1073
Scope (from outer to inner):
file
class class FHairStrandsSceneProxy final : public FPrimitiveSceneProxy
function virtual FPrimitiveViewRelevance GetViewRelevance
Source code excerpt:
// When path tracing is enabled force DrawRelevance if not visible in main view ('hidden in game'),
// but visible in shadow 'hidden shadow') so that raytracing geometry is created/updated correctly
const bool bPathtracing = View->Family->EngineShowFlags.PathTracing;
const bool bForceDrawRelevance = bPathtracing && (!IsShown(View) && IsShadowCast(View));
bool bUseCardsOrMesh = false;
for (const TRefCountPtr<FHairGroupInstance>& Instance : HairGroupInstances)
{
check(Instance->GetRefCount());
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomComponent.cpp:2907
Scope (from outer to inner):
file
function void UGroomComponent::InitResources
Source code excerpt:
if (IsHairRayTracingEnabled() && HairGroupInstance->Strands.Modifier.bUseHairRaytracingGeometry && bVisibleInRayTracing)
{
HairGroupInstance->Strands.ViewRayTracingMask = EHairViewRayTracingMask::RayTracing | EHairViewRayTracingMask::PathTracing;
if (bNeedDynamicResources)
{
// Allocate dynamic raytracing resources (owned by the groom component/instance)
HairGroupInstance->Strands.RenRaytracingResource = new FHairStrandsRaytracingResource(GroupData.Strands.BulkData, ResourceName, OwnerName);
HairGroupInstance->Strands.RenRaytracingResourceOwned = true;
}
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomManager.cpp:1128
Scope (from outer to inner):
file
function static void RunHairStrandsInterpolation_Strands
Source code excerpt:
// Gather all strands instances
const EHairViewRayTracingMask ViewRayTracingMask = RHI_RAYTRACING ? (View->Family->EngineShowFlags.PathTracing ? EHairViewRayTracingMask::PathTracing : EHairViewRayTracingMask::RayTracing) : EHairViewRayTracingMask::None;
bool bHasAnySimCacheInstances = false;
bool bHasAnyRenCacheInstances = false;
bool bHasAnyRaytracingInstances = false;
TArray<FInstanceData> InstanceDatas;
InstanceDatas.Reserve(Instances.Num());
for (FHairStrandsInstance* AbstractInstance : Instances)
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomManager.cpp:2264
Scope (from outer to inner):
file
function static void AllocateRaytracingResources
Source code excerpt:
Instance->Strands.RenRaytracingResourceOwned = true;
}
Instance->Strands.ViewRayTracingMask |= EHairViewRayTracingMask::PathTracing;
}
#endif
void AddHairStreamingRequest(FHairGroupInstance* Instance, int32 InLODIndex)
{
if (Instance && InLODIndex >= 0)
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomManager.cpp:2792
Scope (from outer to inner):
file
function static void RunHairLODSelection
Source code excerpt:
for (const FSceneView* View : Views)
{
if (View->Family->EngineShowFlags.PathTracing)
{
bHasPathTracingView = true;
break;
}
}
#endif
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/HairStrandsInterpolation.cpp:1749
Scope (from outer to inner):
file
function FHairGroupPublicData::FVertexFactoryInput InternalComputeHairStrandsVertexInputData
Source code excerpt:
bool bRaytracingGeometry = false;
#if RHI_RAYTRACING
// Flag bUseRaytracingGeometry only if RT geometry has been allocated for RayTracing view (not for PathTracing view).
// This flag is used later for selecting if voxelization needs to flags voxel has shadow caster or if shadow casting is handled
// by the RT geometry.
bRaytracingGeometry = Instance->Strands.RenRaytracingResource != nullptr && EnumHasAnyFlags(Instance->Strands.ViewRayTracingMask, EHairViewRayTracingMask::RayTracing);
#endif
OutVFInput.Strands.Common.RegisteredIndex = Instance->RegisteredIndex;
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Public/GroomInstance.h:71
Scope: file
Source code excerpt:
None = 0x0,
RayTracing = 0x1, // Visible for raytracing effects (RT shadow, RT refleciton, Lumen, ...)
PathTracing = 0x2, // Visible for pathtracing rendering
};
ENUM_CLASS_FLAGS(EHairViewRayTracingMask);
// Represent/Describe data & resources of a hair group belonging to a groom
struct HAIRSTRANDSCORE_API FHairGroupInstance : public FHairStrandsInstance
{
#Loc: <Workspace>/Engine/Plugins/Runtime/nDisplay/Source/DisplayCluster/Private/Game/EngineClasses/Basics/DisplayClusterViewportClient.cpp:461
Scope (from outer to inner):
file
function void UDisplayClusterViewportClient::Draw
Source code excerpt:
// Force path tracing view mode, and extern code set path tracer show flags
const bool bForcePathTracing = InViewport->GetClient()->GetEngineShowFlags()->PathTracing;
if (bForcePathTracing)
{
EngineShowFlags.SetPathTracing(true);
ViewModeIndex = VMI_PathTracing;
}
#Loc: <Workspace>/Engine/Source/Editor/MovieSceneCaptureDialog/Private/MovieSceneCaptureDialogModule.cpp:547
Scope (from outer to inner):
file
function void FInEditorCapture::OnPIEViewportStarted
Source code excerpt:
if (CachedEngineShowFlags && Settings.bUsePathTracer)
{
CachedPathTracingMode = CachedEngineShowFlags->PathTracing;
CachedEngineShowFlags->SetPathTracing(true);
}
CaptureObject->Initialize(SlatePlayInEditorSession->SlatePlayInEditorWindowViewport, Context.PIEInstance);
OnCaptureStarted();
}
return;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/EditorViewportClient.cpp:2897
Scope (from outer to inner):
file
function EViewStatusForScreenPercentage FEditorViewportClient::GetViewStatusForScreenPercentage
Source code excerpt:
EViewStatusForScreenPercentage FEditorViewportClient::GetViewStatusForScreenPercentage() const
{
if (EngineShowFlags.PathTracing)
{
return EViewStatusForScreenPercentage::PathTracer;
}
else if (EngineShowFlags.StereoRendering || EngineShowFlags.VREditing)
{
return EViewStatusForScreenPercentage::VR;
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/GameViewportClient.cpp:1348
Scope (from outer to inner):
file
function EViewStatusForScreenPercentage UGameViewportClient::GetViewStatusForScreenPercentage
Source code excerpt:
EViewStatusForScreenPercentage UGameViewportClient::GetViewStatusForScreenPercentage() const
{
if (EngineShowFlags.PathTracing)
{
return EViewStatusForScreenPercentage::PathTracer;
}
else if (EngineShowFlags.StereoRendering)
{
return EViewStatusForScreenPercentage::VR;
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/SceneView.cpp:2717
Scope (from outer to inner):
file
function void FSceneView::SetupCommonViewUniformBufferParameters
Source code excerpt:
ViewUniformShaderParameters.DebugViewModeMask = Family->UseDebugViewPS() ? 1 : 0;
ViewUniformShaderParameters.UnlitViewmodeMask = !Family->EngineShowFlags.Lighting || Family->EngineShowFlags.PathTracing ? 1 : 0;
ViewUniformShaderParameters.OutOfBoundsMask = Family->EngineShowFlags.VisualizeOutOfBoundsPixels ? 1 : 0;
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
float OverrideTimeMaterialExpression = CVarOverrideTimeMaterialExpressions.GetValueOnRenderThread();
if (OverrideTimeMaterialExpression >= 0.0f)
{
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/ShowFlags.cpp:818
Scope: file
Source code excerpt:
return VMI_HLODColoration;
}
else if (EngineShowFlags.PathTracing)
{
return VMI_PathTracing;
}
else if (EngineShowFlags.RayTracingDebug)
{
return VMI_RayTracingDebug;
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/UnrealEngine.cpp:12180
Scope (from outer to inner):
file
function float DrawMapWarnings
Source code excerpt:
if (Viewport && Viewport->GetClient() && Viewport->GetClient()->GetEngineShowFlags())
{
bIsPathTracing = Viewport->GetClient()->GetEngineShowFlags()->PathTracing != 0;
}
// Put the messages over fairly far to stay in the safe zone on consoles
if (World->NumLightingUnbuiltObjects > 0 && !bIsPathTracing)
{
SmallTextItem.SetColor(FLinearColor::White);
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:394
Scope: file
Source code excerpt:
// 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"))
// RHI_RAYTRACING end
/** Enable the SkyAtmosphere visualization to be drawn on screen */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeSkyAtmosphere, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeSkyAtmosphereSF", "Sky Atmosphere"))
/** Enable the light function atlas debug visualization to be drawn on screen */
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:575
Scope: file
Source code excerpt:
}
return ViewFamily.EngineShowFlags.PathTracing && PathTracing::UsesDecals(ViewFamily);
}
struct FRayTracingRelevantPrimitiveTaskData
{
RayTracing::FRelevantPrimitiveList* List;
FGraphEventRef Task;
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:642
Scope: file
Source code excerpt:
}
const bool bIsPathTracing = ViewFamily.EngineShowFlags.PathTracing;
if (GRHISupportsRayTracingShaders)
{
// #dxr_todo: UE-72565: refactor ray tracing effects to not be member functions of DeferredShadingRenderer.
// Should register each effect at startup and just loop over them automatically to gather all required shaders.
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:757
Scope: file
Source code excerpt:
}
const bool bPathTracingEnabled = ViewFamily.EngineShowFlags.PathTracing && FDataDrivenShaderPlatformInfo::GetSupportsPathTracing(Scene->GetShaderPlatform());
for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ++ViewIndex)
{
FViewInfo& View = Views[ViewIndex];
bool bBuildLightGrid = false;
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:999
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::WaitForRayTracingScene
Source code excerpt:
}
const bool bIsPathTracing = ViewFamily.EngineShowFlags.PathTracing;
FBuildAccelerationStructurePassParams* PassParams = GraphBuilder.AllocParameters<FBuildAccelerationStructurePassParams>();
PassParams->Scene = GetSceneUniformBufferRef(GraphBuilder);
PassParams->RayTracingSceneScratchBuffer = nullptr;
PassParams->DynamicGeometryScratchBuffer = nullptr;
PassParams->LightGridPacked = bIsPathTracing ? nullptr : ReferenceView.RayTracingLightGridUniformBuffer; // accessed by FRayTracingLightingMS // Is this needed for anything?
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:1502
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::Render
Source code excerpt:
// This needs to be done prior to start Lumen scene lighting to ensure directional light color is correct, as the sun color needs atmosphere transmittance
{
const bool bPathTracedAtmosphere = ViewFamily.EngineShowFlags.PathTracing && Views.Num() > 0 && Views[0].FinalPostProcessSettings.PathTracingEnableReferenceAtmosphere;
if (ShouldRenderSkyAtmosphere(Scene, ViewFamily.EngineShowFlags) && !bPathTracedAtmosphere)
{
for (int32 LightIndex = 0; LightIndex < NUM_ATMOSPHERE_LIGHTS; ++LightIndex)
{
if (Scene->AtmosphereLights[LightIndex])
{
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:1653
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::Render
Source code excerpt:
// By default, limit our GPU usage to only GPUs specified in the view masks.
RDG_GPU_MASK_SCOPE(GraphBuilder, ViewFamily.EngineShowFlags.PathTracing ? FRHIGPUMask::All() : AllViewsGPUMask);
RDG_EVENT_SCOPE(GraphBuilder, "Scene");
RDG_GPU_STAT_SCOPE_VERBOSE(GraphBuilder, Unaccounted, *ViewFamily.ProfileDescription);
if (RendererOutput == ERendererOutput::FinalSceneColor)
{
SCOPE_CYCLE_COUNTER(STAT_FDeferredShadingSceneRenderer_Render_Init);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:1772
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::Render
Source code excerpt:
Nanite::GRayTracingManager.Update();
if (!ViewFamily.EngineShowFlags.PathTracing)
{
// get the default lighting miss shader (to implicitly fill in the MissShader library before the RT pipeline is created)
GetRayTracingLightingMissShader(ReferenceView.ShaderMap);
RayTracingScene.NumMissShaderSlots++;
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:1783
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::Render
Source code excerpt:
// gather all the light functions that may be used (and also count how many miss shaders we will need)
FRayTracingLightFunctionMap RayTracingLightFunctionMap;
if (ViewFamily.EngineShowFlags.PathTracing)
{
RayTracingLightFunctionMap = GatherLightFunctionLightsPathTracing(Scene, ViewFamily.EngineShowFlags, ReferenceView.GetFeatureLevel());
}
else
{
RayTracingLightFunctionMap = GatherLightFunctionLights(Scene, ViewFamily.EngineShowFlags, ReferenceView.GetFeatureLevel());
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:1925
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::Render
Source code excerpt:
ShouldVisualizeLightGrid() ||
ShouldRenderLocalFogVolume(Scene, ViewFamily)); // Needed when accessing forward light data for the directional light
bComputeLightGrid &= !ViewFamily.EngineShowFlags.PathTracing;
}
}
// force using occ queries for wireframe if rendering is parented or frozen in the first view
check(Views.Num());
#if (UE_BUILD_SHIPPING || UE_BUILD_TEST)
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:3186
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::Render
Source code excerpt:
// Most of the ray tracing debug visualizations also require the full pipeline, but some support inline mode.
if (ViewFamily.EngineShowFlags.PathTracing
&& FDataDrivenShaderPlatformInfo::GetSupportsPathTracing(Scene->GetShaderPlatform()))
{
for (const FViewInfo& View : Views)
{
RenderPathTracing(GraphBuilder, View, SceneTextures.UniformBuffer, SceneTextures.Color.Target, SceneTextures.Depth.Target,PathTracingResources);
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DeferredShadingRenderer.cpp:3509
Scope (from outer to inner):
file
function bool HasRayTracedOverlay
Source code excerpt:
// This can be used to skip certain calculations
return
ViewFamily.EngineShowFlags.PathTracing ||
ViewFamily.EngineShowFlags.RayTracingDebug;
}
void FDeferredShadingSceneRenderer::InitializeRayTracingFlags_RenderThread()
{
// The result of this call is used by AnyRayTracingPassEnabled to decide if we have any RT shadows enabled
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DistanceFieldAmbientOcclusion.cpp:738
Scope (from outer to inner):
file
function bool FSceneRenderer::ShouldPrepareDistanceFieldScene
Source code excerpt:
const bool bShouldPrepareForDFInsetIndirectShadow = ShouldPrepareForDFInsetIndirectShadow();
if (ViewFamily.EngineShowFlags.PathTracing)
{
return bShouldPrepareGlobalDistanceField;
}
// Prepare the distance field scene (object buffers and distance field atlas) if any feature needs it
return bShouldPrepareGlobalDistanceField
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DistanceFieldAmbientOcclusion.cpp:769
Scope (from outer to inner):
file
function bool FSceneRenderer::ShouldPrepareGlobalDistanceField
Source code excerpt:
|| ((FXSystem != nullptr) && FXSystem->UsesGlobalDistanceField());
if (ViewFamily.EngineShowFlags.PathTracing)
{
return bShouldPrepareForMaterialsOrNiagara;
}
const bool bShouldPrepareForAO = SupportsDistanceFieldAO(Scene->GetFeatureLevel(), Scene->GetShaderPlatform())
&& (ShouldPrepareForDistanceFieldAO() || bShouldPrepareForMaterialsOrNiagara);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DistanceFieldAmbientOcclusion.cpp:936
Scope (from outer to inner):
file
function bool FSceneRenderer::ShouldRenderDistanceFieldAO
Source code excerpt:
&& !ViewFamily.EngineShowFlags.VisualizeMeshDistanceFields
&& !ViewFamily.EngineShowFlags.VisualizeGlobalDistanceField
&& !ViewFamily.EngineShowFlags.PathTracing;
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/DistanceFieldShadowing.cpp:730
Scope (from outer to inner):
file
function bool FSceneRenderer::ShouldPrepareHeightFieldScene
Source code excerpt:
return Scene
&& ViewFamily.EngineShowFlags.DynamicShadows
&& !ViewFamily.EngineShowFlags.PathTracing
&& SupportsHeightFieldShadows(Scene->GetFeatureLevel(), Scene->GetShaderPlatform());
}
void RayTraceShadows(
FRDGBuilder& GraphBuilder,
bool bAsyncCompute,
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/HeterogeneousVolumes/HeterogeneousVolumes.h:257
Scope: file
Source code excerpt:
enum class EVoxelGridBuildMode
{
PathTracing,
Shadows,
};
struct FVoxelGridBuildOptions
{
EVoxelGridBuildMode VoxelGridBuildMode = EVoxelGridBuildMode::PathTracing;
float MinimumVoxelSizeOutsideFrustum = HeterogeneousVolumes::GetMinimumVoxelSizeOutsideFrustum();
float MinimumVoxelSizeInFrustum = HeterogeneousVolumes::GetMinimumVoxelSizeInFrustum();
bool bBuildOrthoGrid = true;
bool bBuildFrustumGrid = true;
bool bJitter = HeterogeneousVolumes::ShouldJitter();
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/HeterogeneousVolumes/HeterogeneousVolumesVoxelGridPipeline.cpp:2651
Scope (from outer to inner):
file
function bool ShouldAddToVoxelGrid
Source code excerpt:
{
default:
case EVoxelGridBuildMode::PathTracing:
return Proxy->IsShown(&View);
case EVoxelGridBuildMode::Shadows:
return Proxy->IsShadowCast(&View);
}
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/IndirectLightRendering.cpp:1911
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::RenderDeferredReflectionsAndSkyLighting
Source code excerpt:
if (ViewFamily.EngineShowFlags.VisualizeLightCulling
|| ViewFamily.EngineShowFlags.RayTracingDebug
|| ViewFamily.EngineShowFlags.PathTracing
|| !ViewFamily.EngineShowFlags.Lighting
|| GLumenVisualizeIndirectDiffuse != 0)
{
return;
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/Lumen/LumenDiffuseIndirect.cpp:276
Scope (from outer to inner):
file
function bool ShouldRenderLumenDiffuseGI
Source code excerpt:
&& View.Family->EngineShowFlags.GlobalIllumination
&& View.Family->EngineShowFlags.LumenGlobalIllumination
&& !View.Family->EngineShowFlags.PathTracing
&& (bSkipTracingDataCheck || Lumen::UseHardwareRayTracedScreenProbeGather(*View.Family) || Lumen::IsSoftwareRayTracingSupported());
}
bool ShouldRenderLumenDirectLighting(const FScene* Scene, const FSceneView& View)
{
return ShouldRenderLumenDiffuseGI(Scene, View)
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PathTracing.cpp:1709
Scope (from outer to inner):
file
function bool FRayTracingMeshProcessor::ProcessPathTracing
Source code excerpt:
RayTracingShader,
ShaderElementData,
ERayTracingViewMaskMode::PathTracing);
return true;
}
RENDERER_API void PrepareSkyTexture_Internal(
FRDGBuilder& GraphBuilder,
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PathTracing.cpp:2316
Scope (from outer to inner):
file
function void FDeferredShadingSceneRenderer::PreparePathTracing
Source code excerpt:
void FDeferredShadingSceneRenderer::PreparePathTracing(const FSceneViewFamily& ViewFamily, const FScene& Scene, TArray<FRHIRayTracingShader*>& OutRayGenShaders)
{
if (ViewFamily.EngineShowFlags.PathTracing
&& ShouldCompilePathTracingShadersForProject(ViewFamily.GetShaderPlatform()))
{
// Declare all RayGen shaders that require material closest hit shaders to be bound
FPathTracingRG::FPermutationDomain PermutationVector = GetPathTracingRGPermutation(Scene);
{
auto RayGenShader = GetGlobalShaderMap(ViewFamily.GetShaderPlatform())->GetShader<FPathTracingRG>(PermutationVector);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PathTracing.cpp:2825
Scope: file
Source code excerpt:
RDG_EVENT_SCOPE_CONDITIONAL(GraphBuilder, NumGPUs > 1, "Path Tracing GPU%d", GPUIndex);
#if WITH_MGPU
RDG_GPU_STAT_SCOPE(GraphBuilder, PathTracing);
#endif
for (int32 TileY = 0; TileY < DispatchResY; TileY += DispatchSize)
{
for (int32 TileX = 0; TileX < DispatchResX; TileX += DispatchSize)
{
const int32 DispatchSizeX = FMath::Min(DispatchSize, DispatchResX - TileX);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PathTracingSpatialTemporalDenoising.cpp:466
Scope (from outer to inner):
file
function static bool ShouldCompilePathTracingDenoiserShadersForProject
Source code excerpt:
{
static const auto CVarLocalVariablePathTracing = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.PathTracing"));
const int PathTracing = CVarLocalVariablePathTracing ? CVarLocalVariablePathTracing->GetValueOnAnyThread() : 0;
return ShouldCompileRayTracingShadersForProject(ShaderPlatform) &&
FDataDrivenShaderPlatformInfo::GetSupportsPathTracing(ShaderPlatform) &&
PathTracing != 0;
}
static bool ShouldGenerateVarianceMap()
{
int32 PathTracingTemporalDenoiserSource = CVarPathTracingTemporalDenoiserSource.GetValueOnRenderThread();
return PathTracingTemporalDenoiserSource < 0 || PathTracingTemporalDenoiserSource > 3;
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/DiaphragmDOF.cpp:1361
Scope (from outer to inner):
file
function DiaphragmDOF::IsEnabled
Source code excerpt:
View.Family->EngineShowFlags.DepthOfField &&
bDepthOfFieldRequestedByCVar &&
!(View.Family->EngineShowFlags.PathTracing && View.FinalPostProcessSettings.PathTracingEnableReferenceDOF) &&
((View.FinalPostProcessSettings.DepthOfFieldFstop > 0.f && View.FinalPostProcessSettings.DepthOfFieldFocalDistance > 0.f) || View.FinalPostProcessSettings.DepthOfFieldDepthBlurRadius > 0.f);
}
bool DiaphragmDOF::AddPasses(
FRDGBuilder& GraphBuilder,
const FSceneTextureParameters& SceneTextures,
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessEyeAdaptation.cpp:191
Scope (from outer to inner):
file
function bool IsAutoExposureUsingIlluminanceEnabled
Source code excerpt:
bool IsAutoExposureUsingIlluminanceEnabled(const FViewInfo& View)
{
// NOTE: This method cannot be supported with PathTracing because it requires a GBuffer which is not available in the path tracing case
return CVarAutoExposureIgnoreMaterials.GetValueOnRenderThread() && GetAutoExposureMethod(View) == AEM_Histogram && !View.Family->EngineShowFlags.PathTracing;
}
int32 GetAutoExposureIlluminanceDownscaleFactor()
{
int32 DownscaleFactor = CVarAutoExposureIgnoreMaterialsDownscaleFactor.GetValueOnRenderThread();
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessVisualizeBuffer.cpp:353
Scope (from outer to inner):
file
function FScreenPassTexture AddVisualizeGBufferOverviewPass
Source code excerpt:
PostProcessMaterialInputs.SetInput(GraphBuilder, EPostProcessMaterialInput::Velocity, Inputs.Velocity);
if (View.Family->EngineShowFlags.PathTracing && Inputs.PathTracingResources->bPostProcessEnabled)
{
const FPathTracingResources& PathTracingResources = *Inputs.PathTracingResources;
FIntRect ViewRect = Inputs.SceneColor.ViewRect;
PostProcessMaterialInputs.SetPathTracingInput(
EPathTracingPostProcessMaterialInput::DenoisedRadiance, FScreenPassTexture(PathTracingResources.DenoisedRadiance, ViewRect));
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessVisualizeHDR.cpp:59
Scope (from outer to inner):
file
function bool IsIlluminanceMeterSupportedByView
Source code excerpt:
bool IsIlluminanceMeterSupportedByView(const FViewInfo& View)
{
return !IsForwardShadingEnabled(View.GetShaderPlatform()) && !View.Family->EngineShowFlags.PathTracing;
}
FScreenPassTexture AddVisualizeHDRPass(FRDGBuilder& GraphBuilder, const FViewInfo& View, const FVisualizeHDRInputs& Inputs)
{
check(Inputs.SceneColor.IsValid());
check(Inputs.SceneColorBeforeTonemap.IsValid());
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/RayTracing/RayTracing.cpp:225
Scope (from outer to inner):
file
namespace RayTracing
function void OnRenderBegin
Source code excerpt:
void OnRenderBegin(FScene& Scene, TArray<FViewInfo>& Views, const FViewFamilyInfo& ViewFamily)
{
const ERayTracingMeshCommandsMode CurrentMode = ViewFamily.EngineShowFlags.PathTracing ? ERayTracingMeshCommandsMode::PATH_TRACING : ERayTracingMeshCommandsMode::RAY_TRACING;
bool bNaniteCoarseMeshStreamingModeChanged = false;
#if WITH_EDITOR
bNaniteCoarseMeshStreamingModeChanged = Nanite::FCoarseMeshStreamingManager::CheckStreamingMode();
#endif // WITH_EDITOR
const bool bNaniteRayTracingModeChanged = Nanite::GRayTracingManager.CheckModeChanged();
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/RayTracing/RayTracing.cpp:1398
Scope (from outer to inner):
file
namespace RayTracing
function bool GatherWorldInstancesForView
Source code excerpt:
RelevantPrimitiveList.GatherContexts,
View.RayTracingCullingParameters,
bool(View.Family->EngineShowFlags.PathTracing),
RelevantPrimitiveList.NumCachedStaticSceneInstances,
RelevantPrimitiveList.NumCachedStaticVisibleMeshCommands,
// outputs
RayTracingScene,
View.VisibleRayTracingMeshCommands
);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/RayTracing/RayTracingInstanceCulling.cpp:50
Scope (from outer to inner):
file
function RayTracing::ECullingMode RayTracing::GetCullingMode
Source code excerpt:
{
// Disable culling if path tracer is used, so that path tracer matches raster view
if (ShowFlags.PathTracing)
{
return ECullingMode::Disabled;
}
return (ECullingMode) FMath::Clamp(CVarRayTracingCulling.GetValueOnRenderThread(), 0, int32(ECullingMode::MAX) - 1);
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/RayTracing/RayTracingInstanceMask.cpp:52
Scope (from outer to inner):
file
function uint8 ComputeRayTracingInstanceMask
Source code excerpt:
}
}
else if (MaskMode == ERayTracingViewMaskMode::PathTracing ||
MaskMode == ERayTracingViewMaskMode::LightMapTracing)
{
switch (MaskType)
{
case ERayTracingInstanceMaskType::Opaque:
Mask = PATHTRACER_MASK_CAMERA | PATHTRACER_MASK_INDIRECT;
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/RayTracing/RayTracingInstanceMask.cpp:122
Scope (from outer to inner):
file
function FSceneProxyRayTracingMaskInfo GetSceneProxyRayTracingMaskInfo
Source code excerpt:
if (SceneViewFamily)
{
if (SceneViewFamily->EngineShowFlags.PathTracing)
{
MaskMode = ERayTracingViewMaskMode::PathTracing;
}
}
else
{
FScene* RenderScene = PrimitiveSceneProxy.GetScene().GetRenderScene();
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/RayTracing/RayTracingInstanceMask.cpp:270
Scope (from outer to inner):
file
function void SetupRayTracingMeshCommandMaskAndStatus
Source code excerpt:
// TODO: This should be done once all mesh commands for a mesh are combined (similar to BuildRayTracingInstanceMaskAndFlags(...) above)
if (MaskMode == ERayTracingViewMaskMode::PathTracing || MaskMode == ERayTracingViewMaskMode::LightMapTracing)
{
if (!MaskInfo.bAffectsDynamicIndirectLighting)
{
// If the object does not affect indirect lighting, remove all indirect bits.
MeshCommand.InstanceMask &= ~ComputeRayTracingInstanceMask(ERayTracingInstanceMaskType::VisibleInIndirectRay, MaskMode);
}
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/RayTracing/RayTracingInstanceMask.h:29
Scope: file
Source code excerpt:
{
RayTracing,
PathTracing,
LightMapTracing,
};
uint8 ComputeRayTracingInstanceMask(ERayTracingInstanceMaskType MaskType, ERayTracingViewMaskMode MaskMode);
/** Compute the mask based on blend mode for different ray tracing mode*/
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/RayTracing/RayTracingMaterialHitShaders.cpp:631
Scope (from outer to inner):
file
function FRayTracingPipelineState* FDeferredShadingSceneRenderer::CreateRayTracingMaterialPipeline
Source code excerpt:
FRHICommandList& RHICmdList = GraphBuilder.RHICmdList;
const bool bIsPathTracing = ViewFamily.EngineShowFlags.PathTracing;
const bool bSupportMeshDecals = bIsPathTracing;
ERayTracingPayloadType PayloadType = bIsPathTracing
? (ERayTracingPayloadType::PathTracingMaterial | ERayTracingPayloadType::Decals)
: ERayTracingPayloadType::RayTracingMaterial;
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/SceneRendering.cpp:3086
Scope (from outer to inner):
file
function void FSceneRenderer::PrepareViewRectsForRendering
Source code excerpt:
#if RHI_RAYTRACING
// path tracer does its own anti-aliasing
&& (!ViewFamily.EngineShowFlags.PathTracing)
#endif
;
if (!bWillApplyTemporalAA)
{
// Disable anti-aliasing if we are not going to be able to apply final post process effects
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/ShadingEnergyConservation.cpp:227
Scope (from outer to inner):
file
function namespace ShadingEnergyConservation { bool IsEnable
function void Init
Source code excerpt:
// the correct tables built & bound. Even if we are not using energy conservation, we want to
// have access to directional albedo information for env. lighting for instance)
const bool bBindEnergyData = (View.ViewState != nullptr) && (bMaterialEnergyConservationEnabled || Substrate::IsSubstrateEnabled() || (View.Family->EngineShowFlags.PathTracing && RHI_RAYTRACING)) && (bIsEnergyPreservationEnabled || bIsEnergyConservationEnabled);
if (bBindEnergyData)
{
// Change this to true in order to regenerate the energy tables, and manually copy the coefficients into ShadingEnergyConservationData.h
const bool bRuntimeGeneration = false;
const int Size = SHADING_ENERGY_CONSERVATION_TABLE_RESOLUTION;
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/VolumetricCloudRendering.cpp:1785
Scope (from outer to inner):
file
function void FSceneRenderer::InitVolumetricCloudsForViews
Source code excerpt:
{
FMaterialRenderProxy* CloudVolumeMaterialProxy = CloudProxy.GetCloudVolumeMaterial()->GetRenderProxy();
if (CloudVolumeMaterialProxy->GetIncompleteMaterialWithFallback(ViewFamily.GetFeatureLevel()).GetMaterialDomain() == MD_Volume && !ViewFamily.EngineShowFlags.PathTracing)
{
RDG_EVENT_SCOPE(GraphBuilder, "VolumetricCloudShadow");
RDG_GPU_STAT_SCOPE(GraphBuilder, VolumetricCloudShadow);
TRefCountPtr<IPooledRenderTarget> BlackDummy = GSystemTextures.BlackDummy;
FRDGTextureRef BlackDummyRDG = GraphBuilder.RegisterExternalTexture(BlackDummy);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/VolumetricCloudRendering.cpp:2157
Scope (from outer to inner):
file
function static TRDGUniformBufferRef<FRenderVolumetricCloudGlobalParameters> CreateCloudPassUniformBuffer
Source code excerpt:
}
const bool bIsPathTracing = MainView.Family && MainView.Family->EngineShowFlags.PathTracing;
if (CloudRC.bIsReflectionRendering
&& !(bIsPathTracing && CloudRC.bIsSkyRealTimeReflectionRendering)) // When using path tracing and real time sky capture, the captured sky cubemap is used to render the sky in the main view. As such, we always use the view settings.
{
VolumetricCloudParams.VolumetricCloud.SampleCountMax = FMath::Max(2.0f, FMath::Min(
UVolumetricCloudComponent::BaseViewRaySampleCount * CloudInfo.GetVolumetricCloudSceneProxy().ReflectionViewSampleCountScale,
CVarVolumetricCloudReflectionRaySampleMaxCount.GetValueOnAnyThread()));