r.VolumetricRenderTarget
r.VolumetricRenderTarget
#Overview
name: r.VolumetricRenderTarget
This variable is created as a Console Variable (cvar).
- type:
Var
- help: ``
It is referenced in 7
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of r.VolumetricRenderTarget is to enable or disable the volumetric render target feature in Unreal Engine’s rendering system. This setting is primarily used for rendering volumetric effects, particularly volumetric clouds.
This setting variable is relied upon by the Renderer module of Unreal Engine, specifically in the volumetric rendering subsystem. It’s also used in the MovieRenderPipeline plugin for high-quality rendering in cinematics.
The value of this variable is set through a console variable (CVar) system. It’s initialized with a default value of 1 (enabled) but can be changed at runtime or through configuration files.
The associated variable CVarVolumetricRenderTarget interacts directly with r.VolumetricRenderTarget, as they share the same value and purpose.
Developers should be aware that:
- This variable affects rendering performance and quality, especially for volumetric effects like clouds.
- It’s used in conjunction with other volumetric rendering settings, such as r.VolumetricRenderTarget.Mode.
- Changing this value can have significant impacts on the visual output and performance of a scene.
Best practices when using this variable include:
- Consider the performance implications when enabling this feature, especially on lower-end hardware.
- When creating high-quality cinematics or screenshots, ensure this is enabled (set to 1) for better volumetric effects.
- Test your scenes with this setting both enabled and disabled to understand its impact on your specific use case.
Regarding the associated variable CVarVolumetricRenderTarget:
- It serves the same purpose as r.VolumetricRenderTarget.
- It’s defined as a TAutoConsoleVariable, allowing for runtime modifications.
- It’s used internally by the engine to check if volumetric render targets should be used.
- The variable is marked as render thread safe and as a scalability option, indicating it can be safely changed at runtime and might be automatically adjusted based on performance settings.
Developers should use the r.VolumetricRenderTarget console command to modify this setting, rather than directly manipulating CVarVolumetricRenderTarget in code, unless they’re working on low-level engine modifications.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/VolumetricRenderTarget.cpp:17
Scope: file
Source code excerpt:
static TAutoConsoleVariable<int32> CVarVolumetricRenderTarget(
TEXT("r.VolumetricRenderTarget"), 1,
TEXT(""),
ECVF_RenderThreadSafe | ECVF_Scalability);
static TAutoConsoleVariable<float> CVarVolumetricRenderTargetUvNoiseSampleAcceptanceWeight(
TEXT("r.VolumetricRenderTarget.UvNoiseSampleAcceptanceWeight"), 20.0f,
TEXT("Used when r.VolumetricRenderTarget.UpsamplingMode is in a mode using jitter - this value control the acceptance of noisy cloud samples according to their similarities. A higher value means large differences will be less accepted for blending."),
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineCore/Private/Graph/Nodes/MovieGraphGlobalGameOverrides.cpp:79
Scope (from outer to inner):
file
function void UMovieGraphGlobalGameOverridesNode::BuildNewProcessCommandLineArgsImpl
Source code excerpt:
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("a.URO.Enable=%d"), 0));
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:153
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
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineCore/Private/MoviePipelineGameOverrideSetting.cpp:120
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
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineCore/Private/MoviePipelineGameOverrideSetting.cpp:238
Scope (from outer to inner):
file
function void UMoviePipelineGameOverrideSetting::BuildNewProcessCommandLineArgsImpl
Source code excerpt:
InOutDeviceProfileCvars.Add(FString::Printf(TEXT("au.NeverMuteNonRealtimeAudioDevices=%d"), 1));
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 CVarVolumetricRenderTarget
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/VolumetricRenderTarget.cpp:16
Scope: file
Source code excerpt:
#include "EnvironmentComponentsFlags.h"
static TAutoConsoleVariable<int32> CVarVolumetricRenderTarget(
TEXT("r.VolumetricRenderTarget"), 1,
TEXT(""),
ECVF_RenderThreadSafe | ECVF_Scalability);
static TAutoConsoleVariable<float> CVarVolumetricRenderTargetUvNoiseSampleAcceptanceWeight(
TEXT("r.VolumetricRenderTarget.UvNoiseSampleAcceptanceWeight"), 20.0f,
#Loc: <Workspace>/Engine/Source/Runtime/Renderer/Private/VolumetricRenderTarget.cpp:63
Scope (from outer to inner):
file
function bool ShouldViewRenderVolumetricCloudRenderTarget
Source code excerpt:
bool ShouldViewRenderVolumetricCloudRenderTarget(const FViewInfo& ViewInfo)
{
return CVarVolumetricRenderTarget.GetValueOnRenderThread() && ShouldPipelineCompileVolumetricRenderTargetShaders(ViewInfo.GetShaderPlatform())
&& (ViewInfo.ViewState != nullptr) && !ViewInfo.bIsReflectionCapture;
}
bool IsVolumetricRenderTargetEnabled()
{
return CVarVolumetricRenderTarget.GetValueOnRenderThread() > 0;
}
bool IsVolumetricRenderTargetAsyncCompute()
{
// TODO remove that when we remove the pixel shading path in 5.0
static auto CVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.VolumetricCloud.DisableCompute"));