r.VolumetricRenderTarget.Mode
r.VolumetricRenderTarget.Mode
#Overview
name: r.VolumetricRenderTarget.Mode
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
[0] trace quarter resolution + reconstruct at half resolution + upsample [1] trace half res + reconstruct full res + upsample [2] trace at quarter resolution + reconstruct full resolution (cannot intersect with opaque meshes and forces UpsamplingMode=2 [3] Cinematic mode with tracing done at full reoslution in render target so that clouds can also be applied on translucent.)
It is referenced in 7
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of r.VolumetricRenderTarget.Mode
is to control the rendering mode for volumetric effects, specifically for volumetric clouds and other atmospheric effects in Unreal Engine 5. It determines the resolution and method used for tracing, reconstructing, and upsampling volumetric render targets.
This setting variable is primarily used by the rendering system, specifically the volumetric rendering subsystem within Unreal Engine 5. Based on the callsites, it is utilized in the following areas:
- The Renderer module (
VolumetricRenderTarget.cpp
) - The MovieRenderPipeline plugin (
MovieGraphGlobalGameOverrides.cpp
andMoviePipelineGameOverrideSetting.cpp
)
The value of this variable is set in multiple places:
- It is initially defined as a console variable with a default value of 0.
- In the MovieRenderPipeline plugin, it is set to 3 for high-quality cinematic rendering.
The associated variable CVarVolumetricRenderTargetMode
directly interacts with r.VolumetricRenderTarget.Mode
. They share the same value and purpose.
Developers should be aware of the following when using this variable:
- The variable has four modes (0-3), each with different performance and quality implications.
- Mode 3 is specifically designed for cinematic rendering, offering the highest quality but also the highest performance cost.
- Changing this variable can affect the appearance and performance of volumetric effects, especially clouds.
Best practices when using this variable include:
- Use lower modes (0 or 1) for general gameplay to balance quality and performance.
- Reserve mode 3 for high-quality cinematic renders or situations where volumetric effect quality is critical.
- Consider the performance impact when changing this setting, especially on lower-end hardware.
- When using the MovieRenderPipeline, be aware that this setting is automatically adjusted for optimal quality.
Regarding the associated variable CVarVolumetricRenderTargetMode
:
The purpose of CVarVolumetricRenderTargetMode
is identical to r.VolumetricRenderTarget.Mode
. It is the internal representation of the console variable within the engine’s C++ code.
This variable is used directly in the Renderer module to determine the volumetric rendering mode at runtime. It’s accessed using CVarVolumetricRenderTargetMode.GetValueOnRenderThread()
to ensure thread-safe access to the current setting.
Developers should treat CVarVolumetricRenderTargetMode
as the internal implementation of r.VolumetricRenderTarget.Mode
. When working with the C++ code directly, use CVarVolumetricRenderTargetMode
to read or modify the setting. When working through the console or configuration files, use r.VolumetricRenderTarget.Mode
.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/VolumetricRenderTarget.cpp:27
Scope: file
Source code excerpt:
static TAutoConsoleVariable<int32> CVarVolumetricRenderTargetMode(
TEXT("r.VolumetricRenderTarget.Mode"), 0,
TEXT("[0] trace quarter resolution + reconstruct at half resolution + upsample [1] trace half res + reconstruct full res + upsample [2] trace at quarter resolution + reconstruct full resolution (cannot intersect with opaque meshes and forces UpsamplingMode=2 [3] Cinematic mode with tracing done at full reoslution in render target so that clouds can also be applied on translucent.)"),
ECVF_RenderThreadSafe | ECVF_Scalability);
static TAutoConsoleVariable<int32> CVarVolumetricRenderTargetUpsamplingMode(
TEXT("r.VolumetricRenderTarget.UpsamplingMode"), 4,
TEXT("Used in compositing volumetric RT over the scene. [0] bilinear [1] bilinear + jitter [2] nearest + depth test [3] bilinear + jitter + keep closest [4] bilaterial upsampling"),
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineCore/Private/Graph/Nodes/MovieGraphGlobalGameOverrides.cpp:80
Scope (from outer to inner):
file
function void UMovieGraphGlobalGameOverridesNode::BuildNewProcessCommandLineArgsImpl
Source code excerpt:
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("r.SkyLight.RealTimeReflectionCapture.TimeSlice=%d"), 0));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("r.VolumetricRenderTarget=%d"), 1));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("r.VolumetricRenderTarget.Mode=%d"), 3));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("wp.Runtime.BlockOnSlowStreaming=%d"), 0));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("p.Chaos.ImmPhys.MinStepTime=%d"), 0));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("r.SkipRedundantTransformUpdate=%d"), 0));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("p.ChaosCloth.UseTimeStepSmoothing=%d"), 0));
}
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineCore/Private/Graph/Nodes/MovieGraphGlobalGameOverrides.cpp:154
Scope (from outer to inner):
file
function void UMovieGraphGlobalGameOverridesNode::ApplySettings
Source code excerpt:
// Cloud are rendered using high quality volumetric render target mode 3: per pixel tracing and composition on screen, while supporting cloud on translucent.
MOVIEPIPELINE_STORE_AND_OVERRIDE_CVAR_INT(PreviousVolumetricRenderTarget, TEXT("r.VolumetricRenderTarget"), 1, bOverrideValues);
MOVIEPIPELINE_STORE_AND_OVERRIDE_CVAR_INT(PreviousVolumetricRenderTargetMode, TEXT("r.VolumetricRenderTarget.Mode"), 3, bOverrideValues);
// To make sure that the world partition streaming doesn't end up in critical streaming performances and stops streaming low priority cells.
MOVIEPIPELINE_STORE_AND_OVERRIDE_CVAR_INT(PreviousIgnoreStreamingPerformance, TEXT("wp.Runtime.BlockOnSlowStreaming"), 0, bOverrideValues);
// Remove any minimum delta time requirements from Chaos Physics to ensure accuracy at high Temporal Sample counts
MOVIEPIPELINE_STORE_AND_OVERRIDE_CVAR_FLOAT(PreviousChaosImmPhysicsMinStepTime, TEXT("p.Chaos.ImmPhys.MinStepTime"), 0, bOverrideValues);
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineCore/Private/MoviePipelineGameOverrideSetting.cpp:121
Scope (from outer to inner):
file
function void UMoviePipelineGameOverrideSetting::ApplyCVarSettings
Source code excerpt:
// Cloud are rendered using high quality volumetric render target mode 3: per pixel tracing and composition on screen, while supporting cloud on translucent.
MOVIEPIPELINE_STORE_AND_OVERRIDE_CVAR_INT(PreviousVolumetricRenderTarget, TEXT("r.VolumetricRenderTarget"), 1, bOverrideValues);
MOVIEPIPELINE_STORE_AND_OVERRIDE_CVAR_INT(PreviousVolumetricRenderTargetMode, TEXT("r.VolumetricRenderTarget.Mode"), 3, bOverrideValues);
// To make sure that the world partition streaming doesn't end up in critical streaming performances and stops streaming low priority cells.
MOVIEPIPELINE_STORE_AND_OVERRIDE_CVAR_INT(PreviousIgnoreStreamingPerformance, TEXT("wp.Runtime.BlockOnSlowStreaming"), 0, bOverrideValues);
// Remove any minimum delta time requirements from Chaos Physics to ensure accuracy at high Temporal Sample counts
MOVIEPIPELINE_STORE_AND_OVERRIDE_CVAR_FLOAT(PreviousChaosImmPhysicsMinStepTime, TEXT("p.Chaos.ImmPhys.MinStepTime"), 0, bOverrideValues);
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineCore/Private/MoviePipelineGameOverrideSetting.cpp:239
Scope (from outer to inner):
file
function void UMoviePipelineGameOverrideSetting::BuildNewProcessCommandLineArgsImpl
Source code excerpt:
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("r.SkyLight.RealTimeReflectionCapture.TimeSlice=%d"), 0));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("r.VolumetricRenderTarget=%d"), 1));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("r.VolumetricRenderTarget.Mode=%d"), 3));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("wp.Runtime.BlockOnSlowStreaming=%d"), 0));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("p.Chaos.ImmPhys.MinStepTime=%d"), 0));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("r.SkipRedundantTransformUpdate=%d"), 0));
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("p.ChaosCloth.UseTimeStepSmoothing=%d"), 0));
}
#Associated Variable and Callsites
This variable is associated with another variable named CVarVolumetricRenderTargetMode
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/VolumetricRenderTarget.cpp:26
Scope: file
Source code excerpt:
ECVF_RenderThreadSafe | ECVF_Scalability);
static TAutoConsoleVariable<int32> CVarVolumetricRenderTargetMode(
TEXT("r.VolumetricRenderTarget.Mode"), 0,
TEXT("[0] trace quarter resolution + reconstruct at half resolution + upsample [1] trace half res + reconstruct full res + upsample [2] trace at quarter resolution + reconstruct full resolution (cannot intersect with opaque meshes and forces UpsamplingMode=2 [3] Cinematic mode with tracing done at full reoslution in render target so that clouds can also be applied on translucent.)"),
ECVF_RenderThreadSafe | ECVF_Scalability);
static TAutoConsoleVariable<int32> CVarVolumetricRenderTargetUpsamplingMode(
TEXT("r.VolumetricRenderTarget.UpsamplingMode"), 4,
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/VolumetricRenderTarget.cpp:444
Scope (from outer to inner):
file
function void InitVolumetricRenderTargetForViews
Source code excerpt:
VolumetricCloudRT.Initialise( // TODO this is going to reallocate a buffer each time dynamic resolution scaling is applied
ViewRect,
CVarVolumetricRenderTargetMode.GetValueOnRenderThread(),
CVarVolumetricRenderTargetUpsamplingMode.GetValueOnAnyThread(),
bCameraCut);
FViewUniformShaderParameters ViewVolumetricCloudRTParameters = *ViewInfo.CachedViewUniformShaderParameters;
{
const FIntPoint& VolumetricReconstructResolution = VolumetricCloudRT.GetCurrentVolumetricReconstructRTResolution();