sg.GlobalIlluminationQuality
sg.GlobalIlluminationQuality
#Overview
name: sg.GlobalIlluminationQuality
The value of this variable can be defined or overridden in .ini config files. 12
.ini config files referencing this setting variable.
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Scalability quality state (internally used by scalability system, ini load/save or using SCALABILITY console command)\n 0:low, 1:med, 2:high, 3:epic, 4:cinematic, default: 3
It is referenced in 10
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of sg.GlobalIlluminationQuality is to control the quality level of global illumination in the Unreal Engine 5 rendering system. This setting variable is part of the scalability system, which allows developers to adjust various quality settings to optimize performance across different hardware configurations.
This variable is primarily used by the Unreal Engine’s rendering subsystem, specifically the global illumination component. It’s also utilized by the scalability system and the movie render pipeline.
The value of this variable is set through various means:
- It can be initialized with a default value (Scalability::DefaultQualityLevel).
- It can be loaded from configuration files using the GConfig system.
- It can be set programmatically through the scalability system’s SetQualityLevels function.
- It can be modified via console commands due to its ECVF_ScalabilityGroup flag.
The variable interacts closely with other scalability settings like shadow quality, reflection quality, and post-process quality. It’s part of a group of settings that collectively determine the overall visual quality and performance of the engine.
Developers should be aware that:
- This variable uses a scale from 0 to 4, representing low, medium, high, epic, and cinematic quality levels respectively.
- Changes to this variable can significantly impact performance and visual quality.
- It’s part of the scalability group, meaning it can be affected by global scalability settings.
Best practices when using this variable include:
- Consider the target hardware when setting this value.
- Use in conjunction with other scalability settings for a balanced approach to performance and quality.
- Allow users to adjust this setting in-game for better performance customization.
The associated variable CVarGlobalIlluminationQuality is the actual console variable that stores and manages the global illumination quality setting. It’s used internally by the engine to read and write the current quality level. The same considerations and best practices apply to this variable as well. Developers should use the scalability system’s functions to modify this value rather than changing it directly, to ensure all related systems are properly updated.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:307, section: [IOS DeviceProfile]
- INI Section:
IOS DeviceProfile
- Raw value:
1
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:329, section: [iPhone6S DeviceProfile]
- INI Section:
iPhone6S DeviceProfile
- Raw value:
2
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:340, section: [iPhone6SPlus DeviceProfile]
- INI Section:
iPhone6SPlus DeviceProfile
- Raw value:
2
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:374, section: [iPhone8 DeviceProfile]
- INI Section:
iPhone8 DeviceProfile
- Raw value:
3
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:383, section: [iPhone8Plus DeviceProfile]
- INI Section:
iPhone8Plus DeviceProfile
- Raw value:
3
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:529, section: [iPadAir2 DeviceProfile]
- INI Section:
iPadAir2 DeviceProfile
- Raw value:
2
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:551, section: [iPadPro DeviceProfile]
- INI Section:
iPadPro DeviceProfile
- Raw value:
3
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:684, section: [AppleTV DeviceProfile]
- INI Section:
AppleTV DeviceProfile
- Raw value:
3
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:832, section: [Android_Low DeviceProfile]
- INI Section:
Android_Low DeviceProfile
- Raw value:
0
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:847, section: [Android_Mid DeviceProfile]
- INI Section:
Android_Mid DeviceProfile
- Raw value:
1
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:861, section: [Android_High DeviceProfile]
- INI Section:
Android_High DeviceProfile
- Raw value:
2
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseDeviceProfiles.ini:886, section: [Android_Vulkan_SM5 DeviceProfile]
- INI Section:
Android_Vulkan_SM5 DeviceProfile
- Raw value:
2
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:59
Scope: file
Source code excerpt:
static TAutoConsoleVariable<int32> CVarGlobalIlluminationQuality(
TEXT("sg.GlobalIlluminationQuality"),
Scalability::DefaultQualityLevel,
TEXT("Scalability quality state (internally used by scalability system, ini load/save or using SCALABILITY console command)\n")
TEXT(" 0:low, 1:med, 2:high, 3:epic, 4:cinematic, default: 3"),
ECVF_ScalabilityGroup | ECVF_Preview);
static TAutoConsoleVariable<int32> CVarReflectionQuality(
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineCore/Private/Graph/Nodes/MovieGraphGlobalGameOverrides.cpp:33
Scope (from outer to inner):
file
function void UMovieGraphGlobalGameOverridesNode::BuildNewProcessCommandLineArgsImpl
Source code excerpt:
InOutDeviceProfileCvars.Add(FString::Format(TEXT("sg.AntiAliasingQuality={0}"), {QualityLevels.AntiAliasingQuality}));
InOutDeviceProfileCvars.Add(FString::Format(TEXT("sg.ShadowQuality={0}"), {QualityLevels.ShadowQuality}));
InOutDeviceProfileCvars.Add(FString::Format(TEXT("sg.GlobalIlluminationQuality={0}"), {QualityLevels.GlobalIlluminationQuality}));
InOutDeviceProfileCvars.Add(FString::Format(TEXT("sg.ReflectionQuality={0}"), {QualityLevels.ReflectionQuality}));
InOutDeviceProfileCvars.Add(FString::Format(TEXT("sg.PostProcessQuality={0}"), {QualityLevels.PostProcessQuality}));
InOutDeviceProfileCvars.Add(FString::Format(TEXT("sg.TextureQuality={0}"), {QualityLevels.TextureQuality}));
InOutDeviceProfileCvars.Add(FString::Format(TEXT("sg.EffectsQuality={0}"), {QualityLevels.EffectsQuality}));
InOutDeviceProfileCvars.Add(FString::Format(TEXT("sg.FoliageQuality={0}"), {QualityLevels.FoliageQuality}));
InOutDeviceProfileCvars.Add(FString::Format(TEXT("sg.ShadingQuality={0}"), {QualityLevels.ShadingQuality}));
#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineCore/Private/MoviePipelineGameOverrideSetting.cpp:165
Scope (from outer to inner):
file
function void UMoviePipelineGameOverrideSetting::BuildNewProcessCommandLineArgsImpl
Source code excerpt:
InOutDeviceProfileCvars.Add(TEXT("sg.AntiAliasingQuality=4"));
InOutDeviceProfileCvars.Add(TEXT("sg.ShadowQuality=4"));
InOutDeviceProfileCvars.Add(TEXT("sg.GlobalIlluminationQuality=4"));
InOutDeviceProfileCvars.Add(TEXT("sg.ReflectionQuality=4"));
InOutDeviceProfileCvars.Add(TEXT("sg.PostProcessQuality=4"));
InOutDeviceProfileCvars.Add(TEXT("sg.TextureQuality=4"));
InOutDeviceProfileCvars.Add(TEXT("sg.EffectsQuality=4"));
InOutDeviceProfileCvars.Add(TEXT("sg.FoliageQuality=4"));
InOutDeviceProfileCvars.Add(TEXT("sg.ShadingQuality=4"));
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:1131
Scope (from outer to inner):
file
namespace Scalability
function void LoadState
Source code excerpt:
GConfig->GetInt(Section, TEXT("sg.AntiAliasingQuality"), State.AntiAliasingQuality, IniName);
GConfig->GetInt(Section, TEXT("sg.ShadowQuality"), State.ShadowQuality, IniName);
GConfig->GetInt(Section, TEXT("sg.GlobalIlluminationQuality"), State.GlobalIlluminationQuality, IniName);
GConfig->GetInt(Section, TEXT("sg.ReflectionQuality"), State.ReflectionQuality, IniName);
GConfig->GetInt(Section, TEXT("sg.PostProcessQuality"), State.PostProcessQuality, IniName);
GConfig->GetInt(Section, TEXT("sg.TextureQuality"), State.TextureQuality, IniName);
GConfig->GetInt(Section, TEXT("sg.EffectsQuality"), State.EffectsQuality, IniName);
GConfig->GetInt(Section, TEXT("sg.FoliageQuality"), State.FoliageQuality, IniName);
GConfig->GetInt(Section, TEXT("sg.ShadingQuality"), State.ShadingQuality, IniName);
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:1165
Scope (from outer to inner):
file
namespace Scalability
function void SaveState
Source code excerpt:
GConfig->SetInt(Section, TEXT("sg.AntiAliasingQuality"), State.AntiAliasingQuality, IniName);
GConfig->SetInt(Section, TEXT("sg.ShadowQuality"), State.ShadowQuality, IniName);
GConfig->SetInt(Section, TEXT("sg.GlobalIlluminationQuality"), State.GlobalIlluminationQuality, IniName);
GConfig->SetInt(Section, TEXT("sg.ReflectionQuality"), State.ReflectionQuality, IniName);
GConfig->SetInt(Section, TEXT("sg.PostProcessQuality"), State.PostProcessQuality, IniName);
GConfig->SetInt(Section, TEXT("sg.TextureQuality"), State.TextureQuality, IniName);
GConfig->SetInt(Section, TEXT("sg.EffectsQuality"), State.EffectsQuality, IniName);
GConfig->SetInt(Section, TEXT("sg.FoliageQuality"), State.FoliageQuality, IniName);
GConfig->SetInt(Section, TEXT("sg.ShadingQuality"), State.ShadingQuality, IniName);
#Loc: <Workspace>/Projects/Lyra/Source/LyraGame/Settings/LyraSettingsLocal.cpp:271
Scope (from outer to inner):
file
namespace LyraSettingsHelpers
function void FillScalabilitySettingsFromDeviceProfile
Source code excerpt:
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.AntiAliasingQuality%s"), *Suffix), Mode.Qualities.AntiAliasingQuality);
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.ShadowQuality%s"), *Suffix), Mode.Qualities.ShadowQuality);
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.GlobalIlluminationQuality%s"), *Suffix), Mode.Qualities.GlobalIlluminationQuality);
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.ReflectionQuality%s"), *Suffix), Mode.Qualities.ReflectionQuality);
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.PostProcessQuality%s"), *Suffix), Mode.Qualities.PostProcessQuality);
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.TextureQuality%s"), *Suffix), Mode.Qualities.TextureQuality);
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.EffectsQuality%s"), *Suffix), Mode.Qualities.EffectsQuality);
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.FoliageQuality%s"), *Suffix), Mode.Qualities.FoliageQuality);
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.ShadingQuality%s"), *Suffix), Mode.Qualities.ShadingQuality);
#Associated Variable and Callsites
This variable is associated with another variable named CVarGlobalIlluminationQuality
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:58
Scope: file
Source code excerpt:
ECVF_ScalabilityGroup | ECVF_Preview);
static TAutoConsoleVariable<int32> CVarGlobalIlluminationQuality(
TEXT("sg.GlobalIlluminationQuality"),
Scalability::DefaultQualityLevel,
TEXT("Scalability quality state (internally used by scalability system, ini load/save or using SCALABILITY console command)\n")
TEXT(" 0:low, 1:med, 2:high, 3:epic, 4:cinematic, default: 3"),
ECVF_ScalabilityGroup | ECVF_Preview);
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:588
Scope (from outer to inner):
file
namespace Scalability
function void InitScalabilitySystem
Source code excerpt:
CVarAntiAliasingQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeAntiAliasingQuality));
CVarShadowQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeShadowQuality));
CVarGlobalIlluminationQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeGlobalIlluminationQuality));
CVarReflectionQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeReflectionQuality));
CVarPostProcessQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangePostProcessQuality));
CVarTextureQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeTextureQuality));
CVarEffectsQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeEffectsQuality));
CVarFoliageQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeFoliageQuality));
CVarShadingQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeShadingQuality));
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:890
Scope (from outer to inner):
file
namespace Scalability
function void SetQualityLevels
Source code excerpt:
SetQualityLevelCVar(CVarAntiAliasingQuality, ClampedLevels.AntiAliasingQuality, GScalabilityQualityLevelsOverride.AntiAliasingQuality, bForce);
SetQualityLevelCVar(CVarShadowQuality, ClampedLevels.ShadowQuality, GScalabilityQualityLevelsOverride.ShadowQuality, bForce);
SetQualityLevelCVar(CVarGlobalIlluminationQuality, ClampedLevels.GlobalIlluminationQuality, GScalabilityQualityLevelsOverride.GlobalIlluminationQuality, bForce);
SetQualityLevelCVar(CVarReflectionQuality, ClampedLevels.ReflectionQuality, GScalabilityQualityLevelsOverride.ReflectionQuality, bForce);
SetQualityLevelCVar(CVarPostProcessQuality, ClampedLevels.PostProcessQuality, GScalabilityQualityLevelsOverride.PostProcessQuality, bForce);
SetQualityLevelCVar(CVarTextureQuality, ClampedLevels.TextureQuality, GScalabilityQualityLevelsOverride.TextureQuality, bForce);
SetQualityLevelCVar(CVarEffectsQuality, ClampedLevels.EffectsQuality, GScalabilityQualityLevelsOverride.EffectsQuality, bForce);
SetQualityLevelCVar(CVarFoliageQuality, ClampedLevels.FoliageQuality, GScalabilityQualityLevelsOverride.FoliageQuality, bForce);
SetQualityLevelCVar(CVarShadingQuality, ClampedLevels.ShadingQuality, GScalabilityQualityLevelsOverride.ShadingQuality, bForce);
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:922
Scope (from outer to inner):
file
namespace Scalability
function FQualityLevels GetQualityLevels
Source code excerpt:
Ret.AntiAliasingQuality = CVarAntiAliasingQuality.GetValueOnGameThread();
Ret.ShadowQuality = CVarShadowQuality.GetValueOnGameThread();
Ret.GlobalIlluminationQuality = CVarGlobalIlluminationQuality.GetValueOnGameThread();
Ret.ReflectionQuality = CVarReflectionQuality.GetValueOnGameThread();
Ret.PostProcessQuality = CVarPostProcessQuality.GetValueOnGameThread();
Ret.TextureQuality = CVarTextureQuality.GetValueOnGameThread();
Ret.EffectsQuality = CVarEffectsQuality.GetValueOnGameThread();
Ret.FoliageQuality = CVarFoliageQuality.GetValueOnGameThread();
Ret.ShadingQuality = CVarShadingQuality.GetValueOnGameThread();