sg.ResolutionQuality
sg.ResolutionQuality
#Overview
name: sg.ResolutionQuality
The value of this variable can be defined or overridden in .ini config files. 3
.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 10..100, default: 100
It is referenced in 9
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of sg.ResolutionQuality is to control the resolution quality in Unreal Engine’s scalability system. It is a part of the engine’s graphics settings that allows developers to adjust the game’s visual fidelity and performance.
This setting variable is primarily used by the Unreal Engine’s scalability system, which is responsible for adjusting graphics settings based on the hardware capabilities and performance requirements. It is mainly utilized in the Engine module, specifically in the Scalability namespace.
The value of this variable is set through various means:
- It can be loaded from configuration files (INI files) using the GConfig system.
- It can be set programmatically through the scalability system’s SetQualityLevels function.
- It can be modified through console commands, as it is registered as a console variable.
The sg.ResolutionQuality variable interacts closely with its associated variable CVarResolutionQuality. They share the same value and are used interchangeably in different contexts within the engine.
Developers should be aware of the following when using this variable:
- The value range is typically between 10 and 100, with 100 being the default (full resolution).
- Changes to this variable can have a significant impact on performance and visual quality.
- It is part of a larger set of scalability settings, and changes to one setting may require adjustments to others for optimal results.
Best practices when using this variable include:
- Use it in conjunction with other scalability settings for a balanced approach to performance optimization.
- Consider platform-specific requirements when setting this value.
- Provide user-facing options to adjust this setting, allowing players to fine-tune their experience.
- Test thoroughly across various hardware configurations to ensure a good balance between quality and performance.
Regarding the associated variable CVarResolutionQuality: The purpose of CVarResolutionQuality is to provide a console variable interface for the sg.ResolutionQuality setting. It allows for real-time adjustment of the resolution quality through console commands and programmatic access.
This variable is used primarily within the Engine module and is closely tied to the scalability system. It is initialized with the same value as sg.ResolutionQuality and is used to get and set the resolution quality value in various parts of the engine code.
The value of CVarResolutionQuality is set during the initialization of the scalability system and can be modified through console commands or programmatically.
Developers should be aware that changes to CVarResolutionQuality will directly affect the sg.ResolutionQuality setting and vice versa. It’s important to maintain consistency between these two variables.
Best practices for using CVarResolutionQuality include:
- Use it for real-time adjustments during development or debugging.
- Ensure that any changes made through this variable are properly reflected in the user interface and saved settings.
- Consider adding callbacks to handle changes to this variable, especially if other systems need to react to resolution quality changes.
#Setting Variables
#References In INI files
Location: <Workspace>/Projects/Lyra/Config/DefaultDeviceProfiles.ini:167, section: [iPhone6S DeviceProfile]
- INI Section:
iPhone6S DeviceProfile
- Raw value:
70
- Is Array:
False
Location: <Workspace>/Projects/Lyra/Config/DefaultDeviceProfiles.ini:180, section: [iPad5 DeviceProfile]
- INI Section:
iPad5 DeviceProfile
- Raw value:
85
- Is Array:
False
Location: <Workspace>/Projects/Lyra/Config/DefaultDeviceProfiles.ini:185, section: [iPadAir2 DeviceProfile]
- INI Section:
iPadAir2 DeviceProfile
- Raw value:
75
- 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:31
Scope: file
Source code excerpt:
static TAutoConsoleVariable<float> CVarResolutionQuality(
TEXT("sg.ResolutionQuality"),
0.0f,
TEXT("Scalability quality state (internally used by scalability system, ini load/save or using SCALABILITY console command)\n")
TEXT(" 10..100, default: 100"),
ECVF_Scalability);
static TAutoConsoleVariable<int32> CVarViewDistanceQuality(
#Loc: <Workspace>/Engine/Source/Runtime/Core/Private/HAL/ConsoleManager.cpp:450
Scope (from outer to inner):
file
function static void ExpandScalabilityCVar
Source code excerpt:
{
// load scalability settings directly from ini instead of using scalability system, so as not to inadvertantly mess anything up
// if the DP had sg.ResolutionQuality=3, we would read [ResolutionQuality@3]
FString SectionName = FString::Printf(TEXT("%s@%s"), *CVarKey.Mid(3), *CVarValue);
// walk over the scalability section and add them in, unless already done
const FConfigSection* ScalabilitySection = ConfigSystem->GetSection(*SectionName, false, GScalabilityIni);
if (ScalabilitySection != nullptr)
{
for (const auto& Pair : *ScalabilitySection)
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:1127
Scope (from outer to inner):
file
namespace Scalability
function void LoadState
Source code excerpt:
// looks like cvars but here we just use the name for the ini
GConfig->GetFloat(Section, TEXT("sg.ResolutionQuality"), State.ResolutionQuality, IniName);
GConfig->GetInt(Section, TEXT("sg.ViewDistanceQuality"), State.ViewDistanceQuality, IniName);
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);
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:1161
Scope (from outer to inner):
file
namespace Scalability
function void SaveState
Source code excerpt:
// looks like cvars but here we just use the name for the ini
GConfig->SetFloat(Section, TEXT("sg.ResolutionQuality"), State.ResolutionQuality, IniName);
GConfig->SetInt(Section, TEXT("sg.ViewDistanceQuality"), State.ViewDistanceQuality, IniName);
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);
#Loc: <Workspace>/Projects/Lyra/Source/LyraGame/Settings/LyraSettingsLocal.cpp:267
Scope (from outer to inner):
file
namespace LyraSettingsHelpers
function void FillScalabilitySettingsFromDeviceProfile
Source code excerpt:
Mode = FLyraScalabilitySnapshot();
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.ResolutionQuality%s"), *Suffix), Mode.Qualities.ResolutionQuality);
Mode.bHasOverrides |= UDeviceProfileManager::GetScalabilityCVar(FString::Printf(TEXT("sg.ViewDistanceQuality%s"), *Suffix), Mode.Qualities.ViewDistanceQuality);
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);
#Associated Variable and Callsites
This variable is associated with another variable named CVarResolutionQuality
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:30
Scope: file
Source code excerpt:
#endif
static TAutoConsoleVariable<float> CVarResolutionQuality(
TEXT("sg.ResolutionQuality"),
0.0f,
TEXT("Scalability quality state (internally used by scalability system, ini load/save or using SCALABILITY console command)\n")
TEXT(" 10..100, default: 100"),
ECVF_Scalability);
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:584
Scope (from outer to inner):
file
namespace Scalability
function void InitScalabilitySystem
Source code excerpt:
}
CVarResolutionQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeResolutionQuality));
CVarViewDistanceQuality.AsVariable()->SetOnChangedCallback(FConsoleVariableDelegate::CreateStatic(&OnChangeViewDistanceQuality));
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));
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:886
Scope (from outer to inner):
file
namespace Scalability
function void SetQualityLevels
Source code excerpt:
if (GetQualityLevels() != ClampedLevels || bForce)
{
SetQualityLevelCVar(CVarResolutionQuality, ClampedLevels.ResolutionQuality, GScalabilityQualityLevelsOverride.ResolutionQuality, bForce);
SetQualityLevelCVar(CVarViewDistanceQuality, ClampedLevels.ViewDistanceQuality, GScalabilityQualityLevelsOverride.ViewDistanceQuality, bForce);
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);
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Scalability.cpp:918
Scope (from outer to inner):
file
namespace Scalability
function FQualityLevels GetQualityLevels
Source code excerpt:
if (!GScalabilityUsingTemporaryQualityLevels)
{
Ret.ResolutionQuality = CVarResolutionQuality.GetValueOnGameThread();
Ret.ViewDistanceQuality = CVarViewDistanceQuality.GetValueOnGameThread();
Ret.AntiAliasingQuality = CVarAntiAliasingQuality.GetValueOnGameThread();
Ret.ShadowQuality = CVarShadowQuality.GetValueOnGameThread();
Ret.GlobalIlluminationQuality = CVarGlobalIlluminationQuality.GetValueOnGameThread();
Ret.ReflectionQuality = CVarReflectionQuality.GetValueOnGameThread();
Ret.PostProcessQuality = CVarPostProcessQuality.GetValueOnGameThread();