r.DistanceFields
r.DistanceFields
#Overview
name: r.DistanceFields
The value of this variable can be defined or overridden in .ini config files. 4
.ini config files referencing this setting variable.
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Enables distance fields rendering.\n 0: Disabled.\n 1: Enabled.
It is referenced in 6
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of r.DistanceFields is to enable or disable distance fields rendering in Unreal Engine 5. Distance fields are a spatial representation of geometry used for various rendering techniques, including ambient occlusion, soft shadows, and global illumination.
The r.DistanceFields variable is primarily used by the rendering system in Unreal Engine. It is referenced in the RenderCore module and is utilized by various target platform implementations, including Android and iOS.
The value of this variable is set through a console variable (CVar) system. It is initialized in the RenderUtils.cpp file with a default value of 1 (enabled). The value can be changed at runtime through console commands or configuration files.
This variable interacts with other rendering-related variables and systems. For example, it is used in conjunction with ray tracing settings and affects the behavior of selective base pass outputs.
Developers should be aware that enabling distance fields can have performance implications, especially on mobile platforms. It’s important to consider the target hardware capabilities when deciding whether to use distance fields.
Best practices when using this variable include:
- Evaluating the performance impact on your target platforms before enabling distance fields.
- Using it in combination with other rendering features to achieve the desired visual quality and performance balance.
- Testing thoroughly on all target platforms to ensure consistent behavior and performance.
- Considering providing user options to toggle distance fields on/off for performance reasons, especially on lower-end devices.
By understanding and properly utilizing the r.DistanceFields setting, developers can leverage advanced rendering techniques while maintaining optimal performance across various platforms.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:805, section: [Android DeviceProfile]
- INI Section:
Android DeviceProfile
- Raw value:
0
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:912, section: [Android_Vulkan_SM5 DeviceProfile]
- INI Section:
Android_Vulkan_SM5 DeviceProfile
- Raw value:
1
- Is Array:
False
Location: <Workspace>/Engine/Config/Android/AndroidEngine.ini:94, section: [/Script/Engine.RendererSettings]
- INI Section:
/Script/Engine.RendererSettings
- Raw value:
1
- Is Array:
False
Location: <Workspace>/Engine/Config/IOS/BaseIOSEngine.ini:12, section: [/Script/Engine.RendererSettings]
- INI Section:
/Script/Engine.RendererSettings
- Raw value:
0
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderUtils.cpp:693
Scope: file
Source code excerpt:
static TAutoConsoleVariable<int32> CVarDistanceFields(
TEXT("r.DistanceFields"),
1,
TEXT("Enables distance fields rendering.\n") \
TEXT(" 0: Disabled.\n") \
TEXT(" 1: Enabled."),
ECVF_RenderThreadSafe | ECVF_ReadOnly
);
#Loc: <Workspace>/Engine/Source/Developer/Android/AndroidTargetPlatformSettings/Private/AndroidTargetPlatformSettings.cpp:17
Scope (from outer to inner):
file
function FAndroidTargetPlatformSettings::FAndroidTargetPlatformSettings
Source code excerpt:
TextureLODSettings = nullptr; // These are registered by the device profile system.
StaticMeshLODSettings.Initialize(this);
GetConfigSystem()->GetBool(TEXT("/Script/Engine.RendererSettings"), TEXT("r.DistanceFields"), bDistanceField, GEngineIni);
GetConfigSystem()->GetInt(TEXT("/Script/Engine.RendererSettings"), TEXT("r.Mobile.ShadingPath"), MobileShadingPath, GEngineIni);
GetConfigSystem()->GetBool(TEXT("/Script/Engine.RendererSettings"), TEXT("r.Mobile.Forward.EnableClusteredReflections"), bMobileForwardEnableClusteredReflections, GEngineIni);
GetConfigSystem()->GetBool(TEXT("/Script/Engine.RendererSettings"), TEXT("r.Mobile.VirtualTextures"), bMobileVirtualTextures, GEngineIni);
#endif
}
#Loc: <Workspace>/Engine/Source/Developer/IOS/IOSTargetPlatform/Private/IOSTargetPlatform.cpp:41
Scope (from outer to inner):
file
function FIOSTargetPlatform::FIOSTargetPlatform
Source code excerpt:
TextureLODSettings = nullptr; // TextureLODSettings are registered by the device profile.
StaticMeshLODSettings.Initialize(this);
GetConfigSystem()->GetBool(TEXT("/Script/Engine.RendererSettings"), TEXT("r.DistanceFields"), bDistanceField, GEngineIni);
GetConfigSystem()->GetInt(TEXT("/Script/Engine.RendererSettings"), TEXT("r.Mobile.ShadingPath"), MobileShadingPath, GEngineIni);
GetConfigSystem()->GetBool(TEXT("/Script/Engine.RendererSettings"), TEXT("r.Mobile.Forward.EnableClusteredReflections"), bMobileForwardEnableClusteredReflections, GEngineIni);
GetConfigSystem()->GetBool(TEXT("/Script/Engine.RendererSettings"), TEXT("r.Mobile.VirtualTextures"), bMobileVirtualTextures, GEngineIni);
#endif // #if WITH_ENGINE
// initialize the connected device detector
#Loc: <Workspace>/Engine/Source/Developer/TargetPlatform/Private/TargetPlatformBase.cpp:46
Scope (from outer to inner):
file
function bool FTargetPlatformBase::UsesDistanceFields
Source code excerpt:
bool FTargetPlatformBase::UsesDistanceFields() const
{
static IConsoleVariable* CVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.DistanceFields"));
return CVar ? (CVar->GetInt() != 0) : false;
}
bool FTargetPlatformBase::UsesRayTracing() const
{
static IConsoleVariable* CVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.RayTracing"));
#Loc: <Workspace>/Engine/Source/Developer/TargetPlatform/Private/TargetPlatformSettingsBase.cpp:35
Scope (from outer to inner):
file
function bool FTargetPlatformSettingsBase::UsesDistanceFields
Source code excerpt:
bool FTargetPlatformSettingsBase::UsesDistanceFields() const
{
static IConsoleVariable* CVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.DistanceFields"));
return CVar ? (CVar->GetInt() != 0) : false;
}
bool FTargetPlatformSettingsBase::UsesRayTracing() const
{
static IConsoleVariable* CVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.RayTracing"));
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderUtils.cpp:752
Scope (from outer to inner):
file
function void RenderUtilsInit
Source code excerpt:
GSelectiveBasePassOutputsPlatformMask.Init(SelectiveBasePassOutputsCVar && SelectiveBasePassOutputsCVar->GetInt(), EShaderPlatform::SP_NumPlatforms);
static IConsoleVariable* DistanceFieldsCVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.DistanceFields"));
GDistanceFieldsPlatformMask.Init(DistanceFieldsCVar && DistanceFieldsCVar->GetInt(), EShaderPlatform::SP_NumPlatforms);
static IConsoleVariable* RayTracingCVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.RayTracing"));
GSimpleSkyDiffusePlatformMask.Init(false, EShaderPlatform::SP_NumPlatforms);
GVelocityEncodeDepthPlatformMask.Init(false, EShaderPlatform::SP_NumPlatforms);