bKeepSectionsSeparate
bKeepSectionsSeparate
#Overview
name: bKeepSectionsSeparate
The value of this variable can be defined or overridden in .ini config files. 1
.ini config file referencing this setting variable.
It is referenced in 31
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of bKeepSectionsSeparate is to control how mesh sections are handled during the import process of skeletal and static meshes in Unreal Engine 5. Specifically:
-
The variable is used in the mesh import and processing system, primarily affecting skeletal meshes and static meshes.
-
It is utilized by the Unreal Engine’s Interchange system, which handles asset import and conversion.
-
The value is typically set during the import process, either through user interface options or programmatically.
-
When bKeepSectionsSeparate is true, mesh sections with matching materials are kept separate and will not be combined during import.
-
When false, sections with the same materials may be merged, potentially optimizing the mesh structure.
-
This variable interacts with material assignment and mesh optimization processes during import.
-
Developers should be aware that keeping sections separate can impact performance and memory usage, as it may result in more draw calls.
-
Best practices include:
- Use true when precise control over mesh sections is required, such as for complex character meshes.
- Use false for simpler meshes or when optimizing for performance is a priority.
- Consider the trade-off between mesh flexibility and rendering efficiency when setting this option.
-
The variable is part of various import data structures and is considered during both initial import and reimport processes.
-
It’s important to note that this setting can affect how materials are applied and how the mesh can be edited post-import.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:673, section: [/Script/UnrealEd.FbxSkeletalMeshImportData]
- INI Section:
/Script/UnrealEd.FbxSkeletalMeshImportData
- Raw value:
False
- 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:188
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void FillInterchangeGenericAssetsPipelineFromFbxSkeletalMeshImportData
Source code excerpt:
GenericAssetPipeline->CommonSkeletalMeshesAndAnimationsProperties->bImportMeshesInBoneHierarchy = SkeletalMeshImportData->bImportMeshesInBoneHierarchy;
GenericAssetPipeline->CommonMeshesProperties->bKeepSectionsSeparate = SkeletalMeshImportData->bKeepSectionsSeparate;
GenericAssetPipeline->MeshPipeline->bCreatePhysicsAsset = false;
GenericAssetPipeline->MeshPipeline->bImportMorphTargets = SkeletalMeshImportData->bImportMorphTargets;
GenericAssetPipeline->MeshPipeline->bImportVertexAttributes = SkeletalMeshImportData->bImportVertexAttributes;
GenericAssetPipeline->MeshPipeline->bUpdateSkeletonReferencePose = SkeletalMeshImportData->bUpdateSkeletonReferencePose;
GenericAssetPipeline->CommonSkeletalMeshesAndAnimationsProperties->bUseT0AsRefPose = SkeletalMeshImportData->bUseT0AsRefPose;
if (SkeletalMeshImportData->ImportContentType == EFBXImportContentType::FBXICT_All)
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:379
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function UAssetImportData* ConvertToLegacyFbx
Source code excerpt:
DestinationSkeletalMeshImportData->bImportMorphTargets = GenericAssetPipeline->MeshPipeline->bImportMorphTargets;
DestinationSkeletalMeshImportData->bImportVertexAttributes = GenericAssetPipeline->MeshPipeline->bImportVertexAttributes;
DestinationSkeletalMeshImportData->bKeepSectionsSeparate = GenericAssetPipeline->CommonMeshesProperties->bKeepSectionsSeparate;
DestinationSkeletalMeshImportData->bPreserveSmoothingGroups = true;
DestinationSkeletalMeshImportData->bUpdateSkeletonReferencePose = GenericAssetPipeline->MeshPipeline->bUpdateSkeletonReferencePose;
DestinationSkeletalMeshImportData->bUseT0AsRefPose = GenericAssetPipeline->CommonSkeletalMeshesAndAnimationsProperties->bUseT0AsRefPose;
if (GenericAssetPipeline->MeshPipeline->SkeletalMeshImportContentType == EInterchangeSkeletalMeshContentType::All)
{
DestinationSkeletalMeshImportData->ImportContentType = EFBXImportContentType::FBXICT_All;
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/FactoryNodes/Private/InterchangeMeshFactoryNode.cpp:227
Scope (from outer to inner):
file
function void UInterchangeMeshFactoryNode::GetSlotMaterialDependencies
Source code excerpt:
void UInterchangeMeshFactoryNode::GetSlotMaterialDependencies(TMap<FString, FString>& OutMaterialDependencies) const
{
bool bKeepSectionsSeparate = false;
GetCustomKeepSectionsSeparate(bKeepSectionsSeparate);
if (bKeepSectionsSeparate)
{
OutMaterialDependencies = SlotMaterialDependencies.ToMap();
}
else
{
TMap<FString, FString> MaterialDependencies = SlotMaterialDependencies.ToMap();
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Mesh/InterchangeSkeletalMeshFactory.cpp:439
Scope (from outer to inner):
file
namespace UE
namespace Interchange
namespace Private
function void RetrieveAllSkeletalMeshPayloadsAndFillImportData
Source code excerpt:
}
bool bKeepSectionsSeparate = false;
SkeletalMeshFactoryNode->GetCustomKeepSectionsSeparate(bKeepSectionsSeparate);
bool bImportMorphTarget = true;
SkeletalMeshFactoryNode->GetCustomImportMorphTarget(bImportMorphTarget);
TMap<const FMeshNodeContext*, TFuture<TOptional<UE::Interchange::FMeshPayloadData>>> LodMeshPayloadPerTranslatorPayloadKey;
LodMeshPayloadPerTranslatorPayloadKey.Reserve(MeshReferences.Num());
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Mesh/InterchangeSkeletalMeshFactory.cpp:579
Scope (from outer to inner):
file
namespace UE
namespace Interchange
namespace Private
function void RetrieveAllSkeletalMeshPayloadsAndFillImportData
Source code excerpt:
const FInternalInstanceData & InstanceData = MeshInstancesDatas.FindChecked(MeshNodeContext.TranslatorPayloadKey.UniqueId);
AppendSettings.MeshTransform = InstanceData.ShouldFetchWithTransform() ? FTransform::Identity : MeshNodeContext.SceneGlobalTransform.Get(FTransform::Identity);
if (bKeepSectionsSeparate)
{
AppendSettings.PolygonGroupsDelegate = FAppendPolygonGroupsDelegate::CreateLambda([](const FMeshDescription& SourceMesh, FMeshDescription& TargetMesh, PolygonGroupMap& RemapPolygonGroup)
{
UE::Interchange::Private::MeshHelper::RemapPolygonGroups(SourceMesh, TargetMesh, RemapPolygonGroup);
});
}
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Mesh/InterchangeStaticMeshFactory.cpp:272
Scope (from outer to inner):
file
function UInterchangeFactoryBase::FImportAssetResult UInterchangeStaticMeshFactory::ImportAsset_Async
Source code excerpt:
}
bool bKeepSectionsSeparate = false;
StaticMeshFactoryNode->GetCustomKeepSectionsSeparate(bKeepSectionsSeparate);
// Set material slots from imported materials
auto UpdateOrAddStaticMaterial = [&StaticMesh, bReimport](const FName& MaterialSlotName, UMaterialInterface* MaterialInterface)
{
UMaterialInterface* NewMaterial = MaterialInterface ? MaterialInterface : UMaterial::GetDefaultMaterial(MD_Surface);
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Mesh/InterchangeStaticMeshFactory.cpp:388
Scope (from outer to inner):
file
function UInterchangeFactoryBase::FImportAssetResult UInterchangeStaticMeshFactory::ImportAsset_Async
Source code excerpt:
continue;
}
if (bKeepSectionsSeparate)
{
AppendSettings.PolygonGroupsDelegate = FAppendPolygonGroupsDelegate::CreateLambda([](const FMeshDescription& SourceMesh, FMeshDescription& TargetMesh, PolygonGroupMap& RemapPolygonGroup)
{
UE::Interchange::Private::MeshHelper::RemapPolygonGroups(SourceMesh, TargetMesh, RemapPolygonGroup);
});
}
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericMeshPipeline.cpp:52
Scope (from outer to inner):
file
function void UInterchangeGenericMeshPipeline::AdjustSettingsForContext
Source code excerpt:
CommonMeshesProperties->bBakeMeshes = true;
CommonMeshesProperties->bImportLods = false;
CommonMeshesProperties->bKeepSectionsSeparate = false;
CommonMeshesProperties->VertexColorImportOption = EInterchangeVertexColorImportOption::IVCIO_Ignore;
bImportSkeletalMeshes = true;
bImportStaticMeshes = false;
bBuildNanite = false;
bImportMorphTargets = false;
bImportVertexAttributes = false;
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericSkeletalMeshPipeline.cpp:398
Scope (from outer to inner):
file
function UInterchangeSkeletalMeshFactoryNode* UInterchangeGenericMeshPipeline::CreateSkeletalMeshFactoryNode
Source code excerpt:
BaseNodeContainer->AddNode(SkeletalMeshFactoryNode);
if (CommonMeshesProperties->bKeepSectionsSeparate)
{
SkeletalMeshFactoryNode->SetCustomKeepSectionsSeparate(CommonMeshesProperties->bKeepSectionsSeparate);
}
SkeletonFactoryNode->SetCustomSkeletalMeshFactoryNodeUid(SkeletalMeshFactoryNode->GetUniqueID());
AddLodDataToSkeletalMesh(SkeletonFactoryNode, SkeletalMeshFactoryNode, MeshUidsPerLodIndex);
SkeletalMeshFactoryNode->SetCustomImportMorphTarget(bImportMorphTargets);
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericStaticMeshPipeline.cpp:424
Scope (from outer to inner):
file
function UInterchangeStaticMeshFactoryNode* UInterchangeGenericMeshPipeline::CreateStaticMeshFactoryNode
Source code excerpt:
BaseNodeContainer->AddNode(StaticMeshFactoryNode);
if (CommonMeshesProperties->bKeepSectionsSeparate)
{
StaticMeshFactoryNode->SetCustomKeepSectionsSeparate(CommonMeshesProperties->bKeepSectionsSeparate);
}
AddLodDataToStaticMesh(StaticMeshFactoryNode, MeshUidsPerLodIndex);
switch (CommonMeshesProperties->VertexColorImportOption)
{
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Public/InterchangeGenericAssetsPipelineSharedSettings.h:74
Scope (from outer to inner):
file
class class UInterchangeGenericCommonMeshesProperties : public UInterchangePipelineBase
Source code excerpt:
/** If checked, sections with matching materials are kept separate and will not get combined. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Common Meshes")
bool bKeepSectionsSeparate = false;
/** 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. */
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Public/InterchangePipelineMeshesUtilities.h:343
Scope (from outer to inner):
file
namespace UE::Interchange::MeshesUtilities
function void ApplySlotMaterialDependencies
Source code excerpt:
, TMap<FString, FString> *ExistingSlotMaterialDependenciesPtr)
{
bool bKeepSectionsSeparate = false;
int32 IndexCounter = 0; //Only use when bKeepSectionsSeparate is true
if (ExistingSlotMaterialDependenciesPtr)
{
FactoryNode.GetCustomKeepSectionsSeparate(bKeepSectionsSeparate);
IndexCounter = ExistingSlotMaterialDependenciesPtr->Num();
}
for (const TPair<FString, FString>& SlotMaterialDependency : SlotMaterialDependencies)
{
FString NewSlotName = SlotMaterialDependency.Key;
if (bKeepSectionsSeparate && ExistingSlotMaterialDependenciesPtr)
{
if (ExistingSlotMaterialDependenciesPtr->Contains(NewSlotName))
{
NewSlotName += TEXT("_Section") + FString::FromInt(IndexCounter);
}
ExistingSlotMaterialDependenciesPtr->Add(NewSlotName, SlotMaterialDependency.Value);
#Loc: <Workspace>/Engine/Plugins/Tests/EditorTests/Source/EditorTests/Private/UnrealEd/FbxAutomationTests.cpp:427
Scope (from outer to inner):
file
function BEGIN_FUNCTION_BUILD_OPTIMIZATION bool F
Source code excerpt:
ImportData->ThresholdUV = TestPlan->ImportUI->SkeletalMeshImportData->ThresholdUV;
ImportData->bPreserveSmoothingGroups = TestPlan->ImportUI->SkeletalMeshImportData->bPreserveSmoothingGroups;
ImportData->bKeepSectionsSeparate = TestPlan->ImportUI->SkeletalMeshImportData->bKeepSectionsSeparate;
ImportData->bUpdateSkeletonReferencePose = TestPlan->ImportUI->SkeletalMeshImportData->bUpdateSkeletonReferencePose;
ImportData->bUseT0AsRefPose = TestPlan->ImportUI->SkeletalMeshImportData->bUseT0AsRefPose;
//Copy UFbxMeshImportData
ImportData->bTransformVertexToAbsolute = TestPlan->ImportUI->SkeletalMeshImportData->bTransformVertexToAbsolute;
ImportData->bBakePivotInVertex = TestPlan->ImportUI->SkeletalMeshImportData->bBakePivotInVertex;
ImportData->bImportMeshLODs = TestPlan->ImportUI->SkeletalMeshImportData->bImportMeshLODs;
#Loc: <Workspace>/Engine/Plugins/Tests/EditorTests/Source/EditorTests/Private/UnrealEd/FbxAutomationTests.cpp:525
Scope (from outer to inner):
file
function BEGIN_FUNCTION_BUILD_OPTIMIZATION bool F
Source code excerpt:
ImportData->MorphThresholdPosition = TestPlan->ImportUI->SkeletalMeshImportData->MorphThresholdPosition;
ImportData->bPreserveSmoothingGroups = TestPlan->ImportUI->SkeletalMeshImportData->bPreserveSmoothingGroups;
ImportData->bKeepSectionsSeparate = TestPlan->ImportUI->SkeletalMeshImportData->bKeepSectionsSeparate;
ImportData->bUpdateSkeletonReferencePose = TestPlan->ImportUI->SkeletalMeshImportData->bUpdateSkeletonReferencePose;
ImportData->bUseT0AsRefPose = TestPlan->ImportUI->SkeletalMeshImportData->bUseT0AsRefPose;
//Copy UFbxMeshImportData
ImportData->bTransformVertexToAbsolute = TestPlan->ImportUI->SkeletalMeshImportData->bTransformVertexToAbsolute;
ImportData->bBakePivotInVertex = TestPlan->ImportUI->SkeletalMeshImportData->bBakePivotInVertex;
ImportData->bImportMeshLODs = TestPlan->ImportUI->SkeletalMeshImportData->bImportMeshLODs;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Factories/FbxSceneImportOptionsSkeletalMesh.h:36
Scope (from outer to inner):
file
class class UFbxSceneImportOptionsSkeletalMesh : public UObject
Source code excerpt:
/** If checked, sections with matching materials are kept separate and will not get combined. */
UPROPERTY(EditAnywhere, config, Category = SkeletalMesh)
uint32 bKeepSectionsSeparate : 1;
/** If checked, meshes nested in bone hierarchies will be imported instead of being converted to bones. */
UPROPERTY(EditAnywhere, config, Category = SkeletalMesh)
uint32 bImportMeshesInBoneHierarchy : 1;
/** True to import morph target meshes from the FBX file */
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Factories/FbxSkeletalMeshImportData.h:78
Scope (from outer to inner):
file
class class UFbxSkeletalMeshImportData : public UFbxMeshImportData
Source code excerpt:
/** If checked, sections with matching materials are kept separate and will not get combined. */
UPROPERTY(EditAnywhere, AdvancedDisplay, config, Category=Mesh, meta=(ImportType="SkeletalMesh|GeoOnly"))
uint32 bKeepSectionsSeparate:1;
/** If checked, meshes nested in bone hierarchies will be imported instead of being converted to bones. */
UPROPERTY(EditAnywhere, AdvancedDisplay, config, Category=Mesh, meta=(ImportType="SkeletalMesh"))
uint32 bImportMeshesInBoneHierarchy:1;
/** True to import morph target meshes from the FBX file */
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:477
Scope (from outer to inner):
file
namespace UnFbx
function void ApplyImportUIToImportOptions
Source code excerpt:
InOutImportOptions.bUseT0AsRefPose = ImportUI->SkeletalMeshImportData->bUseT0AsRefPose;
InOutImportOptions.bPreserveSmoothingGroups = ImportUI->SkeletalMeshImportData->bPreserveSmoothingGroups;
InOutImportOptions.bKeepSectionsSeparate = ImportUI->SkeletalMeshImportData->bKeepSectionsSeparate;
InOutImportOptions.OverlappingThresholds.ThresholdPosition = ImportUI->SkeletalMeshImportData->ThresholdPosition;
InOutImportOptions.OverlappingThresholds.ThresholdTangentNormal = ImportUI->SkeletalMeshImportData->ThresholdTangentNormal;
InOutImportOptions.OverlappingThresholds.ThresholdUV = ImportUI->SkeletalMeshImportData->ThresholdUV;
InOutImportOptions.OverlappingThresholds.MorphThresholdPosition = ImportUI->SkeletalMeshImportData->MorphThresholdPosition;
InOutImportOptions.bImportMeshesInBoneHierarchy = ImportUI->SkeletalMeshImportData->bImportMeshesInBoneHierarchy;
}
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:1761
Scope (from outer to inner):
file
lambda-function
Source code excerpt:
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt ImportSkeletalMeshLODs"), CaptureImportOptions->bImportSkeletalMeshLODs));
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt PreserveSmoothingGroups"), CaptureImportOptions->bPreserveSmoothingGroups));
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt KeepSectionsSeparate"), CaptureImportOptions->bKeepSectionsSeparate));
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt UpdateSkeletonReferencePose"), CaptureImportOptions->bUpdateSkeletonReferencePose));
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt UseT0AsRefPose"), CaptureImportOptions->bUseT0AsRefPose));
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt OverlappingThresholds.ThresholdPosition"), CaptureImportOptions->OverlappingThresholds.ThresholdPosition));
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt OverlappingThresholds.ThresholdTangentNormal"), CaptureImportOptions->OverlappingThresholds.ThresholdTangentNormal));
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt OverlappingThresholds.ThresholdUV"), CaptureImportOptions->OverlappingThresholds.ThresholdUV));
Attribs.Add(FAnalyticsEventAttribute(TEXT("SkeletalMeshOpt OverlappingThresholds.MorphThresholdPosition"), CaptureImportOptions->OverlappingThresholds.MorphThresholdPosition));
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportData.cpp:119
Scope (from outer to inner):
file
function UnFbx::FBXImportOptions *JSONToFbxOption
Source code excerpt:
Option->bUseT0AsRefPose = false;
OptionObj->TryGetBoolField(TEXT("bPreserveSmoothingGroups"), Option->bPreserveSmoothingGroups);
OptionObj->TryGetBoolField(TEXT("bKeepSectionsSeparate"), Option->bKeepSectionsSeparate);
OptionObj->TryGetBoolField(TEXT("bImportMeshesInBoneHierarchy"), Option->bImportMeshesInBoneHierarchy);
OptionObj->TryGetBoolField(TEXT("bImportMorphTargets"), Option->bImportMorph);
OptionObj->TryGetBoolField(TEXT("bImportVertexAttributes"), Option->bImportVertexAttributes);
if (OptionObj->TryGetObjectField(TEXT("OverlappingThresholds"), DataObj))
{
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportData.cpp:209
Scope (from outer to inner):
file
function FString FbxOptionToJSON
Source code excerpt:
Option->bUseT0AsRefPose ? 1 : 0,
Option->bPreserveSmoothingGroups ? 1 : 0,
Option->bKeepSectionsSeparate ? 1 : 0,
Option->bImportMeshesInBoneHierarchy ? 1 : 0,
Option->bImportMorph ? 1 : 0,
Option->bImportVertexAttributes ? 1 : 0,
Option->OverlappingThresholds.ThresholdPosition,
Option->OverlappingThresholds.ThresholdTangentNormal,
Option->OverlappingThresholds.ThresholdUV,
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportFactory.cpp:124
Scope (from outer to inner):
file
function bool GetFbxSceneImportOptions
Source code excerpt:
GlobalImportSettings->bImportMaterials = true;
//Make sure skeletal mesh sections with the same material are combined (and not kept separate)
GlobalImportSettings->bKeepSectionsSeparate = false;
//TODO support T0AsRefPose
GlobalImportSettings->bUseT0AsRefPose = false;
GlobalImportSettings->ImportTranslation = FVector(0);
GlobalImportSettings->ImportRotation = FRotator(0);
GlobalImportSettings->ImportUniformScale = 1.0f;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportOptionsSkeletalMesh.cpp:16
Scope (from outer to inner):
file
function UFbxSceneImportOptionsSkeletalMesh::UFbxSceneImportOptionsSkeletalMesh
Source code excerpt:
, bUseT0AsRefPose(false)
, bPreserveSmoothingGroups(false)
, bKeepSectionsSeparate(false)
, bImportMeshesInBoneHierarchy(true)
, bImportMorphTargets(false)
, bImportVertexAttributes(false)
, ThresholdPosition(THRESH_POINTS_ARE_SAME)
, ThresholdTangentNormal(THRESH_NORMALS_ARE_SAME)
, ThresholdUV(THRESH_UVS_ARE_SAME)
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSceneImportOptionsSkeletalMesh.cpp:49
Scope (from outer to inner):
file
function void UFbxSceneImportOptionsSkeletalMesh::FillSkeletalMeshInmportData
Source code excerpt:
SkeletalMeshImportData->MorphThresholdPosition = MorphThresholdPosition;
SkeletalMeshImportData->bPreserveSmoothingGroups = bPreserveSmoothingGroups;
SkeletalMeshImportData->bKeepSectionsSeparate = bKeepSectionsSeparate;
SkeletalMeshImportData->bUpdateSkeletonReferencePose = bUpdateSkeletonReferencePose;
SkeletalMeshImportData->bUseT0AsRefPose = bUseT0AsRefPose;
SkeletalMeshImportData->bImportMeshLODs = SceneImportOptions->bImportSkeletalMeshLODs;
SkeletalMeshImportData->ImportTranslation = SceneImportOptions->ImportTranslation;
SkeletalMeshImportData->ImportRotation = SceneImportOptions->ImportRotation;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImport.cpp:1387
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::FillSkeletalMeshImportData
Source code excerpt:
// Store unique FbxNode materials resulting in sections being combined.
if (!ImportOptions->bKeepSectionsSeparate)
{
if (!FbxMaterials.Contains(FbxMaterial))
{
FbxMaterials.Add(FbxMaterial);
SkeletalMeshImportData::FMaterial NewMaterial;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImport.cpp:3223
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::FillSkelMeshImporterFromFbx
Source code excerpt:
// Default behavior finds the first material in FbxMaterials that matches the node's materials.
// This results in combining nodes/sections that use the same material.
if (!ImportOptions->bKeepSectionsSeparate)
{
FbxMaterials.Find(FbxMaterial, ExistingMatIndex);
}
else
{
// Otherwise find the material in FbxMaterials specific to that node's section/surface
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImport.cpp:3249
Scope (from outer to inner):
file
function bool UnFbx::FFbxImporter::FillSkelMeshImporterFromFbx
Source code excerpt:
MaterialMapping[MaterialIndex] = ExistingMatIndex;
if (!ImportOptions->bKeepSectionsSeparate)
{
if (Materials.IsValidIndex(MaterialIndex))
{
ImportData.Materials[ExistingMatIndex].Material = Materials[MaterialIndex];
}
}
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxSkeletalMeshImportData.cpp:14
Scope (from outer to inner):
file
function UFbxSkeletalMeshImportData::UFbxSkeletalMeshImportData
Source code excerpt:
VertexColorImportOption = EVertexColorImportOption::Replace;
LastImportContentType = EFBXImportContentType::FBXICT_All;
bKeepSectionsSeparate = false;
}
void UFbxSkeletalMeshImportData::Serialize(FArchive& Ar)
{
Super::Serialize(Ar);
Ar.UsingCustomVersion(FEditorObjectVersion::GUID);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/ReimportFbxSceneFactory.cpp:240
Scope (from outer to inner):
file
function bool GetFbxSceneReImportOptions
Source code excerpt:
GlobalImportSettings->bUseT0AsRefPose = false;
//Make sure skeletal mesh sections with the same material are combined (and not kept separate)
GlobalImportSettings->bKeepSectionsSeparate = false;
//Make sure we do not mess with AutoComputeLodDistances when re-importing
GlobalImportSettings->bAutoComputeLodDistances = true;
GlobalImportSettings->LodNumber = 0;
GlobalImportSettings->MinimumLodNumber = 0;
GlobalImportSettings->ImportTranslation = FVector(0);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/SFbxSceneOptionWindow.cpp:1502
Scope (from outer to inner):
file
function void SFbxSceneOptionWindow::CopySkeletalMeshOptionsToFbxOptions
Source code excerpt:
ImportSettings->OverlappingThresholds.MorphThresholdPosition = SkeletalMeshOptions->MorphThresholdPosition;
ImportSettings->bPreserveSmoothingGroups = SkeletalMeshOptions->bPreserveSmoothingGroups;
ImportSettings->bKeepSectionsSeparate = SkeletalMeshOptions->bKeepSectionsSeparate;
ImportSettings->bUpdateSkeletonReferencePose = SkeletalMeshOptions->bUpdateSkeletonReferencePose;
ImportSettings->bUseT0AsRefPose = SkeletalMeshOptions->bUseT0AsRefPose;
ImportSettings->bImportAnimations = SkeletalMeshOptions->bImportAnimations;
ImportSettings->AnimationLengthImportType = SkeletalMeshOptions->AnimationLength;
ImportSettings->bDeleteExistingMorphTargetCurves = SkeletalMeshOptions->bDeleteExistingMorphTargetCurves;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/SFbxSceneOptionWindow.cpp:1531
Scope (from outer to inner):
file
function void SFbxSceneOptionWindow::CopyFbxOptionsToSkeletalMeshOptions
Source code excerpt:
SkeletalMeshOptions->MorphThresholdPosition = ImportSettings->OverlappingThresholds.MorphThresholdPosition;
SkeletalMeshOptions->bPreserveSmoothingGroups = ImportSettings->bPreserveSmoothingGroups;
SkeletalMeshOptions->bKeepSectionsSeparate = ImportSettings->bKeepSectionsSeparate;
SkeletalMeshOptions->bUpdateSkeletonReferencePose = ImportSettings->bUpdateSkeletonReferencePose;
SkeletalMeshOptions->bUseT0AsRefPose = ImportSettings->bUseT0AsRefPose;
SkeletalMeshOptions->bImportAnimations = ImportSettings->bImportAnimations;
SkeletalMeshOptions->AnimationLength = ImportSettings->AnimationLengthImportType;
SkeletalMeshOptions->bDeleteExistingMorphTargetCurves = ImportSettings->bDeleteExistingMorphTargetCurves;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/FbxImporter.h:184
Scope (from outer to inner):
file
namespace UnFbx
Source code excerpt:
bool bUseT0AsRefPose;
bool bPreserveSmoothingGroups;
bool bKeepSectionsSeparate;
FOverlappingThresholds OverlappingThresholds;
bool bImportMeshesInBoneHierarchy;
bool bCreatePhysicsAsset;
UPhysicsAsset *PhysicsAsset;
bool bImportSkeletalMeshLODs;
// Animation option