In Blender, I changed my rig name to"Armature" to fix the issue with the root motion but whenever I import my animations, it tells me “Imported bone transform is different from the original” how do I fix this without compromising my root motion?
I think I would need more information. Can you screen cap some of the Blender scene, fbx export settings and import settings?
First of, the actual name of the Armature should not matter with the latest version of blender and the default FBX export.
Second of: What issue were you having with root motion exactly? Be as specific as possible.
Third: Could it be you just need to re-import your base skeletal mesh? The bone structure between the Original Skeleton and any animation associated with it need to match Exactly.
So originally, it would import an extra root bone to the model’s skeleton with the name of the armature, to fix that, I changed the name to “Armature” to work around this. Now it is giving me the issue presented.
Yeah, this issue will happen with the name Armature, “Armature”. It is a bug.
Blender will always add an Empty or bone and call it the name of your rig. It looks like Unreal interprets that as a bone either way. This issue is because in Blender a rig is an object. And under that object are bones. I don’t know of any way to export from Blender without the added root.
The only solution I can think of is to find a way for the Root Motion to work with this configuration. It is a system I am not familiar with yet.
Since the mannequin has a root bone and imports without an additional root bone despite nomenclature, I would suggest that your statement is fallaceous.
OP, could you open up your imported skeletal mesh asset and screencap the hierarchy?
additionally, could you remove the mesh and share a .blend file with the skeleton for us to try and import/debug this? (Perhaps, copy to a nee file so no animations are included).
@JohnnyPlaysGames
I think this explains it better than I can. An addon has been created to address this problem.
“Blender exports the armature like a root bone. To remove this bone check the box “Remove root bone” in Addon Preferences. If you don’t want to remove it you can set the desired root bone name. If the name used is “Armature”, Unreal Engine will remove the root bone. You can set the root bone scale too. If you modify this you will have to import the animation.”
I don’t think there is a proper way (without creating other issues in Unreal) to remove the “faux” root bone that Blender creates without this addon. The options in the Blender exporter don’t seem to work.
I don’t have time to experiment with this, but you can try it and see if it works.
Theoretically, if this works, you will then be able to use the Root Motion feature.
If you “remove” the root bone as you are suggesting, then no, you won’t be able to use root motion… unless the Pelvis becomes a root. which is possible, but incorrect. Your collision capsule would start at the pelvis. This would probably destroy the whole concept of root motion anyway.
Moreover - having Multiple root bones (pelvis, leg ik, arm ik would become root bones) is NOT supported by unreal.
“Found multiple roots. The importer only supports one root per mesh.”
So, the plugin probably doesn’t “remove” the root bone.
But never mind all that poppycock, Let’s go over what Vanilla blender / UE4 actually do:
This is a mannequin hierarchy for reference - in blender.
As anyone can see the Armature and the collection containing all the bones are named Root - not armature. The import on those matches Epic’s skeleton. with the proper Root bone setup.
Now let’s rename that to armature and import a new one.
You’ll see this hierarchy in unreal > Sk_mannequin > armature > pelvis.
Why?
The code in the source to manage this is still present:
UE_4.24\Engine\Source\Editor\UnrealEd\Private\Fbx\FbxMainImport.cpp
// get Unreal skeleton root
// mesh and dummy are used as bone if they are in the skeleton hierarchy
while (RootBone && RootBone->GetParent())
{
bool bIsBlenderArmatureBone = false;
if (FbxCreator == EFbxCreator::Blender)
{
//Hack to support armature dummy node from blender
//Users do not want the null attribute node named armature which is the parent of the real root bone in blender fbx file
//This is a hack since if a rigid mesh group root node is named "armature" it will be skip
const FString RootBoneParentName(RootBone->GetParent()->GetName());
FbxNode *GrandFather = RootBone->GetParent()->GetParent();
bIsBlenderArmatureBone = (GrandFather == nullptr || GrandFather == Scene->GetRootNode()) && (RootBoneParentName.Compare(TEXT("armature"), ESearchCase::IgnoreCase) == 0);
}
Note the “ESearchCase::IgnoreCase” in the code. the capitalization should not matter.
But our structure includes an Empty.
This is the proper Hierarchy to use to place a CUSTOM root bone - stock blender, no add-ons necessary.
Note that the Empty containing SK_Mannequin was removed from the hierarchy.
The Root armature was aptly renamed, along with it’s container (though the second name may not matter at all), and a root bone was added/parented appropriately. (this is necessary or the import WILL fail).
Importing this setup in engine Correctly generates this Skeletal Structure:
As you can see… well, you can actually see in the following image:
The root bone is placed in the same custom position I have placed it within blender (so you know I didn’t just import the standard mannequin).
Here is blender’s equivalent
that’s basically how the Armature naming works / and how you use a custom root bone.
If you do not need a custom root bone (like the default mannequin), just name the armature Root - which will generate the default root bone for you.
Fairly simple, even if a bit of a pain.