bDoNotImportCurveWithZero
bDoNotImportCurveWithZero
#Overview
name: bDoNotImportCurveWithZero
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 23
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of bDoNotImportCurveWithZero is to control whether animation curves with only zero values should be imported or not during the animation import process in Unreal Engine.
This setting variable is primarily used in the animation system, specifically for importing animations from external formats like FBX into Unreal Engine’s animation sequences.
The value of this variable is typically set through the import options UI or programmatically when setting up animation import parameters. It’s often exposed as a checkbox in the import settings dialog.
This variable interacts with other animation import settings, such as bImportCustomAttribute and bImportBoneTracks, which control what types of animation data are imported.
Developers should be aware that:
- Setting this to true can help reduce the number of unnecessary curves in the imported animation, potentially improving performance.
- However, it may also result in the loss of intentional zero-value animations if they exist in the source data.
Best practices when using this variable include:
- Use it when you’re confident that zero-value curves in your source animations are not intentional and can be safely ignored.
- Be cautious when reimporting animations, as changing this setting could alter the behavior of existing animations in your project.
- Consider the nature of your animations - for some types of subtle animations or preparations for other animations, zero-value curves might be important to preserve.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:693, section: [/Script/UnrealEd.FbxAnimSequenceImportData]
- INI Section:
/Script/UnrealEd.FbxAnimSequenceImportData
- Raw value:
True
- 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:270
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void FillInterchangeGenericAssetsPipelineFromFbxAnimSequenceImportData
Source code excerpt:
GenericAssetPipeline->AnimationPipeline->bDeleteExistingMorphTargetCurves = AnimSequenceImportData->bDeleteExistingMorphTargetCurves;
GenericAssetPipeline->AnimationPipeline->bDeleteExistingNonCurveCustomAttributes = AnimSequenceImportData->bDeleteExistingNonCurveCustomAttributes;
GenericAssetPipeline->AnimationPipeline->bDoNotImportCurveWithZero = AnimSequenceImportData->bDoNotImportCurveWithZero;
GenericAssetPipeline->AnimationPipeline->bImportBoneTracks = AnimSequenceImportData->bImportBoneTracks;
GenericAssetPipeline->AnimationPipeline->bImportCustomAttribute = AnimSequenceImportData->bImportCustomAttribute;
GenericAssetPipeline->CommonSkeletalMeshesAndAnimationsProperties->bImportMeshesInBoneHierarchy = AnimSequenceImportData->bImportMeshesInBoneHierarchy;
GenericAssetPipeline->AnimationPipeline->bRemoveCurveRedundantKeys = AnimSequenceImportData->bRemoveRedundantKeys;
GenericAssetPipeline->AnimationPipeline->bSetMaterialDriveParameterOnCustomAttribute = AnimSequenceImportData->bSetMaterialDriveParameterOnCustomAttribute;
GenericAssetPipeline->AnimationPipeline->bSnapToClosestFrameBoundary = AnimSequenceImportData->bSnapToClosestFrameBoundary;
#Loc: <Workspace>/Engine/Plugins/Interchange/Editor/Source/InterchangeEditor/Private/InterchangeFbxAssetImportDataConverter.cpp:490
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function UAssetImportData* ConvertToLegacyFbx
Source code excerpt:
DestinationAnimSequenceImportData->bDeleteExistingMorphTargetCurves = GenericAssetPipeline->AnimationPipeline->bDeleteExistingMorphTargetCurves;
DestinationAnimSequenceImportData->bDeleteExistingNonCurveCustomAttributes = GenericAssetPipeline->AnimationPipeline->bDeleteExistingNonCurveCustomAttributes;
DestinationAnimSequenceImportData->bDoNotImportCurveWithZero = GenericAssetPipeline->AnimationPipeline->bDoNotImportCurveWithZero;
DestinationAnimSequenceImportData->bImportBoneTracks = GenericAssetPipeline->AnimationPipeline->bImportBoneTracks;
DestinationAnimSequenceImportData->bImportCustomAttribute = GenericAssetPipeline->AnimationPipeline->bImportCustomAttribute;
DestinationAnimSequenceImportData->bImportMeshesInBoneHierarchy = GenericAssetPipeline->CommonSkeletalMeshesAndAnimationsProperties->bImportMeshesInBoneHierarchy;
DestinationAnimSequenceImportData->bPreserveLocalTransform = false;
DestinationAnimSequenceImportData->bRemoveRedundantKeys = GenericAssetPipeline->AnimationPipeline->bRemoveCurveRedundantKeys;
DestinationAnimSequenceImportData->bSetMaterialDriveParameterOnCustomAttribute = GenericAssetPipeline->AnimationPipeline->bSetMaterialDriveParameterOnCustomAttribute;
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:64
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function bool CreateAttributeStepCurve
Source code excerpt:
, const FString& BoneName
, const int32 CurveFlags
, const bool bDoNotImportCurveWithZero)
{
//For bone attribute we support only single curve type (structured type like vector are not allowed)
if (!TargetSequence || StepCurves.Num() != 1 || CurveName.IsEmpty())
{
return false;
}
if (bDoNotImportCurveWithZero)
{
bool bAllCurveValuesZero = true;
for (const FInterchangeStepCurve& StepCurve : StepCurves)
{
if (StepCurve.FloatKeyValues.IsSet())
{
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:152
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function bool InternalCreateCurve
Source code excerpt:
, const TArray<FString>& CurveNames
, const int32 CurveFlags
, const bool bDoNotImportCurveWithZero
, const bool bAddCurveMetadataToSkeleton
, const bool bMorphTargetCurve
, const bool bMaterialCurve
, const bool bShouldTransact)
{
bool bResult = false;
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:170
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function bool InternalCreateCurve
Source code excerpt:
FName Name = *CurveNames[CurveIndex];
if (bDoNotImportCurveWithZero)
{
bool bAllCurveValueAreZero = true;
FKeyHandle KeyHandle = Curve.GetFirstKeyHandle();
while (KeyHandle != FKeyHandle::Invalid())
{
if (!FMath::IsNearlyZero(Curve.GetKeyValue(KeyHandle)))
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:346
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function bool CreateMorphTargetCurve
Source code excerpt:
, bool bRemoveCurveRedundantKeys
, int32 CurveFlags
, bool bDoNotImportCurveWithZero
, bool bAddCurveMetadataToSkeleton
, bool bShouldTransact)
{
constexpr bool bIsMorphTargetCurve = true;
constexpr bool bIsMaterialCurve = false;
if (Curves.Num() == 1 && InbetweenCurveNames.Num() == InbetweenFullWeights.Num()+1)
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:371
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function bool CreateMorphTargetCurve
Source code excerpt:
}
}
return InternalCreateCurve(TargetSequence, Results, InbetweenCurveNames, CurveFlags, bDoNotImportCurveWithZero, bAddCurveMetadataToSkeleton, bIsMorphTargetCurve, bIsMaterialCurve, bShouldTransact);
}
return InternalCreateCurve(TargetSequence, Curves, { CurveName }, CurveFlags, bDoNotImportCurveWithZero, bAddCurveMetadataToSkeleton, bIsMorphTargetCurve, bIsMaterialCurve, bShouldTransact);
}
bool CreateMaterialCurve(UAnimSequence* TargetSequence, TArray<FRichCurve>& Curves, const FString& CurveName, int32 CurveFlags, bool bDoNotImportCurveWithZero, bool bAddCurveMetadataToSkeleton, bool bShouldTransact)
{
constexpr bool bIsMorphTargetCurve = false;
constexpr bool bIsMaterialCurve = true;
return InternalCreateCurve(TargetSequence, Curves, { CurveName }, CurveFlags, bDoNotImportCurveWithZero, bAddCurveMetadataToSkeleton, bIsMorphTargetCurve, bIsMaterialCurve, bShouldTransact);
}
bool CreateAttributeCurve(UAnimSequence* TargetSequence, TArray<FRichCurve>& Curves, const FString& CurveName, int32 CurveFlags, bool bDoNotImportCurveWithZero, bool bAddCurveMetadataToSkeleton, bool bShouldTransact)
{
//This curve don't animate morph target or material parameter.
constexpr bool bIsMorphTargetCurve = false;
constexpr bool bIsMaterialCurve = false;
return InternalCreateCurve(TargetSequence, Curves, { CurveName }, CurveFlags, bDoNotImportCurveWithZero, bAddCurveMetadataToSkeleton, bIsMorphTargetCurve, bIsMaterialCurve, bShouldTransact);
}
void RetrieveAnimationPayloads(UAnimSequence* AnimSequence
, UInterchangeAnimSequenceFactory::FBoneTrackData& BoneTrackData
, UInterchangeAnimSequenceFactory::FMorphTargetData& MorphTargetData
, const UInterchangeAnimSequenceFactoryNode* AnimSequenceFactoryNode
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:638
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void RetrieveAnimationPayloads
Source code excerpt:
TArray<FString> MaterialSuffixes;
AnimSequenceFactoryNode->GetAnimatedMaterialCurveSuffixes(MaterialSuffixes);
bool bDoNotImportCurveWithZero = false;
AnimSequenceFactoryNode->GetCustomDoNotImportCurveWithZero(bDoNotImportCurveWithZero);
bool bAddCurveMetadataToSkeleton = false;
AnimSequenceFactoryNode->GetCustomAddCurveMetadataToSkeleton(bAddCurveMetadataToSkeleton);
bool bRemoveCurveRedundantKeys = false;
AnimSequenceFactoryNode->GetCustomRemoveCurveRedundantKeys(bRemoveCurveRedundantKeys);
auto IsCurveHookToMaterial = [&MaterialSuffixes](const FString& CurveName)
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:677
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void RetrieveAnimationPayloads
Source code excerpt:
, bRemoveCurveRedundantKeys
, CurveFlags
, bDoNotImportCurveWithZero
, bAddCurveMetadataToSkeleton
, bShouldTransact);
}
}
//Import Attribute curves
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:758
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void RetrieveAnimationPayloads
Source code excerpt:
if (bMaterialDriveParameterOnCustomAttribute || IsCurveHookToMaterial(CurveName))
{
CreateMaterialCurve(AnimSequence, CurvePayload.Curves, CurveName, CurveFlags, bDoNotImportCurveWithZero, bAddCurveMetadataToSkeleton, bShouldTransact);
}
else
{
CreateAttributeCurve(AnimSequence, CurvePayload.Curves, CurveName, CurveFlags, bDoNotImportCurveWithZero, bAddCurveMetadataToSkeleton, bShouldTransact);
}
}
}
//Import attribute step curves (step curves, only time and value array, no FRichCurve. The anim API expect the value array is of the type of the translated attribute)
{
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:817
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void RetrieveAnimationPayloads
lambda-function
Source code excerpt:
}
auto AddAttributeCurveToAnimSequence = [bRemoveCurveRedundantKeys, bDoNotImportCurveWithZero, &AnimSequence](FAnimationPayloadData& StepCurvePayload, const FString& CurveName, const FString& BoneName)
{
if (bRemoveCurveRedundantKeys)
{
for (FInterchangeStepCurve& StepCurve : StepCurvePayload.StepCurves)
{
StepCurve.RemoveRedundantKeys(SMALL_NUMBER);
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeAnimSequenceFactory.cpp:828
Scope (from outer to inner):
file
namespace UE::Interchange::Private
function void RetrieveAnimationPayloads
lambda-function
Source code excerpt:
constexpr int32 CurveFlags = 0;
CreateAttributeStepCurve(AnimSequence, StepCurvePayload.StepCurves, CurveName, BoneName, CurveFlags, bDoNotImportCurveWithZero);
};
for (TPair<FString, TFuture<TOptional<UE::Interchange::FAnimationPayloadData>>>& CurveNameAndPayload : AnimationCurvesPayloads)
{
TOptional<UE::Interchange::FAnimationPayloadData> AnimationCurvePayload = CurveNameAndPayload.Value.Get();
if (!AnimationCurvePayload.IsSet())
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Private/InterchangeGenericAnimationPipeline.cpp:594
Scope (from outer to inner):
file
function void UInterchangeGenericAnimationPipeline::CreateAnimSequenceFactoryNode
Source code excerpt:
AnimSequenceFactoryNode->SetCustomImportAttributeCurves(bImportCustomAttribute);
AnimSequenceFactoryNode->SetCustomAddCurveMetadataToSkeleton(bAddCurveMetadataToSkeleton);
AnimSequenceFactoryNode->SetCustomDoNotImportCurveWithZero(bDoNotImportCurveWithZero);
AnimSequenceFactoryNode->SetCustomRemoveCurveRedundantKeys(bRemoveCurveRedundantKeys);
AnimSequenceFactoryNode->SetCustomDeleteExistingMorphTargetCurves(bDeleteExistingMorphTargetCurves);
AnimSequenceFactoryNode->SetCustomDeleteExistingCustomAttributeCurves(bDeleteExistingCustomAttributeCurves);
AnimSequenceFactoryNode->SetCustomDeleteExistingNonCurveCustomAttributes(bDeleteExistingNonCurveCustomAttributes);
AnimSequenceFactoryNode->SetCustomMaterialDriveParameterOnCustomAttribute(bSetMaterialDriveParameterOnCustomAttribute);
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Pipelines/Public/InterchangeGenericAnimationPipeline.h:100
Scope (from outer to inner):
file
class class UInterchangeGenericAnimationPipeline : public UInterchangePipelineBase
Source code excerpt:
/** When importing a custom attribute or morph target as a curve, only import if it has a value other than zero. This avoids adding extra curves to evaluate. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Animations", meta = (SubCategory = "Curves", EditCondition = "bImportAnimations && bImportCustomAttribute", DisplayName = "Do not import curves with only 0 values"))
bool bDoNotImportCurveWithZero = false;
/** If enabled, all previous node attributes imported as Animation Attributes will be deleted when doing a reimport. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Animations", meta = (SubCategory = "Curves", EditCondition = "bImportAnimations && bImportCustomAttribute", DisplayName = "Delete existing Animation Attributes"))
bool bDeleteExistingNonCurveCustomAttributes = false;
/** If enabled, all previous node attributes imported as Animation Curves will be deleted when doing a reimport. */
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Factories/FbxAnimSequenceImportData.h:111
Scope (from outer to inner):
file
class class UFbxAnimSequenceImportData : public UFbxAssetImportData
Source code excerpt:
/** When importing custom attribute or morphtarget as curve, do not import if it doesn't have any value other than zero. This is to avoid adding extra curves to evaluate */
UPROPERTY(EditAnywhere, AdvancedDisplay, config, Category = ImportSettings, meta = (DisplayName = "Do not import curves with only 0 values"))
bool bDoNotImportCurveWithZero;
/** If enabled, this will import a curve within the animation */
UPROPERTY(EditAnywhere, AdvancedDisplay, config, Category = ImportSettings)
bool bPreserveLocalTransform;
/** Gets or creates fbx import data for the specified anim sequence */
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxAnimSequenceImportData.cpp:10
Scope (from outer to inner):
file
function UFbxAnimSequenceImportData::UFbxAnimSequenceImportData
Source code excerpt:
, bAddCurveMetadataToSkeleton(true)
, bRemoveRedundantKeys(true)
, bDoNotImportCurveWithZero(true)
{
FrameImportRange.Min = 0;
FrameImportRange.Max = 0;
MaterialCurveSuffixes.Add(TEXT("_mat"));
CustomSampleRate = 0;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxAnimSequenceImportData.cpp:87
Scope (from outer to inner):
file
function void UFbxAnimSequenceImportData::CopyAnimationValues
Source code excerpt:
bDeleteExistingMorphTargetCurves = Other->bDeleteExistingMorphTargetCurves;
bDeleteExistingNonCurveCustomAttributes = Other->bDeleteExistingNonCurveCustomAttributes;
bDoNotImportCurveWithZero = Other->bDoNotImportCurveWithZero;
bImportBoneTracks = Other->bImportBoneTracks;
bImportCustomAttribute = Other->bImportCustomAttribute;
bImportMeshesInBoneHierarchy = Other->bImportMeshesInBoneHierarchy;
bPreserveLocalTransform = Other->bPreserveLocalTransform;
bRemoveRedundantKeys = Other->bRemoveRedundantKeys;
bSetMaterialDriveParameterOnCustomAttribute = Other->bSetMaterialDriveParameterOnCustomAttribute;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:509
Scope (from outer to inner):
file
namespace UnFbx
function void ApplyImportUIToImportOptions
Source code excerpt:
InOutImportOptions.bDeleteExistingMorphTargetCurves = ImportUI->AnimSequenceImportData->bDeleteExistingMorphTargetCurves;
InOutImportOptions.bRemoveRedundantKeys = ImportUI->AnimSequenceImportData->bRemoveRedundantKeys;
InOutImportOptions.bDoNotImportCurveWithZero = ImportUI->AnimSequenceImportData->bDoNotImportCurveWithZero;
InOutImportOptions.bImportCustomAttribute = ImportUI->AnimSequenceImportData->bImportCustomAttribute;
InOutImportOptions.bDeleteExistingCustomAttributeCurves = ImportUI->AnimSequenceImportData->bDeleteExistingCustomAttributeCurves;
InOutImportOptions.bDeleteExistingNonCurveCustomAttributes = ImportUI->AnimSequenceImportData->bDeleteExistingNonCurveCustomAttributes;
InOutImportOptions.bImportBoneTracks = ImportUI->AnimSequenceImportData->bImportBoneTracks;
InOutImportOptions.bSetMaterialDriveParameterOnCustomAttribute = ImportUI->AnimSequenceImportData->bSetMaterialDriveParameterOnCustomAttribute;
InOutImportOptions.bAddCurveMetadataToSkeleton = ImportUI->AnimSequenceImportData->bAddCurveMetadataToSkeleton;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:1789
Scope (from outer to inner):
file
lambda-function
Source code excerpt:
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt DeleteExistingMorphTargetCurves"), CaptureImportOptions->bDeleteExistingMorphTargetCurves));
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt AnimationRange"), CaptureImportOptions->AnimationRange.ToString()));
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt DoNotImportCurveWithZero"), CaptureImportOptions->bDoNotImportCurveWithZero));
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt ImportBoneTracks"), CaptureImportOptions->bImportBoneTracks));
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt ImportCustomAttribute"), CaptureImportOptions->bImportCustomAttribute));
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt DeleteExistingCustomAttributeCurves"), CaptureImportOptions->bDeleteExistingCustomAttributeCurves));
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt DeleteExistingNonCurveCustomAttributes"), CaptureImportOptions->bDeleteExistingNonCurveCustomAttributes));
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt PreserveLocalTransform"), CaptureImportOptions->bPreserveLocalTransform));
Attribs.Add(FAnalyticsEventAttribute(TEXT("AnimOpt RemoveRedundantKeys"), CaptureImportOptions->bRemoveRedundantKeys));
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/SkeletalMeshEdit.cpp:1934
Scope (from outer to inner):
file
function void UnFbx::FFbxImporter::ImportBlendShapeCurves
Source code excerpt:
FbxAnimCurve* Curve = Geometry->GetShapeChannel(BlendShapeIndex, ChannelIndex, (FbxAnimLayer*)CurAnimStack->GetMember(0));
if (FbxAnimUtils::ShouldImportCurve(Curve, ImportOptions->bDoNotImportCurveWithZero))
{
FFormatNamedArguments Args;
Args.Add(TEXT("BlendShape"), FText::FromString(ChannelName));
CurrentExportMessage = FText::Format(LOCTEXT("ImportingMorphTargetCurvesDetail", "Importing Morph Target Curves [{BlendShape}]"), Args);
SlowTaskNode.FrameMessage = CurrentExportMessage;
SlowTaskChannel.EnterProgressFrame(1);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/SkeletalMeshEdit.cpp:2081
Scope (from outer to inner):
file
function void UnFbx::FFbxImporter::ImportAnimationCustomAttribute
Source code excerpt:
if (!bImportAllAttributesOnBone)
{
FbxAnimUtils::ExtractAttributeCurves(Node, ImportOptions->bDoNotImportCurveWithZero,
[this, &LinkIndex, &DestSeq, &AnimImportSettings, &OutCurvesNotFound, &OutKeyCount, &SlowTask, bReimport](FbxAnimCurve* InCurve, const FString& InCurveName)
{
FFormatNamedArguments Args;
Args.Add(TEXT("CurveName"), FText::FromString(InCurveName));
const FText StatusUpate = FText::Format(LOCTEXT("ImportingCustomAttributeCurvesDetail", "Importing Custom Attribute [{CurveName}]"), Args);
SlowTask.EnterProgressFrame(0, StatusUpate);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/SkeletalMeshEdit.cpp:2124
Scope (from outer to inner):
file
function void UnFbx::FFbxImporter::ImportAnimationCustomAttribute
Source code excerpt:
}
FbxAnimUtils::ExtractNodeAttributes(Node, ImportOptions->bDoNotImportCurveWithZero, bImportAllAttributesOnBone,
[this, &OutKeyCount, &DestSeq, &AnimImportSettings, &BoneName, bReimport](FbxProperty& InProperty, FbxAnimCurve* InCurve, const FString& InCurveName)
{
if (ImportCustomAttributeToBone(DestSeq, InProperty, BoneName, InCurveName, InCurve, AnimImportSettings.AnimTimeSpan, bReimport))
{
OutKeyCount = FMath::Max(OutKeyCount, InCurve ? InCurve->KeyGetCount() : 1);
}
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/FbxImporter.h:204
Scope (from outer to inner):
file
namespace UnFbx
Source code excerpt:
bool bAddCurveMetadataToSkeleton;
bool bRemoveRedundantKeys;
bool bDoNotImportCurveWithZero;
bool bResetToFbxOnMaterialConflict;
TArray<FString> MaterialCurveSuffixes;
/** This allow to add a prefix to the material name when unreal material get created.
* This prefix can just modify the name of the asset for materials (i.e. TEXT("Mat"))
* This prefix can modify the package path for materials (i.e. TEXT("/Materials/")).