ShowFlag.DepthOfField
ShowFlag.DepthOfField
#Overview
name: ShowFlag.DepthOfField
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 19
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of ShowFlag.DepthOfField is to control the visibility and application of the Depth of Field (DOF) effect in Unreal Engine 5’s rendering pipeline. Depth of Field is a post-processing effect that simulates the focus properties of a camera lens, blurring objects that are not in the focal plane.
-
This setting variable is primarily used by the rendering system, specifically in the post-processing stage.
-
The Unreal Engine subsystems that rely on this setting variable include the Renderer module, the Engine module, and various plugins such as Composure and VirtualCamera.
-
The value of this variable is typically set through the engine’s show flags system, which allows toggling various rendering features on and off.
-
It interacts with other variables related to post-processing and camera settings, such as DepthOfFieldScale, DepthOfFieldFstop, and DepthOfFieldFocalDistance.
-
Developers must be aware that disabling this flag will prevent the Depth of Field effect from being applied, even if other DOF-related settings are configured.
-
Best practices include:
- Ensuring this flag is enabled when DOF effects are desired.
- Considering performance implications, as DOF can be computationally expensive.
- Coordinating this flag with other DOF-related settings for the desired visual effect.
Regarding the associated variable DepthOfField:
The purpose of DepthOfField is to serve as the actual implementation flag for the Depth of Field effect in various parts of the engine.
-
It is used across multiple subsystems, including the Renderer, Engine, and various plugins like Composure and VirtualCamera.
-
The value of this variable is typically set based on the ShowFlag.DepthOfField, but it can also be manipulated directly in certain contexts.
-
It interacts closely with other DOF-related variables such as DepthOfFieldFstop, DepthOfFieldFocalDistance, and DepthOfFieldScale.
-
Developers should be aware that this variable directly controls the application of the DOF effect in many rendering scenarios.
-
Best practices include:
- Ensuring consistency between this variable and ShowFlag.DepthOfField.
- Properly configuring associated DOF parameters when this is enabled.
- Considering platform-specific implementations, especially for mobile rendering.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:89
Scope: file
Source code excerpt:
SHOWFLAG_FIXED_IN_SHIPPING(0, VectorFields, SFG_Developer, NSLOCTEXT("UnrealEd", "VectorFieldsSF", "Vector Fields"))
/** Depth of Field */
SHOWFLAG_ALWAYS_ACCESSIBLE(DepthOfField, SFG_PostProcess, NSLOCTEXT("UnrealEd", "DepthOfFieldSF", "Depth Of Field"))
/** Highlight materials that indicate performance issues or show unrealistic materials */
SHOWFLAG_FIXED_IN_SHIPPING(0, GBufferHints, SFG_Developer, NSLOCTEXT("UnrealEd", "GBufferHintsSF", "GBuffer Hints (material attributes)"))
/** MotionBlur, for now only camera motion blur, for now SHOWFLAG_ALWAYS_ACCESSIBLE because it's exposed in SceneCapture */
SHOWFLAG_ALWAYS_ACCESSIBLE(MotionBlur, SFG_PostProcess, NSLOCTEXT("UnrealEd", "MotionBlurSF", "Motion Blur"))
/** Whether to render the editor gizmos and other foreground editor widgets off screen and apply them after post process, only needed for the editor */
SHOWFLAG_FIXED_IN_SHIPPING(0, CompositeEditorPrimitives, SFG_Developer, NSLOCTEXT("UnrealEd", "CompositeEditorPrimitivesSF", "Composite Editor Primitives"))
#Associated Variable and Callsites
This variable is associated with another variable named DepthOfField
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Plugins/Compositing/Composure/Source/Composure/Private/ComposureUtils.cpp:28
Scope (from outer to inner):
file
function void FComposureUtils::SetEngineShowFlagsForPostprocessingOnly
Source code excerpt:
// Development-only flags
EngineShowFlags.ReflectionOverride = false;
EngineShowFlags.DepthOfField = false;
#endif
}
// static
FVector2D FComposureUtils::GetRedGreenUVFactorsFromChromaticAberration(float ChromaticAberrationAmount)
{
#Loc: <Workspace>/Engine/Plugins/Experimental/Enterprise/DatasmithInterchange/Source/DatasmithInterchange/Private/InterchangeDatasmithTranslator.cpp:517
Scope (from outer to inner):
file
function UInterchangePhysicalCameraNode* UInterchangeDatasmithTranslator::AddCameraNode
Source code excerpt:
// TODO Add properties currently missing from the InterchangeCameraNode:
// - DepthOfField
// - FocusDistance
// - FStop
// - FocalLength
// - PostProcess
// - LookAtActor
#Loc: <Workspace>/Engine/Plugins/VirtualProduction/VirtualCamera/Source/VirtualCamera/Private/FunctionLibraries/VCamBlueprintFunctionLibrary.cpp:274
Scope (from outer to inner):
file
function bool UVCamBlueprintFunctionLibrary::UpdatePostProcessSettingsForCapture
Source code excerpt:
}
bool UVCamBlueprintFunctionLibrary::UpdatePostProcessSettingsForCapture(USceneCaptureComponent2D* CaptureComponent, float DepthOfField, float FStopValue)
{
if (CaptureComponent)
{
FPostProcessSettings NewCapturePostProcessSettings = CaptureComponent->PostProcessSettings;
NewCapturePostProcessSettings.bOverride_DepthOfFieldFstop = true;
NewCapturePostProcessSettings.bOverride_DepthOfFieldFocalDistance = true;
NewCapturePostProcessSettings.DepthOfFieldFstop = FStopValue;
NewCapturePostProcessSettings.DepthOfFieldFocalDistance = DepthOfField;
CaptureComponent->PostProcessSettings = NewCapturePostProcessSettings;
return true;
}
return false;
}
#Loc: <Workspace>/Engine/Plugins/VirtualProduction/VirtualCamera/Source/VirtualCamera/Public/FunctionLibraries/VCamBlueprintFunctionLibrary.h:150
Scope (from outer to inner):
file
class class UVCamBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
Source code excerpt:
/** Updates the provided USceneCaptureComponent2D's PostProcessingSettings. Returns true on success. */
UFUNCTION(BlueprintCallable, Category = "VirtualCamera")
static bool UpdatePostProcessSettingsForCapture(USceneCaptureComponent2D* CaptureComponent, float DepthOfField, float FStopValue);
/** Grab the display rate from a LevelSequences' MovieScene */
UFUNCTION(BlueprintCallable, Category = "VirtualCamera")
static FFrameRate GetDisplayRate(ULevelSequence* LevelSequence);
/** Converts a double framerate to a FFrameRate */
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/SceneView.cpp:2108
Scope (from outer to inner):
file
function void FSceneView::EndFinalPostprocessSettings
Source code excerpt:
}
if(!Family->EngineShowFlags.DepthOfField)
{
FinalPostProcessSettings.DepthOfFieldScale = 0;
}
if(!Family->EngineShowFlags.Vignette)
{
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/ShowFlags.cpp:637
Scope (from outer to inner):
file
function void EngineShowFlagOverride
Source code excerpt:
DISABLE_ENGINE_SHOWFLAG(EyeAdaptation)
DISABLE_ENGINE_SHOWFLAG(SeparateTranslucency)
DISABLE_ENGINE_SHOWFLAG(DepthOfField)
DISABLE_ENGINE_SHOWFLAG(AmbientOcclusion)
DISABLE_ENGINE_SHOWFLAG(CameraImperfections)
DISABLE_ENGINE_SHOWFLAG(Decals)
DISABLE_ENGINE_SHOWFLAG(LensFlares)
DISABLE_ENGINE_SHOWFLAG(Bloom)
DISABLE_ENGINE_SHOWFLAG(ColorGrading)
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:89
Scope: file
Source code excerpt:
SHOWFLAG_FIXED_IN_SHIPPING(0, VectorFields, SFG_Developer, NSLOCTEXT("UnrealEd", "VectorFieldsSF", "Vector Fields"))
/** Depth of Field */
SHOWFLAG_ALWAYS_ACCESSIBLE(DepthOfField, SFG_PostProcess, NSLOCTEXT("UnrealEd", "DepthOfFieldSF", "Depth Of Field"))
/** Highlight materials that indicate performance issues or show unrealistic materials */
SHOWFLAG_FIXED_IN_SHIPPING(0, GBufferHints, SFG_Developer, NSLOCTEXT("UnrealEd", "GBufferHintsSF", "GBuffer Hints (material attributes)"))
/** MotionBlur, for now only camera motion blur, for now SHOWFLAG_ALWAYS_ACCESSIBLE because it's exposed in SceneCapture */
SHOWFLAG_ALWAYS_ACCESSIBLE(MotionBlur, SFG_PostProcess, NSLOCTEXT("UnrealEd", "MotionBlurSF", "Motion Blur"))
/** Whether to render the editor gizmos and other foreground editor widgets off screen and apply them after post process, only needed for the editor */
SHOWFLAG_FIXED_IN_SHIPPING(0, CompositeEditorPrimitives, SFG_Developer, NSLOCTEXT("UnrealEd", "CompositeEditorPrimitivesSF", "Composite Editor Primitives"))
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/ShowFlagsValues.inl:114
Scope: file
Source code excerpt:
/** Post processing filmic tone curve and expand gamut */
SHOWFLAG_ALWAYS_ACCESSIBLE(ToneCurve, SFG_PostProcess, NSLOCTEXT("UnrealEd", "ToneCurveSF", "Tone Curve"))
/** If Translucency should be rendered into a separate RT and composited without DepthOfField, can be disabled in the materials (affects sorting), SHOWFLAG_ALWAYS_ACCESSIBLE for now because USceneCaptureComponent needs that */
SHOWFLAG_ALWAYS_ACCESSIBLE(SeparateTranslucency, SFG_Advanced, NSLOCTEXT("UnrealEd", "SeparateTranslucencySF", "Separate Translucency"))
/** If Screen Percentage should be applied. */
SHOWFLAG_ALWAYS_ACCESSIBLE(ScreenPercentage, SFG_Hidden, NSLOCTEXT("UnrealEd", "ScreenPercentageSF", "Screen Percentage"))
/** Helper to tweak motion blur settings */
SHOWFLAG_FIXED_IN_SHIPPING(0, VisualizeMotionBlur, SFG_Visualize, NSLOCTEXT("UnrealEd", "VisualizeMotionBlurSF", "Motion Blur"))
/** DEPRECATED in 5.2: Use VisualizeReprojection instead. */
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PathTracing.cpp:642
Scope (from outer to inner):
file
function static void PreparePathTracingData
Source code excerpt:
PathTracingData.CameraFocusDistance = 0;
PathTracingData.CameraLensRadius = FVector2f::ZeroVector;
if (ShowFlags.DepthOfField &&
PPV.PathTracingEnableReferenceDOF &&
PPV.DepthOfFieldFocalDistance > 0 &&
PPV.DepthOfFieldFstop > 0)
{
DiaphragmDOF::FPhysicalCocModel CocModel;
CocModel.Compile(View);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/DiaphragmDOF.cpp:1359
Scope (from outer to inner):
file
function DiaphragmDOF::IsEnabled
Source code excerpt:
return
DiaphragmDOF::IsSupported(View.GetShaderPlatform()) &&
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(
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/DiaphragmDOF.cpp:1528
Scope (from outer to inner):
file
function bool DiaphragmDOF::AddPasses
Source code excerpt:
}
RDG_GPU_STAT_SCOPE(GraphBuilder, DepthOfField);
RDG_EVENT_SCOPE(GraphBuilder, "DOF(Alpha=%s)", bProcessSceneAlpha ? TEXT("Yes") : TEXT("No"));
bool bGatherBackground = MaxBackgroundCocRadius > kMinimalAbsGatherPassCocRadius;
bool bGatherForeground = AbsMaxForegroundCocRadius > kMinimalAbsGatherPassCocRadius;
const bool bEnableGatherBokehSettings = (
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/DiaphragmDOFUtils.cpp:49
Scope (from outer to inner):
file
function FVector4f DiaphragmDOF::CircleDofHalfCoc
Source code excerpt:
{
static const auto CVar = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DepthOfFieldQuality"));
bool bDepthOfField = View.Family->EngineShowFlags.DepthOfField && CVar->GetValueOnRenderThread() > 0 && View.FinalPostProcessSettings.DepthOfFieldFstop > 0 && View.FinalPostProcessSettings.DepthOfFieldFocalDistance > 0;
FVector4f Ret(0, 1, 0, 0);
if(bDepthOfField)
{
float FocalLengthInMM = ComputeFocalLengthFromFov(View); // TODO for Material.
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:2128
Scope (from outer to inner):
file
function void AddMobilePostProcessingPasses
Source code excerpt:
SunMask,
BloomSetup,
DepthOfField,
Bloom,
EyeAdaptation,
SunMerge,
SeparateTranslucency,
TAA,
Tonemap,
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:2204
Scope (from outer to inner):
file
function void AddMobilePostProcessingPasses
Source code excerpt:
// HQ gaussian
bool bUseDof = GetMobileDepthOfFieldScale(View) > 0.0f && View.Family->EngineShowFlags.DepthOfField && !View.Family->EngineShowFlags.VisualizeDOF;
bool bUseMobileDof = bUseDof && !View.FinalPostProcessSettings.bMobileHQGaussian;
bool bUseToneMapper = !View.Family->EngineShowFlags.ShaderComplexity && (IsMobileHDR() || IsMobileColorsRGB());
bool bUseHighResolutionScreenshotMask = IsHighResolutionScreenshotMaskEnabled(View);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:2290
Scope (from outer to inner):
file
function void AddMobilePostProcessingPasses
Source code excerpt:
PassSequence.SetEnabled(EPass::SunMask, bUseSun || bUseDof);
PassSequence.SetEnabled(EPass::BloomSetup, bUseSun || bUseMobileDof || bUseBloom || bUseBasicEyeAdaptation || bUseHistogramEyeAdaptation);
PassSequence.SetEnabled(EPass::DepthOfField, bUseDof);
PassSequence.SetEnabled(EPass::Bloom, bUseBloom);
PassSequence.SetEnabled(EPass::EyeAdaptation, bUseEyeAdaptation);
PassSequence.SetEnabled(EPass::SunMerge, bUseBloom || bUseSun);
PassSequence.SetEnabled(EPass::SeparateTranslucency, bUseSeparateTranslucency);
PassSequence.SetEnabled(EPass::TAA, bUseTAA);
PassSequence.SetEnabled(EPass::PostProcessMaterialAfterTonemapping, PostProcessMaterialAfterTonemappingChain.Num() != 0);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:2364
Scope (from outer to inner):
file
function void AddMobilePostProcessingPasses
Source code excerpt:
}
if (PassSequence.IsEnabled(EPass::DepthOfField))
{
PassSequence.AcceptPass(EPass::DepthOfField);
if (bUseMobileDof)
{
// Near dilation circle of confusion size.
// Samples at 1/16 area, writes to 1/16 area.
FMobileDofNearInputs DofNearInputs;
DofNearInputs.BloomSetup_SunShaftAndDof = BloomSetupOutputs.SunShaftAndDof;
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessing.cpp:2663
Scope (from outer to inner):
file
function void AddMobilePostProcessingPasses
Source code excerpt:
PassSequence.SetEnabled(EPass::SunMask, false);
PassSequence.SetEnabled(EPass::BloomSetup, false);
PassSequence.SetEnabled(EPass::DepthOfField, false);
PassSequence.SetEnabled(EPass::Bloom, false);
PassSequence.SetEnabled(EPass::EyeAdaptation, false);
PassSequence.SetEnabled(EPass::SunMerge, false);
PassSequence.SetEnabled(EPass::SeparateTranslucency, false);
PassSequence.SetEnabled(EPass::TAA, false);
PassSequence.SetEnabled(EPass::PostProcessMaterialAfterTonemapping, false);
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/ScenePrivate.h:1136
Scope: file
Source code excerpt:
bool bShouldAutoDownsampleTranslucency;
// Is DOFHistoryRT set from DepthOfField?
bool bDOFHistory;
// Is DOFHistoryRT2 set from DepthOfField?
bool bDOFHistory2;
// Sequencer state for view management
ESequencerState SequencerState;
FTemporalLODState TemporalLODState;