In UE 5.2 and 5.5 (using the new FBX importer) I run into the following issue:
- I create a model, skeletal mesh and some animations for that skeleton in Blender 4.3. All animation actions are shown below.
- I export all to a single FBX file. In Unreal Engine, I import the FBX file, creating skeleton, animations etc.
- I find that the created animation sequence assets have names mismatching the action names in Blender. There is no way to customize this on the importer?
As you can see long names are generated which lack proper formatting (short name, styleguide type prefix), and require to be renamed manually. The latter would take tons of time for a complex assets (or require a plugin to do it) and would break future reimports as there would be a mismatch in animation names.
So how does one preserve the action name exactly as written in blender? So that if I create a collection of animations in one FBX with say an action called “AS_Human_Jump”, Unreal would create an animation sequence asset with exactly that name?
My intention is to:
- create single FBX with skeleton + tons of animations.
- Import FBX file and generate all animations with correct names.
- Ensure that no further manual work is required (no 1 animation per FBX or manual renaming etc.)
- Ensure that reimports are possible with just a click (to update animations, add new animations)
Why does Unreal Engine mess up something basic like this? I used to work with fossil XRay engine where you’d just export import hundreds of animations on a human 1:1 few clicks done.
Could you try to make a custom interchange blueprint pipeline like this, that should do what you want.
It is renaming the name of Anim Sequence asset using the corresponding track node name.
You will have to add it to you fbx asset import pipelines.
custom pipeline blueprint doc
I don’t know yet how it works, but I think I understand the concept and having imports be customizable like that is actually amazing.
I made an interchange blueprint pipeline asset, and I override the ScriptedExecutePipeline with your code.
It remains unclear how I can override the FBX import pipeline to use that + having the asset renamed. The project settings for Interchange does not list FBX, and I see that the pipelines there are not of a script type like the blueprint asset.
I placed the blueprint asset on index 1 for Pipeline Stacks > assets, just to see what would happen. I expect something like using the default process, then (by your code) if an animation sequence is detected it modifies the asset name. This does not have the effect I had in mind (no effect).
When I now import the FBX file I get two options, the default pipeline OR the blueprint asset. selecting the blueprint asset somehow does import the FBX as usual, but the animation sequence names are not altered any different.
What exactly it does, is unclear.
You seem to have done all good.
- Creation of an interchange blueprint pipeline and override of the ScriptedExecutePipeline
- Adding it in the good spot in the Pipeline stack: FBX use the default pipeline, unless you override in a per translator pipeline, so that is the correct space. You also put it after the DefaultAssetsPipeline so that is perfect. We need to have DefaultAssetsPipeline do some work before running your custom pipeline
- It will show in the list of pipelines used in the “Assets” stack. You are not executing one or the other, it is all of them that are executed in order. That is what we want: First Execution of the Default Assets Pipeline that will do most of the work of the import then your custom ImportAnimation sequence comes and modify some settings on the factories to change the asset names. Because, ATM, your pipeline does not expose any properties nothing shows in the window when you select it.
Now I am not sure why it does not work, I am trying to get the real name from a SkeletalAnimationTrackNode, that might not be what should be done in your case.
You could try something like that that does not use the original track name. Just to make sure the code does something
Then if you can share one fbx with me to test?
1 Like
That new code does something:
Here’s my FBX, and its blender 4.3.2 file, and the project I set up for interchange testing:
SKM_HeroCharacter.fbx (81.2 KB)
SKM_HeroCharacter.blend (652.1 KB)
TestProject.zip (26.1 KB)
I did not look at your screenshot properly: the first pipeline I gave did something, instead of “SKM_HeroCharacter_Anim_Armature_HeroIdle” now you get “Armature_HeroIdle”.
You could change the code to do a “split string” and only keep what is after the last “_”
The extra Armature seems to come from what is exported in FBX.
When I reimport in blender I see that for the animations
oh! I missed that
. I’m going to implement that on the pipeline asset and I will post back the result.
Btw, being a programmer I’m quite happy the import turns out to be so customizable. I had never heard of Interchange.
Cool, that was one of the main goal of interchange: allow users to have more control over default import settings and insert custom steps in the import process. You can do that in blueprint / python and C++.
Perfection. That’s more customizable than checkboxes on UI
.
1 Like