VertexColorImportOption
VertexColorImportOption
#Overview
name: VertexColorImportOption
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 51
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of VertexColorImportOption is to control how vertex colors are imported when bringing 3D mesh data into Unreal Engine. This setting variable is primarily used in the mesh importing system, specifically for static meshes and skeletal meshes.
VertexColorImportOption is utilized by the FBX importer subsystem within Unreal Engine. It’s referenced in various modules related to asset importing, including the DatasmithFBXImporter plugin, the Interchange system, and the core UnrealEd module.
The value of this variable is typically set through import options UI or import settings objects. It’s often stored in UFbxStaticMeshImportData or UFbxSkeletalMeshImportData objects.
VertexColorImportOption interacts closely with the VertexOverrideColor variable, which specifies a color to use when overriding vertex colors during import.
Developers must be aware that this variable affects how vertex color data is handled during mesh import. It can significantly impact the appearance of imported meshes if vertex colors are an important part of the asset’s visual fidelity.
Best practices when using this variable include:
- Use “Replace” when you want to import vertex colors from the source file.
- Use “Ignore” when you want to preserve existing vertex colors in the case of reimporting.
- Use “Override” when you want to apply a uniform color to all vertices, specified by VertexOverrideColor.
It’s important to choose the appropriate option based on your specific use case and the nature of the assets being imported. Incorrect usage could lead to unexpected visual results or loss of important color data.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:656, section: [/Script/UnrealEd.FbxStaticMeshImportData]
- INI Section:
/Script/UnrealEd.FbxStaticMeshImportData
- Raw value:
EVertexColorImportOption::Ignore
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:668, section: [/Script/UnrealEd.FbxSkeletalMeshImportData]
- INI Section:
/Script/UnrealEd.FbxSkeletalMeshImportData
- Raw value:
EVertexColorImportOption::Replace
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Enterprise/DatasmithFBXImporter/Source/DatasmithFBXTranslator/Private/DatasmithFBXFileImporter.cpp:1281
Scope (from outer to inner):
file
function void FDatasmithFBXFileImporter::DoImportMesh
Source code excerpt:
for (int32 CornerIndex = 0; CornerIndex < CornerCount; CornerIndex++)
{
// if (VertexColorImportOption == EVertexColorImportOption::Replace)
int32 VertexColorMappingIndex = (VertexColorMappingMode == FbxLayerElement::eByControlPoint) ? CornerVertexIDs[CornerIndex].GetValue() : FirstFbxInstanceIndexForPoly + CornerIndex;
int32 VectorColorIndex = (VertexColorReferenceMode == FbxLayerElement::eDirect) ? VertexColorMappingIndex : LayerElementVertexColor->GetIndexArray().GetAt(VertexColorMappingIndex);
FbxColor VertexColor = LayerElementVertexColor->GetDirectArray().GetAt(VectorColorIndex);
// (no reason to convert to linear color as source is not sRGB)
FVector4f RawColor(float(VertexColor.mRed), float(VertexColor.mGreen), float(VertexColor.mBlue), float(VertexColor.mAlpha));
VertexInstanceColors[CornerVertexInstanceIDs[CornerIndex]] = RawColor;
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:157
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void FillInterchangeGenericAssetsPipelineFromFbxStaticMeshImportData
Source code excerpt:
GenericAssetPipeline->MeshPipeline->DistanceFieldResolutionScale = StaticMeshImportData->DistanceFieldResolutionScale;
GenericAssetPipeline->MeshPipeline->LodGroup = StaticMeshImportData->StaticMeshLODGroup;
if (StaticMeshImportData->VertexColorImportOption == EVertexColorImportOption::Ignore)
{
GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Ignore;
}
else if (StaticMeshImportData->VertexColorImportOption == EVertexColorImportOption::Override)
{
GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Override;
}
else if (StaticMeshImportData->VertexColorImportOption == EVertexColorImportOption::Replace)
{
GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Replace;
}
GenericAssetPipeline->CommonMeshesProperties->VertexOverrideColor = StaticMeshImportData->VertexOverrideColor;
}
void FillInterchangeGenericAssetsPipelineFromFbxSkeletalMeshImportData(UInterchangeGenericAssetsPipeline* GenericAssetPipeline
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:225
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void FillInterchangeGenericAssetsPipelineFromFbxSkeletalMeshImportData
Source code excerpt:
GenericAssetPipeline->MeshPipeline->ThresholdUV = SkeletalMeshImportData->ThresholdUV;
if (SkeletalMeshImportData->VertexColorImportOption == EVertexColorImportOption::Ignore)
{
GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Ignore;
}
else if (SkeletalMeshImportData->VertexColorImportOption == EVertexColorImportOption::Override)
{
GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Override;
}
else if (SkeletalMeshImportData->VertexColorImportOption == EVertexColorImportOption::Replace)
{
GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Replace;
}
GenericAssetPipeline->CommonMeshesProperties->VertexOverrideColor = SkeletalMeshImportData->VertexOverrideColor;
}
void FillInterchangeGenericAssetsPipelineFromFbxAnimSequenceImportData(UInterchangeGenericAssetsPipeline* GenericAssetPipeline
, const UFbxAnimSequenceImportData* AnimSequenceImportData)
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:322
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function UAssetImportData* ConvertToLegacyFbx
Source code excerpt:
DestinationStaticMeshImportData->DistanceFieldResolutionScale = GenericAssetPipeline->MeshPipeline->DistanceFieldResolutionScale;
DestinationStaticMeshImportData->StaticMeshLODGroup = GenericAssetPipeline->MeshPipeline->LodGroup;
if (GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption == EInterchangeVertexColorImportOption::IVCIO_Ignore)
{
DestinationStaticMeshImportData->VertexColorImportOption = EVertexColorImportOption::Ignore;
}
else if (GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption == EInterchangeVertexColorImportOption::IVCIO_Override)
{
DestinationStaticMeshImportData->VertexColorImportOption = EVertexColorImportOption::Override;
}
else if (GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption == EInterchangeVertexColorImportOption::IVCIO_Replace)
{
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())
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:414
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function UAssetImportData* ConvertToLegacyFbx
Source code excerpt:
DestinationSkeletalMeshImportData->ThresholdUV = GenericAssetPipeline->MeshPipeline->ThresholdUV;
if (GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption == EInterchangeVertexColorImportOption::IVCIO_Ignore)
{
DestinationSkeletalMeshImportData->VertexColorImportOption = EVertexColorImportOption::Ignore;
}
else if (GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption == EInterchangeVertexColorImportOption::IVCIO_Override)
{
DestinationSkeletalMeshImportData->VertexColorImportOption = EVertexColorImportOption::Override;
}
else if (GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption == EInterchangeVertexColorImportOption::IVCIO_Replace)
{
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())
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericAssetsPipeline.cpp:259
Scope (from outer to inner):
file
function void UInterchangeGenericAssetsPipeline::FilterPropertiesFromTranslatedData
Source code excerpt:
{
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/InterchangeGenericMeshPipeline.cpp:53
Scope (from outer to inner):
file
function void UInterchangeGenericMeshPipeline::AdjustSettingsForContext
Source code excerpt:
CommonMeshesProperties->bImportLods = false;
CommonMeshesProperties->bKeepSectionsSeparate = false;
CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Ignore;
bImportSkeletalMeshes = true;
bImportStaticMeshes = false;
bBuildNanite = false;
bImportMorphTargets = false;
bImportVertexAttributes = false;
bUpdateSkeletonReferencePose = false;
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericSkeletalMeshPipeline.cpp:456
Scope (from outer to inner):
file
function UInterchangeSkeletalMeshFactoryNode* UInterchangeGenericMeshPipeline::CreateSkeletalMeshFactoryNode
Source code excerpt:
const bool bTrueValue = true;
switch (CommonMeshesProperties->VertexColorImportOption)
{
case EInterchangeVertexColorImportOption::IVCIO_Replace:
{
SkeletalMeshFactoryNode->SetCustomVertexColorReplace(bTrueValue);
}
break;
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericStaticMeshPipeline.cpp:431
Scope (from outer to inner):
file
function UInterchangeStaticMeshFactoryNode* UInterchangeGenericMeshPipeline::CreateStaticMeshFactoryNode
Source code excerpt:
AddLodDataToStaticMesh(StaticMeshFactoryNode, MeshUidsPerLodIndex);
switch (CommonMeshesProperties->VertexColorImportOption)
{
case EInterchangeVertexColorImportOption::IVCIO_Replace:
{
StaticMeshFactoryNode->SetCustomVertexColorReplace(true);
}
break;
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Public/InterchangeGenericAssetsPipelineSharedSettings.h:78
Scope (from outer to inner):
file
class class UInterchangeGenericCommonMeshesProperties : public UInterchangePipelineBase
Source code excerpt:
/** Specify how vertex colors should be imported. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Common Meshes")
EInterchangeVertexColorImportOption VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Replace;
/** 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. */
#Loc: <Workspace>/Engine/Plugins/MeshPainting/Source/MeshPaintEditorMode/Private/MeshPaintModeHelpers.cpp:329
Scope (from outer to inner):
file
function void UMeshPaintModeSubsystem::ImportVertexColorsToSkeletalMesh
Source code excerpt:
{
UFbxSkeletalMeshImportData* ImportData = Cast<UFbxSkeletalMeshImportData>(SkeletalMesh->GetAssetImportData());
if (ImportData && ImportData->VertexColorImportOption != EVertexColorImportOption::Ignore)
{
ImportData->SetFlags(RF_Transactional);
ImportData->Modify();
ImportData->VertexColorImportOption = EVertexColorImportOption::Ignore;
}
UInterchangeAssetImportData* InterchangeAssetImportData = Cast<UInterchangeAssetImportData>(SkeletalMesh->GetAssetImportData());
if (InterchangeAssetImportData)
{
TArray<UObject*> Pipelines = InterchangeAssetImportData->GetPipelines();
#Loc: <Workspace>/Engine/Plugins/MeshPainting/Source/MeshPaintEditorMode/Private/MeshPaintModeHelpers.cpp:346
Scope (from outer to inner):
file
function void UMeshPaintModeSubsystem::ImportVertexColorsToSkeletalMesh
Source code excerpt:
if (GenericAssetPipeline)
{
if (GenericAssetPipeline->CommonMeshesProperties && GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption != EInterchangeVertexColorImportOption::IVCIO_Ignore)
{
GenericAssetPipeline->SetFlags(RF_Transactional);
GenericAssetPipeline->Modify();
GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Ignore;
}
}
}
}
}
}
#Loc: <Workspace>/Engine/Plugins/MeshPainting/Source/MeshPaintingToolset/Private/MeshPaintSkeletalMeshAdapter.cpp:392
Scope (from outer to inner):
file
function void FMeshPaintSkeletalMeshComponentAdapter::PreEdit
Source code excerpt:
{
UFbxSkeletalMeshImportData* ImportData = Cast<UFbxSkeletalMeshImportData>(ReferencedSkeletalMesh->GetAssetImportData());
if (ImportData && ImportData->VertexColorImportOption != EVertexColorImportOption::Ignore)
{
ImportData->SetFlags(RF_Transactional);
ImportData->Modify();
ImportData->VertexColorImportOption = EVertexColorImportOption::Ignore;
}
UInterchangeAssetImportData* InterchangeAssetImportData = Cast<UInterchangeAssetImportData>(ReferencedSkeletalMesh->GetAssetImportData());
if (InterchangeAssetImportData)
{
TArray<UObject*> Pipelines = InterchangeAssetImportData->GetPipelines();
#Loc: <Workspace>/Engine/Plugins/MeshPainting/Source/MeshPaintingToolset/Private/MeshPaintSkeletalMeshAdapter.cpp:409
Scope (from outer to inner):
file
function void FMeshPaintSkeletalMeshComponentAdapter::PreEdit
Source code excerpt:
if (GenericAssetPipeline)
{
if (GenericAssetPipeline->CommonMeshesProperties && GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption != EInterchangeVertexColorImportOption::IVCIO_Ignore)
{
GenericAssetPipeline->SetFlags(RF_Transactional);
GenericAssetPipeline->Modify();
GenericAssetPipeline->CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Ignore;
}
}
}
}
}
}
#Loc: <Workspace>/Engine/Plugins/Tests/EditorTests/Source/EditorTests/Private/UnrealEd/FbxAutomationTests.cpp:380
Scope (from outer to inner):
file
function BEGIN_FUNCTION_BUILD_OPTIMIZATION bool F
Source code excerpt:
//Copy UFbxStaticMeshImportData
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;
#Loc: <Workspace>/Engine/Plugins/Tests/EditorTests/Source/EditorTests/Private/UnrealEd/FbxAutomationTests.cpp:488
Scope (from outer to inner):
file
function BEGIN_FUNCTION_BUILD_OPTIMIZATION bool F
Source code excerpt:
//Copy UFbxStaticMeshImportData
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;
#Loc: <Workspace>/Engine/Source/Editor/DetailCustomizations/Private/FbxImportUIDetails.cpp:512
Scope (from outer to inner):
file
function void FFbxImportUIDetails::CustomizeDetails
Source code excerpt:
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));
}
}
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.cpp:1104
Scope (from outer to inner):
file
function bool FFbxImportUIDetails::GetVertexOverrideColorEnabledState
Source code excerpt:
bool FFbxImportUIDetails::GetVertexOverrideColorEnabledState() const
{
uint8 VertexColorImportOption;
check(VertexColorImportOptionHandle.IsValid());
ensure(VertexColorImportOptionHandle->GetValue(VertexColorImportOption) == FPropertyAccess::Success);
return (VertexColorImportOption == EVertexColorImportOption::Override);
}
bool FFbxImportUIDetails::GetSkeletalMeshVertexOverrideColorEnabledState() const
{
uint8 VertexColorImportOption;
check(SkeletalMeshVertexColorImportOptionHandle.IsValid());
ensure(SkeletalMeshVertexColorImportOptionHandle->GetValue(VertexColorImportOption) == FPropertyAccess::Success);
return (VertexColorImportOption == EVertexColorImportOption::Override);
}
void FFbxImportUIDetails::CollectChildPropertiesRecursive(TSharedPtr<IPropertyHandle> Node, TArray<TSharedPtr<IPropertyHandle>>& OutProperties)
{
uint32 NodeNumChildren = 0;
Node->GetNumChildren(NodeNumChildren);
#Loc: <Workspace>/Engine/Source/Editor/DetailCustomizations/Private/FbxImportUIDetails.h:129
Scope (from outer to inner):
file
class class FFbxImportUIDetails : public IDetailCustomization, public FEditorUndoClient
Source code excerpt:
TSharedPtr<IPropertyHandle> StaticMeshLODGroupPropertyHandle;
/** Cached VertexColorImportOption property handle */
TSharedPtr<IPropertyHandle> VertexColorImportOptionHandle;
TSharedPtr<IPropertyHandle> SkeletalMeshVertexColorImportOptionHandle;
EMaterialImportMethod SelectedMaterialImportMethod;
bool bShowBaseMaterialUI;
#Loc: <Workspace>/Engine/Source/Editor/MeshPaint/Private/MeshPaintHelpers.cpp:1539
Scope (from outer to inner):
file
function void MeshPaintHelpers::ImportVertexColorsToSkeletalMesh
Source code excerpt:
{
UFbxSkeletalMeshImportData* ImportData = Cast<UFbxSkeletalMeshImportData>(SkeletalMesh->GetAssetImportData());
if (ImportData && ImportData->VertexColorImportOption != EVertexColorImportOption::Ignore)
{
ImportData->SetFlags(RF_Transactional);
ImportData->Modify();
ImportData->VertexColorImportOption = EVertexColorImportOption::Ignore;
}
}
}
FColor MeshPaintHelpers::PickVertexColorFromTextureData(const uint8* MipData, const FVector2D& UVCoordinate, const UTexture2D* Texture, const FColor ColorMask)
{
#Loc: <Workspace>/Engine/Source/Editor/MeshPaint/Private/MeshPaintSkeletalMeshAdapter.cpp:468
Scope (from outer to inner):
file
function void FMeshPaintGeometryAdapterForSkeletalMeshes::PreEdit
Source code excerpt:
{
UFbxSkeletalMeshImportData* ImportData = Cast<UFbxSkeletalMeshImportData>(ReferencedSkeletalMesh->GetAssetImportData());
if (ImportData && ImportData->VertexColorImportOption != EVertexColorImportOption::Ignore)
{
ImportData->SetFlags(RF_Transactional);
ImportData->Modify();
ImportData->VertexColorImportOption = EVertexColorImportOption::Ignore;
}
}
}
void FMeshPaintGeometryAdapterForSkeletalMeshes::PostEdit()
{
#Loc: <Workspace>/Engine/Source/Editor/Persona/Private/PersonaMeshDetails.cpp:4499
Scope (from outer to inner):
file
function void FPersonaMeshDetails::CustomizeDetails
Source code excerpt:
// we need to manually recreate the whole FbxSkeletalMeshImportData UI in order to customize it.
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));
}
#Loc: <Workspace>/Engine/Source/Editor/Persona/Private/PersonaMeshDetails.cpp:4536
Scope (from outer to inner):
file
function bool FPersonaMeshDetails::GetVertexOverrideColorEnabledState
Source code excerpt:
bool FPersonaMeshDetails::GetVertexOverrideColorEnabledState() const
{
uint8 VertexColorImportOption;
check(VertexColorImportOptionHandle.IsValid());
ensure(VertexColorImportOptionHandle->GetValue(VertexColorImportOption) == FPropertyAccess::Success);
return (VertexColorImportOption == EVertexColorImportOption::Override);
}
void FPersonaMeshDetails::OnMeshRebuildCompleted(USkeletalMesh* InMesh)
{
if (InMesh == SkeletalMeshPtr.Get())
#Loc: <Workspace>/Engine/Source/Editor/StaticMeshEditor/Private/StaticMeshEditorTools.cpp:132
Scope (from outer to inner):
file
function void FStaticMeshDetails::CustomizeDetails
Source code excerpt:
// we need to manually recreate the whole FbxStaticMeshImportData UI in order to customize it.
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.cpp:226
Scope (from outer to inner):
file
function bool FStaticMeshDetails::GetVertexOverrideColorEnabledState
Source code excerpt:
bool FStaticMeshDetails::GetVertexOverrideColorEnabledState() const
{
uint8 VertexColorImportOption;
check(VertexColorImportOptionHandle.IsValid());
ensure(VertexColorImportOptionHandle->GetValue(VertexColorImportOption) == FPropertyAccess::Success);
return (VertexColorImportOption == EVertexColorImportOption::Override);
}
void SConvexDecomposition::Construct(const FArguments& InArgs)
{
StaticMeshEditorPtr = InArgs._StaticMeshEditorPtr;
CurrentHullPrecision = DefaultHullPrecision;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Factories/FbxSceneImportOptionsStaticMesh.h:59
Scope (from outer to inner):
file
class class UFbxSceneImportOptionsStaticMesh : public UObject
Source code excerpt:
/** Specify how vertex colors should be imported */
UPROPERTY(EditAnywhere, config, Category = StaticMesh)
EFbxSceneVertexColorImportOption VertexColorImportOption;
/** 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;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Factories/FbxSkeletalMeshImportData.h:58
Scope (from outer to inner):
file
class class UFbxSkeletalMeshImportData : public UFbxMeshImportData
Source code excerpt:
/** Specify how vertex colors should be imported */
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, config, Category = Mesh, meta = (OBJRestrict = "true", ImportType = "SkeletalMesh|GeoOnly"))
TEnumAsByte<EVertexColorImportOption::Type> VertexColorImportOption;
/** 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;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Factories/FbxStaticMeshImportData.h:24
Scope (from outer to inner):
file
class class UFbxStaticMeshImportData : public UFbxMeshImportData
Source code excerpt:
/** Specify how vertex colors should be imported */
UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, config, Category= Mesh, meta=(OBJRestrict="true", ImportType="StaticMesh"))
TEnumAsByte<EVertexColorImportOption::Type> VertexColorImportOption;
/** 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;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Factories/EditorFactories.cpp:6745
Scope (from outer to inner):
file
function EReimportResult::Type UReimportFbxSkeletalMeshFactory::Reimport
Source code excerpt:
ImportOptions->bImportAnimations = false;
ImportOptions->bImportMorph = false;
ImportOptions->VertexColorImportOption = EVertexColorImportOption::Ignore;
}
else if (ImportOptions->bImportAsSkeletalGeometry)
{
ImportOptions->bImportAnimations = false;
ImportOptions->bUpdateSkeletonReferencePose = false;
}
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:418
Scope (from outer to inner):
file
namespace UnFbx
function void ApplyImportUIToImportOptions
Source code excerpt:
InOutImportOptions.bForceFrontXAxis = StaticMeshData->bForceFrontXAxis;
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 )
{
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:438
Scope (from outer to inner):
file
namespace UnFbx
function void ApplyImportUIToImportOptions
Source code excerpt:
InOutImportOptions.bForceFrontXAxis = SkeletalMeshData->bForceFrontXAxis;
InOutImportOptions.bConvertSceneUnit = SkeletalMeshData->bConvertSceneUnit;
InOutImportOptions.VertexColorImportOption = SkeletalMeshData->VertexColorImportOption;
InOutImportOptions.VertexOverrideColor = SkeletalMeshData->VertexOverrideColor;
InOutImportOptions.bReorderMaterialToFbxOrder = SkeletalMeshData->bReorderMaterialToFbxOrder;
InOutImportOptions.bImportVertexAttributes = SkeletalMeshData->bImportVertexAttributes;
if(ImportUI->bImportAnimations)
{
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:1678
Scope (from outer to inner):
file
namespace UnFbx
function bool FFbxImporter::ImportFromFile
Source code excerpt:
* @EventParam MinimumLodNumber integer Returns the minimum LOD use by the rendering
* @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]()
{
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:1780
Scope (from outer to inner):
file
lambda-function
Source code excerpt:
Attribs.Add(FAnalyticsEventAttribute(TEXT("StaticMeshOpt MinimumLodNumber"), CaptureImportOptions->MinimumLodNumber));
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)));
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportData.cpp:84
Scope (from outer to inner):
file
function UnFbx::FBXImportOptions *JSONToFbxOption
Source code excerpt:
OptionObj->TryGetBoolField(TEXT("bBakePivotInVertex"), Option->bBakePivotInVertex);
OptionObj->TryGetBoolField(TEXT("bCombineToSingle"), Option->bCombineToSingle);
int32 VertexColorImportOption;
if (OptionObj->TryGetNumberField(TEXT("VertexColorImportOption"), VertexColorImportOption))
{
Option->VertexColorImportOption = (EVertexColorImportOption::Type)VertexColorImportOption;
}
if (OptionObj->TryGetObjectField(TEXT("VertexOverrideColor"), DataObj))
{
double R, G, B, A;
(*DataObj)->TryGetNumberField(TEXT("R"), R);
(*DataObj)->TryGetNumberField(TEXT("G"), G);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportData.cpp:188
Scope (from outer to inner):
file
function FString FbxOptionToJSON
Source code excerpt:
Option->bBakePivotInVertex ? 1 : 0,
Option->bCombineToSingle ? 1 : 0,
(int32)Option->VertexColorImportOption,
Option->VertexOverrideColor.R,
Option->VertexOverrideColor.G,
Option->VertexOverrideColor.B,
Option->VertexOverrideColor.A
);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportOptionsStaticMesh.cpp:37
Scope (from outer to inner):
file
function void UFbxSceneImportOptionsStaticMesh::FillStaticMeshInmportData
Source code excerpt:
StaticMeshImportData->bRemoveDegenerates = bRemoveDegenerates;
StaticMeshImportData->StaticMeshLODGroup = StaticMeshLODGroup;
switch (VertexColorImportOption)
{
case EFbxSceneVertexColorImportOption::Ignore:
StaticMeshImportData->VertexColorImportOption = EVertexColorImportOption::Ignore;
break;
case EFbxSceneVertexColorImportOption::Override:
StaticMeshImportData->VertexColorImportOption = EVertexColorImportOption::Override;
break;
case EFbxSceneVertexColorImportOption::Replace:
StaticMeshImportData->VertexColorImportOption = EVertexColorImportOption::Replace;
break;
}
StaticMeshImportData->VertexOverrideColor = VertexOverrideColor;
//Scene general options
StaticMeshImportData->bImportMeshLODs = SceneImportOptions->bImportStaticMeshLODs;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImport.cpp:1796
Scope (from outer to inner):
file
function USkeletalMesh* UnFbx::FFbxImporter::ImportSkeletalMesh
Source code excerpt:
//Reuse the vertex color in case we are not re-importing weights only and there is some vertexcolor in the existing skeleMesh
if (ExistingSkelMesh->GetHasVertexColors() && ImportOptions->VertexColorImportOption == EVertexColorImportOption::Ignore)
{
RemapSkeletalMeshVertexColorToImportData(ExistingSkelMesh, SafeLODIndex, SkelMeshImportDataPtr);
}
}
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImport.cpp:3444
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::FillSkelMeshImporterFromFbx
Source code excerpt:
FbxLayerElement::EReferenceMode VertexColorReferenceMode(FbxLayerElement::eDirect);
FbxLayerElement::EMappingMode VertexColorMappingMode(FbxLayerElement::eByControlPoint);
if (LayerElementVertexColor && ImportOptions->VertexColorImportOption == EVertexColorImportOption::Replace)
{
VertexColorReferenceMode = LayerElementVertexColor->GetReferenceMode();
VertexColorMappingMode = LayerElementVertexColor->GetMappingMode();
ImportData.bHasVertexColors = true;
}
else if(ImportOptions->VertexColorImportOption == EVertexColorImportOption::Override)
{
ImportData.bHasVertexColors = true;
}
else if (ImportOptions->VertexColorImportOption == EVertexColorImportOption::Ignore && ExistingVertexColorData.Num() != 0)
{
ImportData.bHasVertexColors = true;
}
//
// get the first normal layer
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImport.cpp:3697
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::FillSkelMeshImporterFromFbx
Source code excerpt:
// Read vertex colors if they exist.
if( LayerElementVertexColor && ImportOptions->VertexColorImportOption == EVertexColorImportOption::Replace)
{
switch(VertexColorMappingMode)
{
case FbxLayerElement::eByControlPoint:
{
for (int32 VertexIndex=0;VertexIndex<3;VertexIndex++)
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImport.cpp:3737
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::FillSkelMeshImporterFromFbx
Source code excerpt:
}
}
else if (ImportOptions->VertexColorImportOption == EVertexColorImportOption::Override)
{
for (int32 VertexIndex = 0; VertexIndex < 3; VertexIndex++)
{
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++)
{
const FVector3f& VertexPosition = ImportData.Points[TmpWedges[VertexIndex].VertexIndex];
const FColor* PaintedColor = ExistingVertexColorData.Find(VertexPosition);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImportData.cpp:12
Scope (from outer to inner):
file
function UFbxSkeletalMeshImportData::UFbxSkeletalMeshImportData
Source code excerpt:
bTransformVertexToAbsolute = true;
bBakePivotInVertex = false;
VertexColorImportOption = EVertexColorImportOption::Replace;
LastImportContentType = EFBXImportContentType::FBXICT_All;
bKeepSectionsSeparate = false;
}
void UFbxSkeletalMeshImportData::Serialize(FArchive& Ar)
{
#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:931
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::BuildStaticMeshFromGeometry
Source code excerpt:
//Color attribute
if (VertexColorImportOption == EVertexColorImportOption::Replace)
{
if (LayerElementVertexColor)
{
int32 VertexColorMappingIndex = (VertexColorMappingMode == FbxLayerElement::eByControlPoint) ?
Mesh->GetPolygonVertex(PolygonIndex, CornerIndex) : (RealFbxVertexIndex);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp:952
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::BuildStaticMeshFromGeometry
Source code excerpt:
}
}
else if (VertexColorImportOption == EVertexColorImportOption::Ignore)
{
// try to match this triangles current vertex with one that existed in the previous mesh.
// This is a find in a tmap which uses a fast hash table lookup.
const FColor* PaintedColor = ExistingVertexColorData.Find(VertexPosition);
if (PaintedColor)
{
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp:966
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
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp:1743
Scope (from outer to inner):
file
function UStaticMesh* UnFbx::FFbxImporter::ImportStaticMeshAsSingle
Source code excerpt:
TMap<FVector3f, FColor> ExistingVertexColorData;
EVertexColorImportOption::Type VertexColorImportOption = ImportOptions->VertexColorImportOption;
FString NewPackageName;
if( InStaticMesh == NULL || LODIndex == 0 )
{
// Create a package for each mesh
if (Package == nullptr)
#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/SFbxSceneOptionWindow.cpp:1407
Scope (from outer to inner):
file
function void SFbxSceneOptionWindow::CopyStaticMeshOptionsToFbxOptions
Source code excerpt:
ImportSettings->bRemoveDegenerates = StaticMeshOptions->bRemoveDegenerates;
ImportSettings->StaticMeshLODGroup = StaticMeshOptions->StaticMeshLODGroup;
switch (StaticMeshOptions->VertexColorImportOption)
{
case EFbxSceneVertexColorImportOption::Replace:
ImportSettings->VertexColorImportOption = EVertexColorImportOption::Type::Replace;
break;
case EFbxSceneVertexColorImportOption::Override:
ImportSettings->VertexColorImportOption = EVertexColorImportOption::Type::Override;
break;
case EFbxSceneVertexColorImportOption::Ignore:
ImportSettings->VertexColorImportOption = EVertexColorImportOption::Type::Ignore;
break;
default:
ImportSettings->VertexColorImportOption = EVertexColorImportOption::Type::Replace;
}
ImportSettings->VertexOverrideColor = StaticMeshOptions->VertexOverrideColor;
switch (StaticMeshOptions->NormalImportMethod)
{
case EFBXSceneNormalImportMethod::FBXSceneNIM_ComputeNormals:
ImportSettings->NormalImportMethod = FBXNIM_ComputeNormals;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/SFbxSceneOptionWindow.cpp:1453
Scope (from outer to inner):
file
function void SFbxSceneOptionWindow::CopyFbxOptionsToStaticMeshOptions
Source code excerpt:
StaticMeshOptions->bRemoveDegenerates = ImportSettings->bRemoveDegenerates;
StaticMeshOptions->StaticMeshLODGroup = ImportSettings->StaticMeshLODGroup;
switch (ImportSettings->VertexColorImportOption)
{
case EVertexColorImportOption::Type::Replace:
StaticMeshOptions->VertexColorImportOption = EFbxSceneVertexColorImportOption::Replace;
break;
case EVertexColorImportOption::Type::Override:
StaticMeshOptions->VertexColorImportOption = EFbxSceneVertexColorImportOption::Override;
break;
case EVertexColorImportOption::Type::Ignore:
StaticMeshOptions->VertexColorImportOption = EFbxSceneVertexColorImportOption::Ignore;
break;
default:
StaticMeshOptions->VertexColorImportOption = EFbxSceneVertexColorImportOption::Replace;
}
StaticMeshOptions->VertexOverrideColor = ImportSettings->VertexOverrideColor;
switch (ImportSettings->NormalImportMethod)
{
case FBXNIM_ComputeNormals:
StaticMeshOptions->NormalImportMethod = EFBXSceneNormalImportMethod::FBXSceneNIM_ComputeNormals;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/FbxImporter.h:146
Scope (from outer to inner):
file
namespace UnFbx
Source code excerpt:
// Static Mesh options
bool bCombineToSingle;
EVertexColorImportOption::Type VertexColorImportOption;
FColor VertexOverrideColor;
float DistanceFieldResolutionScale;
bool bRemoveDegenerates;
bool bBuildReversedIndexBuffer;
bool bBuildNanite;
bool bGenerateLightmapUVs;
#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();