Editor.AsyncSkinnedAssetCompilationFinishAll
Editor.AsyncSkinnedAssetCompilationFinishAll
#Overview
name: Editor.AsyncSkinnedAssetCompilationFinishAll
This variable is created as a Console Variable (cvar).
- type:
Cmd
- help:
Finish all skinned assets compilations
It is referenced in 4
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of Editor.AsyncSkinnedAssetCompilationFinishAll
is to control the asynchronous compilation of skinned assets in Unreal Engine 5. This setting is part of the performance optimization system for the engine’s asset compilation process.
-
The Unreal Engine subsystem that relies on this setting variable is the Skinned Asset Compilation system, which is part of the Engine module. This can be seen from the file path
Engine/Source/Runtime/Engine/Private/SkinnedAssetCompiler.cpp
. -
The value of this variable is set through the
AsyncCompilationHelpers::EnsureInitializedCVars
function, which initializes console variables (CVars) for async compilation. -
This variable interacts with
bEnableAsyncSkinnedAssetCompilation
, which is defined in theUEditorExperimentalSettings
class. They share the same value, indicating that they control the same feature from different parts of the engine. -
Developers must be aware that this is an experimental feature, as it’s part of the
EditorExperimentalSettings
. It’s designed to improve import and map load time performance when compilation is required. -
Best practices when using this variable include:
- Testing thoroughly before enabling in production, as it’s an experimental feature.
- Monitoring performance improvements and potential issues when enabled.
- Being aware of its impact on the overall asset compilation process.
Regarding the associated variable bEnableAsyncSkinnedAssetCompilation
:
The purpose of bEnableAsyncSkinnedAssetCompilation
is to enable or disable asynchronous compilation of skinned assets in the Unreal Editor.
-
This setting is part of the Editor’s experimental settings, indicating it’s a feature that may still be under development or testing.
-
It’s defined in the
UEditorExperimentalSettings
class, which is part of the UnrealEd module. -
The value is set in the constructor of
UEditorExperimentalSettings
and can be modified through the Editor’s project settings. -
It interacts with the deprecated
bEnableAsyncSkeletalMeshCompilation
for backward compatibility. -
Developers should be aware that this setting is configurable and affects the performance of asset importing and map loading.
-
Best practices include:
- Experimenting with this setting to find the optimal configuration for your project.
- Keeping an eye on any performance changes or issues when enabling or disabling this feature.
- Updating any references to the older
bEnableAsyncSkeletalMeshCompilation
to use this new variable instead.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/SkinnedAssetCompiler.cpp:43
Scope (from outer to inner):
file
namespace SkinnedAssetCompilingManagerImpl
function static void EnsureInitializedCVars
Source code excerpt:
AsyncCompilationHelpers::EnsureInitializedCVars(
TEXT("skinnedasset"),
CVarAsyncSkinnedAssetStandard.AsyncCompilation,
CVarAsyncSkinnedAssetStandard.AsyncCompilationMaxConcurrency,
GET_MEMBER_NAME_CHECKED(UEditorExperimentalSettings, bEnableAsyncSkinnedAssetCompilation));
}
}
}
#Associated Variable and Callsites
This variable is associated with another variable named bEnableAsyncSkinnedAssetCompilation
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Settings/EditorExperimentalSettings.h:18
Scope: file
Source code excerpt:
{
GENERATED_UCLASS_BODY()
public:
/** Enable async texture compilation to improve PIE and map load time performance when compilation is required */
UPROPERTY(EditAnywhere, config, Category = Performance, meta = (DisplayName = "Enable async texture compilation and loading"))
bool bEnableAsyncTextureCompilation;
/** Enable async static mesh compilation to improve import and map load time performance when compilation is required */
UPROPERTY(EditAnywhere, config, Category = Performance, meta = (DisplayName = "Enable async static mesh compilation and loading"))
bool bEnableAsyncStaticMeshCompilation;
/** Enable async skeletal mesh compilation to improve import and map load time performance when compilation is required */
UE_DEPRECATED(5.1, "Deprecated & replaced by bEnableAsyncSkinnedAssetCompilation.")
UPROPERTY(/*EditAnywhere - deprecated & replaced by bEnableAsyncSkinnedAssetCompilation, */config/*, Category = Performance, meta = (DisplayName = "Enable async skeletal mesh compilation and loading")*/)
bool bEnableAsyncSkeletalMeshCompilation;
/** Enable async skinned asset compilation to improve import and map load time performance when compilation is required */
UPROPERTY(EditAnywhere, config, Category = Performance, meta = (DisplayName = "Enable async skinned asset compilation and loading"))
bool bEnableAsyncSkinnedAssetCompilation;
/** Enable async sound compilation to improve import and map load time performance when compilation is required */
UPROPERTY(EditAnywhere, config, Category = Performance, meta = (DisplayName = "Enable async sound compilation and loading"))
bool bEnableAsyncSoundWaveCompilation;
/** Allows the editor to run on HDR monitors on Windows 10 */
UPROPERTY(EditAnywhere, config, Category = HDR, meta = (ConfigRestartRequired = true, DisplayName = "Enable Editor Support for HDR Monitors"))
bool bHDREditor;
/** The brightness of the slate UI on HDR monitors */
UPROPERTY(EditAnywhere, config, Category = HDR, meta = (ClampMin = "100.0", ClampMax = "300.0", UIMin = "100.0", UIMax = "300.0"))
float HDREditorNITLevel;
/** Allows usage of the procedural foliage system */
UPROPERTY(EditAnywhere, config, Category = Foliage, meta = (DisplayName = "Procedural Foliage"))
bool bProceduralFoliage;
/** Allows usage of the Translation Picker */
UPROPERTY(EditAnywhere, config, Category = Tools, meta = (DisplayName = "Translation Picker"))
bool bEnableTranslationPicker;
/** Specify which console-specific nomenclature to use for gamepad label text */
UPROPERTY(EditAnywhere, config, Category=UserInterface, meta=(DisplayName="Console for Gamepad Labels"))
TEnumAsByte<EConsoleForGamepadLabels::Type> ConsoleForGamepadLabels;
/** Allows for customization of toolbars and menus throughout the editor */
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Settings/SettingsClasses.cpp:174
Scope (from outer to inner):
file
function UEditorExperimentalSettings::UEditorExperimentalSettings
Source code excerpt:
TEXT("Sets whether or not we should allow the editor to run on HDR monitors"),
ECVF_Default);
static TAutoConsoleVariable<float> CVarEditorHDRNITLevel(
TEXT("Editor.HDRNITLevel"),
160.0f,
TEXT("Sets The desired NIT level of the editor when running on HDR"),
ECVF_Default);
UEditorExperimentalSettings::UEditorExperimentalSettings( const FObjectInitializer& ObjectInitializer )
: Super(ObjectInitializer)
, bEnableAsyncTextureCompilation(false)
, bEnableAsyncStaticMeshCompilation(false)
, bEnableAsyncSkeletalMeshCompilation(true) // This was false and set to True in /Engine/Config/BaseEditorPerProjectUserSettings.ini. The setting is removed from .ini so change it to default True.
, bEnableAsyncSkinnedAssetCompilation(false)
, bEnableAsyncSoundWaveCompilation(false)
, bHDREditor(false)
, HDREditorNITLevel(160.0f)
, bUseOpenCLForConvexHullDecomp(false)
, bAllowPotentiallyUnsafePropertyEditing(false)
, bPackedLevelActor(true)
, bLevelInstance(true)
{
}
void UEditorExperimentalSettings::PostInitProperties()
{
PRAGMA_DISABLE_DEPRECATION_WARNINGS
// bEnableAsyncSkeletalMeshCompilation's default to True (see comment in constructor above).
// To be backwards compatible, if a user project overrides it to False, pass on the value to bEnableAsyncSkinnedAssetCompilation.
if (!bEnableAsyncSkeletalMeshCompilation)
{
UE_LOG(LogSettingsClasses, Warning, TEXT("bEnableAsyncSkeletalMeshCompilation is deprecated and replaced with bEnableAsyncSkinnedAssetCompilation. Please update the config. Setting bEnableAsyncSkinnedAssetCompilation to False."));
bEnableAsyncSkinnedAssetCompilation = false;
}
PRAGMA_ENABLE_DEPRECATION_WARNINGS
CVarEditorHDRSupport->Set(bHDREditor ? 1 : 0, ECVF_SetByProjectSetting);
CVarEditorHDRNITLevel->Set(HDREditorNITLevel, ECVF_SetByProjectSetting);
Super::PostInitProperties();
}
void UEditorExperimentalSettings::PostEditChangeProperty( struct FPropertyChangedEvent& PropertyChangedEvent )
{
Super::PostEditChangeProperty(PropertyChangedEvent);
const FName Name = (PropertyChangedEvent.Property != nullptr) ? PropertyChangedEvent.Property->GetFName() : NAME_None;
if (Name == GET_MEMBER_NAME_CHECKED(UEditorExperimentalSettings, ConsoleForGamepadLabels))
{
EKeys::SetConsoleForGamepadLabels(ConsoleForGamepadLabels);
}
else if (Name == GET_MEMBER_NAME_CHECKED(UEditorExperimentalSettings, bHDREditor))
{
CVarEditorHDRSupport->Set(bHDREditor ? 1 : 0, ECVF_SetByProjectSetting);
}
else if (Name == GET_MEMBER_NAME_CHECKED(UEditorExperimentalSettings, HDREditorNITLevel))
{
CVarEditorHDRNITLevel->Set(HDREditorNITLevel, ECVF_SetByProjectSetting);
}
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/SkinnedAssetCompiler.cpp:34
Scope (from outer to inner):
file
namespace SkinnedAssetCompilingManagerImpl
function static void EnsureInitializedCVars
Source code excerpt:
namespace SkinnedAssetCompilingManagerImpl
{
static void EnsureInitializedCVars()
{
static bool bIsInitialized = false;
if (!bIsInitialized)
{
bIsInitialized = true;
AsyncCompilationHelpers::EnsureInitializedCVars(
TEXT("skinnedasset"),
CVarAsyncSkinnedAssetStandard.AsyncCompilation,
CVarAsyncSkinnedAssetStandard.AsyncCompilationMaxConcurrency,
GET_MEMBER_NAME_CHECKED(UEditorExperimentalSettings, bEnableAsyncSkinnedAssetCompilation));
}
}
}
FSkinnedAssetCompilingManager::FSkinnedAssetCompilingManager()
: Notification(MakeUnique<FAsyncCompilationNotification>(GetAssetNameFormat()))
{
SkinnedAssetCompilingManagerImpl::EnsureInitializedCVars();
PostReachabilityAnalysisHandle = FCoreUObjectDelegates::PostReachabilityAnalysis.AddRaw(this, &FSkinnedAssetCompilingManager::OnPostReachabilityAnalysis);
PreGarbageCollectHandle = FCoreUObjectDelegates::GetPreGarbageCollectDelegate().AddRaw(this, &FSkinnedAssetCompilingManager::OnPreGarbageCollect);
}
FName FSkinnedAssetCompilingManager::GetAssetTypeName() const
{
return TEXT("UE-SkinnedAsset");
}
FTextFormat FSkinnedAssetCompilingManager::GetAssetNameFormat() const
{
return LOCTEXT("SkinnedAssetNameFormat", "{0}|plural(one=Skinned Asset,other=Skinned Assets)");
}
TArrayView<FName> FSkinnedAssetCompilingManager::GetDependentTypeNames() const
{
// Texture and shaders can affect materials which can affect Skinned Assets once they are visible.
// Adding these dependencies can reduces the actual number of render state update we need to do in a frame