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).

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:

  1. It can be loaded from configuration files (INI files) using the GConfig system.
  2. It can be set programmatically through the scalability system’s SetQualityLevels function.
  3. 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:

  1. The value range is typically between 10 and 100, with 100 being the default (full resolution).
  2. Changes to this variable can have a significant impact on performance and visual quality.
  3. 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:

  1. Use it in conjunction with other scalability settings for a balanced approach to performance optimization.
  2. Consider platform-specific requirements when setting this value.
  3. Provide user-facing options to adjust this setting, allowing players to fine-tune their experience.
  4. 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:

  1. Use it for real-time adjustments during development or debugging.
  2. Ensure that any changes made through this variable are properly reflected in the user interface and saved settings.
  3. 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]

Location: <Workspace>/Projects/Lyra/Config/DefaultDeviceProfiles.ini:180, section: [iPad5 DeviceProfile]

Location: <Workspace>/Projects/Lyra/Config/DefaultDeviceProfiles.ini:185, section: [iPadAir2 DeviceProfile]

#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();