VertexOverrideColor
VertexOverrideColor
#Overview
name: VertexOverrideColor
The value of this variable can be defined or overridden in .ini config files. 2
.ini config files referencing this setting variable.
It is referenced in 37
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of VertexOverrideColor is to specify an override color for vertex coloring in imported meshes, particularly for static meshes and skeletal meshes in Unreal Engine 5. This variable is used when the vertex color import option is set to “Override”.
Key points about VertexOverrideColor:
-
It’s used in both the Unreal Engine’s FBX importer and the Interchange system for importing meshes.
-
The main subsystems that rely on this variable are the static mesh and skeletal mesh import systems, as well as the FBX import pipeline.
-
The value of this variable is typically set through import options or UI settings when importing meshes. It’s stored in various import data classes like UFbxStaticMeshImportData and UFbxSkeletalMeshImportData.
-
It interacts closely with the VertexColorImportOption variable, which determines how vertex colors are handled during import.
-
Developers should be aware that this color will only be applied if the vertex color import option is set to “Override”. Otherwise, it won’t have any effect.
-
Best practices for using this variable include:
- Use it when you want to apply a uniform color to all vertices of an imported mesh.
- Ensure the VertexColorImportOption is set correctly to make use of this override color.
- Be cautious when using it, as it will override any existing vertex colors in the imported mesh.
-
This variable is part of the broader mesh import customization options, allowing fine-grained control over how meshes are imported into Unreal Engine.
-
It’s used in both editor-time imports and runtime imports through the Interchange system, providing consistency across different import scenarios.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:657, section: [/Script/UnrealEd.FbxStaticMeshImportData]
- INI Section:
/Script/UnrealEd.FbxStaticMeshImportData
- Raw value:
(R=255,G=255,B=255,A=255)
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:669, section: [/Script/UnrealEd.FbxSkeletalMeshImportData]
- INI Section:
/Script/UnrealEd.FbxSkeletalMeshImportData
- Raw value:
(R=0,G=0,B=0,A=0)
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:170
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void FillInterchangeGenericAssetsPipelineFromFbxStaticMeshImportData
Source code excerpt:
}
GenericAssetPipeline->CommonMeshesProperties->VertexOverrideColor = StaticMeshImportData->VertexOverrideColor;
}
void FillInterchangeGenericAssetsPipelineFromFbxSkeletalMeshImportData(UInterchangeGenericAssetsPipeline* GenericAssetPipeline
, const UFbxSkeletalMeshImportData* SkeletalMeshImportData
, bool bFillBaseClass = true)
{
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:237
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void FillInterchangeGenericAssetsPipelineFromFbxSkeletalMeshImportData
Source code excerpt:
GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Replace;
}
GenericAssetPipeline->CommonMeshesProperties->VertexOverrideColor = SkeletalMeshImportData->VertexOverrideColor;
}
void FillInterchangeGenericAssetsPipelineFromFbxAnimSequenceImportData(UInterchangeGenericAssetsPipeline* GenericAssetPipeline
, const UFbxAnimSequenceImportData* AnimSequenceImportData)
{
if (!AnimSequenceImportData || !GenericAssetPipeline)
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:334
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function UAssetImportData* ConvertToLegacyFbx
Source code excerpt:
DestinationStaticMeshImportData->VertexColorImportOption = EVertexColorImportOption::Replace;
}
DestinationStaticMeshImportData->VertexOverrideColor = GenericAssetPipeline->CommonMeshesProperties->VertexOverrideColor;
//Fill the reimport material match data and section data
FImportMeshLodSectionsData SectionData;
for (const FStaticMaterial& Material : StaticMesh->GetStaticMaterials())
{
DestinationStaticMeshImportData->ImportMaterialOriginalNameData.Add(Material.ImportedMaterialSlotName);
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:426
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function UAssetImportData* ConvertToLegacyFbx
Source code excerpt:
DestinationSkeletalMeshImportData->VertexColorImportOption = EVertexColorImportOption::Replace;
}
DestinationSkeletalMeshImportData->VertexOverrideColor = GenericAssetPipeline->CommonMeshesProperties->VertexOverrideColor;
//Fill the reimport material match data and section data
FImportMeshLodSectionsData SectionData;
for (const FSkeletalMaterial& Material : SkeletalMesh->GetMaterials())
{
DestinationSkeletalMeshImportData->ImportMaterialOriginalNameData.Add(Material.ImportedMaterialSlotName);
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericAssetsPipeline.cpp:258
Scope (from outer to inner):
file
function void UInterchangeGenericAssetsPipeline::FilterPropertiesFromTranslatedData
Source code excerpt:
if (MeshPipeline->SkeletalMeshImportContentType == EInterchangeSkeletalMeshContentType::SkinningWeights)
{
LocalHideProperty(CommonMeshesProperties, GET_MEMBER_NAME_CHECKED(UInterchangeGenericCommonMeshesProperties, VertexOverrideColor));
LocalHideProperty(CommonMeshesProperties, GET_MEMBER_NAME_CHECKED(UInterchangeGenericCommonMeshesProperties, VertexColorImportOption));
LocalHideProperty(MeshPipeline, GET_MEMBER_NAME_CHECKED(UInterchangeGenericMeshPipeline, bImportMorphTargets));
LocalHideProperty(MeshPipeline, GET_MEMBER_NAME_CHECKED(UInterchangeGenericMeshPipeline, ThresholdPosition));
LocalHideProperty(MeshPipeline, GET_MEMBER_NAME_CHECKED(UInterchangeGenericMeshPipeline, ThresholdTangentNormal));
LocalHideProperty(MeshPipeline, GET_MEMBER_NAME_CHECKED(UInterchangeGenericMeshPipeline, ThresholdUV));
LocalHideProperty(MeshPipeline, GET_MEMBER_NAME_CHECKED(UInterchangeGenericMeshPipeline, MorphThresholdPosition));
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericSkeletalMeshPipeline.cpp:470
Scope (from outer to inner):
file
function UInterchangeSkeletalMeshFactoryNode* UInterchangeGenericMeshPipeline::CreateSkeletalMeshFactoryNode
Source code excerpt:
case EInterchangeVertexColorImportOption::IVCIO_Override:
{
SkeletalMeshFactoryNode->SetCustomVertexColorOverride(CommonMeshesProperties->VertexOverrideColor);
}
break;
}
//Avoid importing skeletalmesh if we want to only import animation
if (CommonSkeletalMeshesAndAnimationsProperties->bImportOnlyAnimations)
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericStaticMeshPipeline.cpp:445
Scope (from outer to inner):
file
function UInterchangeStaticMeshFactoryNode* UInterchangeGenericMeshPipeline::CreateStaticMeshFactoryNode
Source code excerpt:
case EInterchangeVertexColorImportOption::IVCIO_Override:
{
StaticMeshFactoryNode->SetCustomVertexColorOverride(CommonMeshesProperties->VertexOverrideColor);
}
break;
}
StaticMeshFactoryNode->SetCustomLODGroup(LodGroup);
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Public/InterchangeGenericAssetsPipelineSharedSettings.h:82
Scope (from outer to inner):
file
class class UInterchangeGenericCommonMeshesProperties : public UInterchangePipelineBase
Source code excerpt:
/** Specify an override color for use when the Vertex Color Import Option setting is set to Override. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Common Meshes")
FColor VertexOverrideColor;
/** If enabled, normals in the imported mesh are ignored and recomputed. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Common Meshes", meta = (SubCategory = "Build"))
bool bRecomputeNormals = true;
/** If enabled, tangents in the imported mesh are ignored and recomputed. */
#Loc: <Workspace>/Engine/Plugins/Tests/EditorTests/Source/EditorTests/Private/UnrealEd/FbxAutomationTests.cpp:381
Scope (from outer to inner):
file
function BEGIN_FUNCTION_BUILD_OPTIMIZATION bool F
Source code excerpt:
ImportData->StaticMeshLODGroup = TestPlan->ImportUI->StaticMeshImportData->StaticMeshLODGroup;
ImportData->VertexColorImportOption = TestPlan->ImportUI->StaticMeshImportData->VertexColorImportOption;
ImportData->VertexOverrideColor = TestPlan->ImportUI->StaticMeshImportData->VertexOverrideColor;
ImportData->bRemoveDegenerates = TestPlan->ImportUI->StaticMeshImportData->bRemoveDegenerates;
ImportData->bBuildReversedIndexBuffer = TestPlan->ImportUI->StaticMeshImportData->bBuildReversedIndexBuffer;
ImportData->bGenerateLightmapUVs = TestPlan->ImportUI->StaticMeshImportData->bGenerateLightmapUVs;
ImportData->bOneConvexHullPerUCX = TestPlan->ImportUI->StaticMeshImportData->bOneConvexHullPerUCX;
ImportData->bAutoGenerateCollision = TestPlan->ImportUI->StaticMeshImportData->bAutoGenerateCollision;
//Copy UFbxMeshImportData
#Loc: <Workspace>/Engine/Plugins/Tests/EditorTests/Source/EditorTests/Private/UnrealEd/FbxAutomationTests.cpp:489
Scope (from outer to inner):
file
function BEGIN_FUNCTION_BUILD_OPTIMIZATION bool F
Source code excerpt:
ImportData->StaticMeshLODGroup = TestPlan->ImportUI->StaticMeshImportData->StaticMeshLODGroup;
ImportData->VertexColorImportOption = TestPlan->ImportUI->StaticMeshImportData->VertexColorImportOption;
ImportData->VertexOverrideColor = TestPlan->ImportUI->StaticMeshImportData->VertexOverrideColor;
ImportData->bRemoveDegenerates = TestPlan->ImportUI->StaticMeshImportData->bRemoveDegenerates;
ImportData->bBuildReversedIndexBuffer = TestPlan->ImportUI->StaticMeshImportData->bBuildReversedIndexBuffer;
ImportData->bGenerateLightmapUVs = TestPlan->ImportUI->StaticMeshImportData->bGenerateLightmapUVs;
ImportData->bOneConvexHullPerUCX = TestPlan->ImportUI->StaticMeshImportData->bOneConvexHullPerUCX;
ImportData->bAutoGenerateCollision = TestPlan->ImportUI->StaticMeshImportData->bAutoGenerateCollision;
//Copy UFbxMeshImportData
#Loc: <Workspace>/Engine/Source/Editor/DetailCustomizations/Private/FbxImportUIDetails.cpp:510
Scope (from outer to inner):
file
function void FFbxImportUIDetails::CustomizeDetails
Source code excerpt:
if (ImportType == FBXIT_StaticMesh)
{
if (Property->GetFName() == GET_MEMBER_NAME_CHECKED(UFbxStaticMeshImportData, VertexOverrideColor))
{
// Cache the VertexColorImportOption property
VertexColorImportOptionHandle = StaticMeshDataProp->GetChildHandle(GET_MEMBER_NAME_CHECKED(UFbxStaticMeshImportData, VertexColorImportOption));
PropertyRow.IsEnabled(TAttribute<bool>(this, &FFbxImportUIDetails::GetVertexOverrideColorEnabledState));
}
#Loc: <Workspace>/Engine/Source/Editor/DetailCustomizations/Private/FbxImportUIDetails.cpp:520
Scope: file
Source code excerpt:
else
{
if (Property->GetFName() == GET_MEMBER_NAME_CHECKED(UFbxSkeletalMeshImportData, VertexOverrideColor))
{
// Cache the VertexColorImportOption property
SkeletalMeshVertexColorImportOptionHandle = SkeletalMeshDataProp->GetChildHandle(GET_MEMBER_NAME_CHECKED(UFbxSkeletalMeshImportData, VertexColorImportOption));
PropertyRow.IsEnabled(TAttribute<bool>(this, &FFbxImportUIDetails::GetSkeletalMeshVertexOverrideColorEnabledState));
}
#Loc: <Workspace>/Engine/Source/Editor/DetailCustomizations/Private/FbxImportUIDetails.h:115
Scope (from outer to inner):
file
class class FFbxImportUIDetails : public IDetailCustomization, public FEditorUndoClient
Source code excerpt:
void OnLODGroupChanged(TSharedPtr<FString> NewValue, ESelectInfo::Type SelectInfo, TWeakPtr<IPropertyHandle> HandlePtr);
/** Called to determine the visibility of the VertexOverrideColor property */
bool GetVertexOverrideColorEnabledState() const;
bool GetSkeletalMeshVertexOverrideColorEnabledState() const;
FReply ShowConflictDialog(EConflictDialogType DialogType);
bool ShowCompareResult();
#Loc: <Workspace>/Engine/Source/Editor/Persona/Private/PersonaMeshDetails.cpp:4500
Scope (from outer to inner):
file
function void FPersonaMeshDetails::CustomizeDetails
Source code excerpt:
AssetImportProperty->MarkHiddenByCustomization();
VertexColorImportOptionHandle = AssetImportProperty->GetChildHandle(GET_MEMBER_NAME_CHECKED(UFbxSkeletalMeshImportData, VertexColorImportOption));
VertexColorImportOverrideHandle = AssetImportProperty->GetChildHandle(GET_MEMBER_NAME_CHECKED(UFbxSkeletalMeshImportData, VertexOverrideColor));
TMap<FName, IDetailGroup*> ExistingGroup;
PropertyCustomizationHelpers::MakeInstancedPropertyCustomUI(ExistingGroup, ImportSettingsCategory, AssetImportProperty, FOnInstancedPropertyIteration::CreateSP(this, &FPersonaMeshDetails::OnInstancedFbxSkeletalMeshImportDataPropertyIteration));
}
CustomizeSkinWeightProfiles(DetailLayout);
#Loc: <Workspace>/Engine/Source/Editor/Persona/Private/PersonaMeshDetails.h:840
Scope (from outer to inner):
file
class class FPersonaMeshDetails : public IDetailCustomization
Source code excerpt:
void OnInstancedFbxSkeletalMeshImportDataPropertyIteration(IDetailCategoryBuilder& BaseCategory, IDetailGroup* PropertyGroup, TSharedRef<IPropertyHandle>& Property) const;
// Delegate used at runtime to determine the state of the VertexOverrideColor property
bool GetVertexOverrideColorEnabledState() const;
// Called when the skeletal mesh has finished rebuilding. This may affect some settings, such as vertex attributes.
void OnMeshRebuildCompleted(USkeletalMesh* InMesh);
};
#Loc: <Workspace>/Engine/Source/Editor/StaticMeshEditor/Private/StaticMeshEditorTools.cpp:133
Scope (from outer to inner):
file
function void FStaticMeshDetails::CustomizeDetails
Source code excerpt:
ImportSettings->MarkHiddenByCustomization();
VertexColorImportOptionHandle = ImportSettings->GetChildHandle(GET_MEMBER_NAME_CHECKED(UFbxStaticMeshImportData, VertexColorImportOption));
VertexColorImportOverrideHandle = ImportSettings->GetChildHandle(GET_MEMBER_NAME_CHECKED(UFbxStaticMeshImportData, VertexOverrideColor));
TMap<FName, IDetailGroup*> ExistingGroup;
PropertyCustomizationHelpers::MakeInstancedPropertyCustomUI(ExistingGroup, ImportSettingsCategory, ImportSettings, FOnInstancedPropertyIteration::CreateSP(this, &FStaticMeshDetails::OnInstancedFbxStaticMeshImportDataPropertyIteration));
}
DetailBuilder.EditCategory( "Navigation", FText::GetEmpty(), ECategoryPriority::Uncommon );
#Loc: <Workspace>/Engine/Source/Editor/StaticMeshEditor/Private/StaticMeshEditorTools.h:81
Scope (from outer to inner):
file
class class FStaticMeshDetails : public IDetailCustomization
Source code excerpt:
void OnLightmapSettingsChanged();
// Delegate used at runtime to determine the state of the VertexOverrideColor property
bool GetVertexOverrideColorEnabledState() const;
};
/**
* Window handles convex decomposition, settings and controls.
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Factories/FbxSceneImportOptionsStaticMesh.h:63
Scope (from outer to inner):
file
class class UFbxSceneImportOptionsStaticMesh : public UObject
Source code excerpt:
/** Specify override color in the case that VertexColorImportOption is set to Override */
UPROPERTY(EditAnywhere, config, Category = StaticMesh)
FColor VertexOverrideColor;
/** Disabling this option will keep degenerate triangles found. In general you should leave this option on. */
UPROPERTY(EditAnywhere, config, Category = StaticMesh)
uint32 bRemoveDegenerates : 1;
UPROPERTY(EditAnywhere, config, Category = StaticMesh)
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Factories/FbxSkeletalMeshImportData.h:62
Scope (from outer to inner):
file
class class UFbxSkeletalMeshImportData : public UFbxMeshImportData
Source code excerpt:
/** Specify override color in the case that VertexColorImportOption is set to Override */
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, config, Category = Mesh, meta = (OBJRestrict = "true", ImportType = "SkeletalMesh|GeoOnly"))
FColor VertexOverrideColor;
/** Enable this option to update Skeleton (of the mesh)'s reference pose. Mesh's reference pose is always updated. */
UPROPERTY(EditAnywhere, AdvancedDisplay, config, Category=Mesh, meta=(ImportType="SkeletalMesh|RigOnly", ToolTip="If enabled, update the Skeleton (of the mesh being imported)'s reference pose."))
uint32 bUpdateSkeletonReferencePose:1;
/** Enable this option to use frame 0 as reference pose */
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Factories/FbxStaticMeshImportData.h:28
Scope (from outer to inner):
file
class class UFbxStaticMeshImportData : public UFbxMeshImportData
Source code excerpt:
/** Specify override color in the case that VertexColorImportOption is set to Override */
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, config, Category= Mesh, meta=(OBJRestrict="true", ImportType="StaticMesh"))
FColor VertexOverrideColor;
/** Disabling this option will keep degenerate triangles found. In general you should leave this option on. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, config, Category = Mesh, meta = (ImportType = "StaticMesh", ReimportRestrict = "true", EditCondition = "!bBuildNanite"))
uint32 bRemoveDegenerates:1;
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, config, Category = Mesh, meta = (ImportType = "StaticMesh", ReimportRestrict = "true"))
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:419
Scope (from outer to inner):
file
namespace UnFbx
function void ApplyImportUIToImportOptions
Source code excerpt:
InOutImportOptions.bConvertSceneUnit = StaticMeshData->bConvertSceneUnit;
InOutImportOptions.VertexColorImportOption = StaticMeshData->VertexColorImportOption;
InOutImportOptions.VertexOverrideColor = StaticMeshData->VertexOverrideColor;
InOutImportOptions.bReorderMaterialToFbxOrder = StaticMeshData->bReorderMaterialToFbxOrder;
InOutImportOptions.DistanceFieldResolutionScale = StaticMeshData->DistanceFieldResolutionScale;
}
else if ( ImportUI->MeshTypeToImport == FBXIT_SkeletalMesh )
{
UFbxSkeletalMeshImportData* SkeletalMeshData = ImportUI->SkeletalMeshImportData;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:439
Scope (from outer to inner):
file
namespace UnFbx
function void ApplyImportUIToImportOptions
Source code excerpt:
InOutImportOptions.bConvertSceneUnit = SkeletalMeshData->bConvertSceneUnit;
InOutImportOptions.VertexColorImportOption = SkeletalMeshData->VertexColorImportOption;
InOutImportOptions.VertexOverrideColor = SkeletalMeshData->VertexOverrideColor;
InOutImportOptions.bReorderMaterialToFbxOrder = SkeletalMeshData->bReorderMaterialToFbxOrder;
InOutImportOptions.bImportVertexAttributes = SkeletalMeshData->bImportVertexAttributes;
if(ImportUI->bImportAnimations)
{
// Copy the transform information into the animation data to match the mesh.
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:1679
Scope (from outer to inner):
file
namespace UnFbx
function bool FFbxImporter::ImportFromFile
Source code excerpt:
* @EventParam StaticMeshLODGroup string Returns the LOD Group settings we use to build this imported static mesh
* @EventParam VertexColorImportOption string Returns how the importer should import the vertex color
* @EventParam VertexOverrideColor string Returns the color use if we need to override the vertex color
* @EventParam AnimationLengthImportType string Returns how we choose the animation time span
* @EventParam DeleteExistingMorphTargetCurves boolean Returns whether the importer should delete the existing morph target curves
* @EventParam AnimationRange string Returns the range of animation the importer should sample if the time span is custom
* @EventParam DoNotImportCurveWithZero boolean Returns whether the importer should import curves containing only zero value
* @EventParam ImportBoneTracks boolean Returns whether the importer should import the bone tracks
* @EventParam ImportCustomAttribute boolean Returns whether the importer should import the custom attribute curves
* @EventParam PreserveLocalTransform boolean Returns whether the importer should preserve the local transform when importing the animation
* @EventParam RemoveRedundantKeys boolean Returns whether the importer should remove all redundant key in an animation
* @EventParam Resample boolean Returns whether the importer should re-sample the animation
* @EventParam SetMaterialDriveParameterOnCustomAttribute boolean Returns whether the importer should hook all custom attribute curve to unreal material attribute
* @EventParam SetMaterialDriveParameterOnCustomAttribute boolean Returns whether the importer should hook some custom attribute (having the suffix) curve to unreal material attribute
* @EventParam ResampleRate float Returns the rate the exporter is suppose to re-sample any imported animations
*
* @Owner Alexis.Matte
*/
FbxDocumentInfo* DocInfo = Scene->GetSceneInfo();
if (DocInfo)
{
if( FEngineAnalytics::IsAvailable() )
{
const static UEnum* FBXImportTypeEnum = StaticEnum<EFBXImportType>();
const static UEnum* FBXAnimationLengthImportTypeEnum = StaticEnum<EFBXAnimationLengthImportType>();
const static UEnum* MaterialSearchLocationEnum = StaticEnum<EMaterialSearchLocation>();
const static UEnum* FBXNormalGenerationMethodEnum = StaticEnum<EFBXNormalGenerationMethod::Type>();
const static UEnum* FBXNormalImportMethodEnum = StaticEnum<EFBXNormalImportMethod>();
const static UEnum* VertexColorImportOptionEnum = StaticEnum<EVertexColorImportOption::Type>();
TArray<FAnalyticsEventAttribute> Attribs;
FString LastSavedVendor(UTF8_TO_TCHAR(DocInfo->LastSaved_ApplicationVendor.Get().Buffer()));
FString LastSavedAppName(UTF8_TO_TCHAR(DocInfo->LastSaved_ApplicationName.Get().Buffer()));
FString LastSavedAppVersion(UTF8_TO_TCHAR(DocInfo->LastSaved_ApplicationVersion.Get().Buffer()));
Attribs.Add(FAnalyticsEventAttribute(TEXT("LastSaved Application Vendor"), LastSavedVendor));
Attribs.Add(FAnalyticsEventAttribute(TEXT("LastSaved Application Name"), LastSavedAppName));
Attribs.Add(FAnalyticsEventAttribute(TEXT("LastSaved Application Version"), LastSavedAppVersion));
Attribs.Add(FAnalyticsEventAttribute(TEXT("FBX Version"), FbxFileVersion));
//////////////////////////////////////////////////////////////////////////
//FBX import options
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ImportType"), FBXImportTypeEnum->GetNameStringByValue(ImportOptions->ImportType)));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ConvertScene"), ImportOptions->bConvertScene));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ConvertSceneUnit"), ImportOptions->bConvertSceneUnit));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ForceFrontXAxis"), ImportOptions->bForceFrontXAxis));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ImportMaterials"), ImportOptions->bImportMaterials));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ImportTextures"), ImportOptions->bImportTextures));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt InvertNormalMap"), ImportOptions->bInvertNormalMap));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt RemoveNameSpace"), ImportOptions->bRemoveNameSpace));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt UsedAsFullName"), ImportOptions->bUsedAsFullName));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ImportTranslation"), ImportOptions->ImportTranslation.ToString()));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ImportRotation"), ImportOptions->ImportRotation.ToString()));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ImportUniformScale"), ImportOptions->ImportUniformScale));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt MaterialBasePath"), ImportOptions->MaterialBasePath));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt MaterialSearchLocation"), MaterialSearchLocationEnum->GetNameStringByValue((uint64)(ImportOptions->MaterialSearchLocation))));
Attribs.Add(FAnalyticsEventAttribute(TEXT("GenOpt ReorderMaterialToFbxOrder"), ImportOptions->bReorderMaterialToFbxOrder));
//We cant capture a this member, so just assign the pointer here
FBXImportOptions* CaptureImportOptions = ImportOptions;
auto AddMeshAnalytic = [&Attribs, &CaptureImportOptions]()
{
Attribs.Add(FAnalyticsEventAttribute(TEXT("MeshOpt AutoGenerateCollision"), CaptureImportOptions->bAutoGenerateCollision));
Attribs.Add(FAnalyticsEventAttribute(TEXT("MeshOpt CombineToSingle"), CaptureImportOptions->bCombineToSingle));
Attribs.Add(FAnalyticsEventAttribute(TEXT("MeshOpt BakePivotInVertex"), CaptureImportOptions->bBakePivotInVertex));
Attribs.Add(FAnalyticsEventAttribute(TEXT("MeshOpt TransformVertexToAbsolute"), CaptureImportOptions->bTransformVertexToAbsolute));
Attribs.Add(FAnalyticsEventAttribute(TEXT("MeshOpt ImportRigidMesh"), CaptureImportOptions->bImportRigidMesh));
Attribs.Add(FAnalyticsEventAttribute(TEXT("MeshOpt NormalGenerationMethod"), FBXNormalGenerationMethodEnum->GetNameStringByValue(CaptureImportOptions->NormalGenerationMethod)));
Attribs.Add(FAnalyticsEventAttribute(TEXT("MeshOpt NormalImportMethod"), FBXNormalImportMethodEnum->GetNameStringByValue(CaptureImportOptions->NormalImportMethod)));
Attribs.Add(FAnalyticsEventAttribute(TEXT("MeshOpt ComputeWeightedNormals"), CaptureImportOptions->bComputeWeightedNormals));
};
auto AddSKAnalytic = [&Attribs, &CaptureImportOptions]()
{
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt CreatePhysicsAsset"), CaptureImportOptions->bCreatePhysicsAsset));
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:1781
Scope (from outer to inner):
file
lambda-function
Source code excerpt:
Attribs.Add(FAnalyticsEventAttribute(TEXT("StaticMeshOpt StaticMeshLODGroup"), CaptureImportOptions->StaticMeshLODGroup));
Attribs.Add(FAnalyticsEventAttribute(TEXT("StaticMeshOpt VertexColorImportOption"), VertexColorImportOptionEnum->GetNameStringByValue(CaptureImportOptions->VertexColorImportOption)));
Attribs.Add(FAnalyticsEventAttribute(TEXT("StaticMeshOpt VertexOverrideColor"), CaptureImportOptions->VertexOverrideColor.ToString()));
};
auto AddAnimAnalytic = [&Attribs, &CaptureImportOptions]()
{
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt AnimationLengthImportType"), FBXAnimationLengthImportTypeEnum->GetNameStringByValue(CaptureImportOptions->AnimationLengthImportType)));
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt DeleteExistingMorphTargetCurves"), CaptureImportOptions->bDeleteExistingMorphTargetCurves));
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportData.cpp:96
Scope (from outer to inner):
file
function UnFbx::FBXImportOptions *JSONToFbxOption
Source code excerpt:
(*DataObj)->TryGetNumberField(TEXT("B"), B);
(*DataObj)->TryGetNumberField(TEXT("A"), A);
Option->VertexOverrideColor.R = static_cast<uint8>(R);
Option->VertexOverrideColor.G = static_cast<uint8>(G);
Option->VertexOverrideColor.B = static_cast<uint8>(B);
Option->VertexOverrideColor.A = static_cast<uint8>(A);
}
OptionObj->TryGetBoolField(TEXT("bRemoveDegenerates"), Option->bRemoveDegenerates);
OptionObj->TryGetBoolField(TEXT("bBuildReversedIndexBuffer"), Option->bBuildReversedIndexBuffer);
OptionObj->TryGetBoolField(TEXT("bGenerateLightmapUVs"), Option->bGenerateLightmapUVs);
OptionObj->TryGetBoolField(TEXT("bOneConvexHullPerUCX"), Option->bOneConvexHullPerUCX);
OptionObj->TryGetBoolField(TEXT("bAutoGenerateCollision"), Option->bAutoGenerateCollision);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportData.cpp:189
Scope (from outer to inner):
file
function FString FbxOptionToJSON
Source code excerpt:
Option->bCombineToSingle ? 1 : 0,
(int32)Option->VertexColorImportOption,
Option->VertexOverrideColor.R,
Option->VertexOverrideColor.G,
Option->VertexOverrideColor.B,
Option->VertexOverrideColor.A
);
JsonString += FString::Printf(TEXT("\"bRemoveDegenerates\" : \"%d\", \"bBuildReversedIndexBuffer\" : \"%d\", \"bGenerateLightmapUVs\" : \"%d\", \"bOneConvexHullPerUCX\" : \"%d\", \"bAutoGenerateCollision\" : \"%d\", \"StaticMeshLODGroup\" : \"%s\", \"bImportStaticMeshLODs\" : \"%d\", "),
Option->bRemoveDegenerates ? 1 : 0,
Option->bBuildReversedIndexBuffer ? 1 : 0,
Option->bGenerateLightmapUVs ? 1 : 0,
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportOptionsStaticMesh.cpp:22
Scope (from outer to inner):
file
function UFbxSceneImportOptionsStaticMesh::UFbxSceneImportOptionsStaticMesh
Source code excerpt:
, bOneConvexHullPerUCX(true)
{
VertexOverrideColor = FColor(255, 255, 255, 255);
NormalImportMethod = EFBXSceneNormalImportMethod::FBXSceneNIM_ComputeNormals;
NormalGenerationMethod = EFBXSceneNormalGenerationMethod::MikkTSpace;
}
void UFbxSceneImportOptionsStaticMesh::FillStaticMeshInmportData(UFbxStaticMeshImportData* StaticMeshImportData, UFbxSceneImportOptions* SceneImportOptions)
{
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportOptionsStaticMesh.cpp:49
Scope (from outer to inner):
file
function void UFbxSceneImportOptionsStaticMesh::FillStaticMeshInmportData
Source code excerpt:
break;
}
StaticMeshImportData->VertexOverrideColor = VertexOverrideColor;
//Scene general options
StaticMeshImportData->bImportMeshLODs = SceneImportOptions->bImportStaticMeshLODs;
StaticMeshImportData->ImportTranslation = SceneImportOptions->ImportTranslation;
StaticMeshImportData->ImportRotation = SceneImportOptions->ImportRotation;
StaticMeshImportData->ImportUniformScale = SceneImportOptions->ImportUniformScale;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImport.cpp:3742
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::FillSkelMeshImporterFromFbx
Source code excerpt:
{
int32 UnrealVertexIndex = OddNegativeScale ? 2 - VertexIndex : VertexIndex;
TmpWedges[UnrealVertexIndex].Color = ImportOptions->VertexOverrideColor;
}
}
else if (ImportOptions->VertexColorImportOption == EVertexColorImportOption::Ignore && ImportData.bHasVertexColors)
{
for (int32 VertexIndex = 0; VertexIndex < 3; VertexIndex++)
{
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp:374
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::BuildStaticMeshFromGeometry
Source code excerpt:
bool UnFbx::FFbxImporter::BuildStaticMeshFromGeometry(FbxNode* Node, UStaticMesh* StaticMesh, TArray<FFbxMaterial>& MeshMaterials, int32 LODIndex,
EVertexColorImportOption::Type VertexColorImportOption, const TMap<FVector3f, FColor>& ExistingVertexColorData, const FColor& VertexOverrideColor)
{
TRACE_CPUPROFILER_EVENT_SCOPE(FFbxImporter::BuildStaticMeshFromGeometry);
FFbxScopedOperation ScopedImportOperation(this);
//Only cancel the operation if we are creating a new asset, as we don't support existing asset restoration yet.
check(StaticMesh->IsSourceModelValid(LODIndex));
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp:967
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::BuildStaticMeshFromGeometry
Source code excerpt:
// set the triangle's vertex color to a constant override
check(VertexColorImportOption == EVertexColorImportOption::Override);
VertexInstanceColors[AddedVertexInstanceId] = FVector4f(FLinearColor(VertexOverrideColor));
}
if (LayerElementNormal)
{
//normals may have different reference and mapping mode than tangents and binormals
int NormalMapIndex = (NormalMappingMode == FbxLayerElement::eByControlPoint) ?
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp:1892
Scope (from outer to inner):
file
function UStaticMesh* UnFbx::FFbxImporter::ImportStaticMeshAsSingle
Source code excerpt:
if (!BuildStaticMeshFromGeometry(Node, StaticMesh, MeshMaterials, LODIndex,
VertexColorImportOption, ExistingVertexColorData, ImportOptions->VertexOverrideColor))
{
// If this FBX node failed to build, make a note and continue.
// We should only fail the mesh/LOD import if every node failed.
NodeFailCount++;
}
}
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImportData.cpp:15
Scope (from outer to inner):
file
function UFbxStaticMeshImportData::UFbxStaticMeshImportData
Source code excerpt:
bTransformVertexToAbsolute = true;
bBakePivotInVertex = false;
VertexOverrideColor = FColor(255, 255, 255, 255);
DistanceFieldResolutionScale = 1.0f;
}
UFbxStaticMeshImportData* UFbxStaticMeshImportData::GetImportDataForStaticMesh(UStaticMesh* StaticMesh, UFbxStaticMeshImportData* TemplateForCreation)
{
check(StaticMesh);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/SFbxSceneOptionWindow.cpp:1421
Scope (from outer to inner):
file
function void SFbxSceneOptionWindow::CopyStaticMeshOptionsToFbxOptions
Source code excerpt:
ImportSettings->VertexColorImportOption = EVertexColorImportOption::Type::Replace;
}
ImportSettings->VertexOverrideColor = StaticMeshOptions->VertexOverrideColor;
switch (StaticMeshOptions->NormalImportMethod)
{
case EFBXSceneNormalImportMethod::FBXSceneNIM_ComputeNormals:
ImportSettings->NormalImportMethod = FBXNIM_ComputeNormals;
break;
case EFBXSceneNormalImportMethod::FBXSceneNIM_ImportNormals:
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/SFbxSceneOptionWindow.cpp:1467
Scope (from outer to inner):
file
function void SFbxSceneOptionWindow::CopyFbxOptionsToStaticMeshOptions
Source code excerpt:
StaticMeshOptions->VertexColorImportOption = EFbxSceneVertexColorImportOption::Replace;
}
StaticMeshOptions->VertexOverrideColor = ImportSettings->VertexOverrideColor;
switch (ImportSettings->NormalImportMethod)
{
case FBXNIM_ComputeNormals:
StaticMeshOptions->NormalImportMethod = EFBXSceneNormalImportMethod::FBXSceneNIM_ComputeNormals;
break;
case FBXNIM_ImportNormals:
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/FbxImporter.h:147
Scope (from outer to inner):
file
namespace UnFbx
Source code excerpt:
bool bCombineToSingle;
EVertexColorImportOption::Type VertexColorImportOption;
FColor VertexOverrideColor;
float DistanceFieldResolutionScale;
bool bRemoveDegenerates;
bool bBuildReversedIndexBuffer;
bool bBuildNanite;
bool bGenerateLightmapUVs;
bool bOneConvexHullPerUCX;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/FbxImporter.h:1429
Scope (from outer to inner):
file
namespace UnFbx
class class FFbxImporter
Source code excerpt:
*/
bool BuildStaticMeshFromGeometry(FbxNode* Node, UStaticMesh* StaticMesh, TArray<FFbxMaterial>& MeshMaterials, int LODIndex,
EVertexColorImportOption::Type VertexColorImportOption, const TMap<FVector3f, FColor>& ExistingVertexColorData, const FColor& VertexOverrideColor);
/**
* Clean up for destroy the Importer.
*/
void CleanUp();