Blender 2.75 FBX Export - Adds Extra Bone to Rig #45368

Closed
opened 8 years ago by RyanGrzesiak · 15 comments

System Information
Window 8.1 on a gtx 660ti

Blender Version
Broken: Blender 2.75
Worked: Blender 2.74

Short description of error
I just found out that when i export my character rig using the FBX Export, it adds my Rig as a top level bone. This means if i have a Root bone in the rig, i now have two when i export. The reason this is a problem is because i have Root Motion embedded in the animation and when i import it into the Unreal 4, it can no longer grab the Root Motion from the rig. This is because Root Motion is read from the top level bone. It looks like an error in Blender 2.75 as it worked fine in 2.74 and i could find no way to avoid it. It just means I can't use Blender 2.75 until i sort through this problem. I hope this helps!

You can not replicate the problem by importing it back into Blender so i included two pictures of unreal 4 for convenience.
armature_test.blend

pic_02.PNG

pic_01.PNG

Ps I have attached a simple rig, but it does the same with any rig

**System Information** Window 8.1 on a gtx 660ti **Blender Version** Broken: Blender 2.75 Worked: Blender 2.74 **Short description of error** I just found out that when i export my character rig using the FBX Export, it adds my Rig as a top level bone. This means if i have a Root bone in the rig, i now have two when i export. The reason this is a problem is because i have Root Motion embedded in the animation and when i import it into the Unreal 4, it can no longer grab the Root Motion from the rig. This is because Root Motion is read from the top level bone. It looks like an error in Blender 2.75 as it worked fine in 2.74 and i could find no way to avoid it. It just means I can't use Blender 2.75 until i sort through this problem. I hope this helps! You can not replicate the problem by importing it back into Blender so i included two pictures of unreal 4 for convenience. [armature_test.blend](https://archive.blender.org/developer/F204227/armature_test.blend) ![pic_02.PNG](https://archive.blender.org/developer/F204223/pic_02.PNG) ![pic_01.PNG](https://archive.blender.org/developer/F204224/pic_01.PNG) Ps I have attached a simple rig, but it does the same with any rig
Poster

Changed status to: 'Open'

Changed status to: 'Open'
Poster

Added subscriber: @RyanGrzesiak

Added subscriber: @RyanGrzesiak
Collaborator

#50649 was marked as duplicate of this issue

#50649 was marked as duplicate of this issue
mont29 self-assigned this 8 years ago
mont29 commented 8 years ago
Owner

Added subscriber: @mont29

Added subscriber: @mont29
Poster

Thanks for the suggestion. I passed over the Normal option in the FBX export options as i thought it was only for the shading of the faces. I did a quick export to Unreal 4, but i didn't see any changes. I'll look into it in more depth when i get back. Thanks again for your time!

Thanks for the suggestion. I passed over the Normal option in the FBX export options as i thought it was only for the shading of the faces. I did a quick export to Unreal 4, but i didn't see any changes. I'll look into it in more depth when i get back. Thanks again for your time!
Poster

I have tried to export with normal turned off but it is not working. This is my first time reporting on this site so i am not sure this is the best way to request help. Is there any other way to stop the rig exporting with the extra Root Bone?

I have tried to export with normal turned off but it is not working. This is my first time reporting on this site so i am not sure this is the best way to request help. Is there any other way to stop the rig exporting with the extra Root Bone?

Added subscriber: @crushyerbones

Added subscriber: @crushyerbones
mont29 commented 8 years ago
Owner

Eeeeeeh, who ever suggested to export without normals here? Normals have nothing to do with armatures & bones!

Eeeeeeh, who ever suggested to export without normals here? Normals have nothing to do with armatures & bones!
mont29 commented 8 years ago
Owner

Ok, so, things are hairy here.

2.75 is actually behaving correct, it was previous versions that were buggy regarding the export of the armature object itself.

Now, we have to export an empty as root of the armature here, since in Blender armature are an object (while in FBX, it’s more like each bone being an object, with no concept of 'armature object' really).

The problem comes from UE4 reading that empty as a (root) bone of the armature, instead of what it is - an external object, parent of the bone’s chain.

I can add (yet another :/) export option to not export said armature objects at all, but that means we'll have no animation (or even 'world transform') of the armature object iteself in the root bone, then (in practice, this means armature object in Blender should be at origin, with no rotation nor scaling, and no parent nor any animation)… Not much keen on this idea tbh.

Ok, so, things are hairy here. 2.75 is actually behaving correct, it was previous versions that were buggy regarding the export of the armature object itself. Now, we have to export an empty as root of the armature here, since in Blender armature are an object (while in FBX, it’s more like each bone being an object, with no concept of 'armature object' really). The problem comes from UE4 reading that empty as a (root) bone of the armature, instead of what it is - an external object, parent of the bone’s chain. I can add (yet another :/) export option to **not** export said armature objects at all, but that means we'll have no animation (or even 'world transform') of the armature **object** iteself in the root bone, then (in practice, this means armature object in Blender should be at origin, with no rotation nor scaling, and no parent nor any animation)… Not much keen on this idea tbh.

I personally think that if normal fbx files don't have an equivalent, maybe the option to notexport the Armature makes sense. Not having that option means importing and exporting an fbx file might never have the same result:

Eg: Imagine we want to simply edit an UV coordinate in an fbx file we imported. Exporting it back again generates a new root armature node -> We now have a different bone hierarchy.

As a programmer I know it's a horrible compromise but I think it makes sense due to the differences between Blender and the fbx format.

Of course, this is just my opinion as a bystander also facing Ryan's problem :)

I personally think that if normal fbx files don't have an equivalent, maybe the option to **not**export the Armature makes sense. Not having that option means importing and exporting an fbx file might never have the same result: Eg: Imagine we want to simply edit an UV coordinate in an fbx file we imported. Exporting it back again generates a new root armature node -> We now have a different bone hierarchy. As a programmer I know it's a horrible compromise but I think it makes sense due to the differences between Blender and the fbx format. Of course, this is just my opinion as a bystander also facing Ryan's problem :)
Poster

Thanks guys for looking into the problem. You have pretty much touched on exactly what the issue is. I looked into trying to get Unreal 4 to target another bone as a Root bone, but from my research they said it would have performance cost so they didn't add it.

Thanks guys for looking into the problem. You have pretty much touched on exactly what the issue is. I looked into trying to get Unreal 4 to target another bone as a Root bone, but from my research they said it would have performance cost so they didn't add it.
mont29 commented 8 years ago
Owner

Changed status from 'Open' to: 'Archived'

Changed status from 'Open' to: 'Archived'
mont29 closed this issue 8 years ago
mont29 commented 8 years ago
Owner

Ok, so, have wasted a whole afternoon on this - and honestly think it could have been wasted in more profitable ways…

It’s a bit the same story as with the 'apply transform' option - in theory it should be reasonably simple, but FBX transform model is such a nightmare (not to mention binding stuff, which is a squared nightmare), that it ends up more or less broken… Rather not make our poor code even more convoluted for an half-working feature.

See https://developer.blender.org/diffusion/BA/browse/fbx_io_export_ignore_parents/ if you want details and code so far…

PS: still do not understand why you are animating your first bone instead of the armature object itself, which will be exported as kind of root bone in FBX…

Anyway, thanks for the report, but for now considering this as a (reasonably unsolvable) feature request, there is no real bug here, more like a matter of adjusting your process.

Ok, so, have wasted a whole afternoon on this - and honestly think it could have been wasted in more profitable ways… It’s a bit the same story as with the 'apply transform' option - in theory it should be reasonably simple, but FBX transform model is such a nightmare (not to mention binding stuff, which is a squared nightmare), that it ends up more or less broken… Rather not make our poor code even more convoluted for an half-working feature. See https://developer.blender.org/diffusion/BA/browse/fbx_io_export_ignore_parents/ if you want details and code so far… PS: still do not understand **why** you are animating your first bone instead of the armature object itself, which will be exported as kind of root bone in FBX… Anyway, thanks for the report, but for now considering this as a (reasonably unsolvable) feature request, there is no real bug here, more like a matter of adjusting your process.
Poster

That is really funny. I had no idea that you could animate the armature and the animation would appear in the action keyframe data.

Anyway, there is a reason why I am using the first bone to animate. When I set up my rig, I created constraints and drivers which completely counter the effects of the root bone and attach it to the pelvis bone. This allows me to do two things. First, when Unreal is playing the root motion, the camera of the character follows the root bone. This means I can animate the root bone solely for the camera information so I can give weight to the animation. Second, it takes out the issue of having to counter-animate the motion of the root bone. It is hard to explain, but when setting up a complex Root Motion animation, you have to go back and forward between moving the Root of the character and the animation around it to compensate.

Long story short, you can animate the rig as the root bone, but you lose control of the bone drivers and constraints, and it leads to an un-seamless animation workflow within the pose mode (jumping in and out to update keyframes). I hope the following discussion made it clear and i'll check out what you've done as soon as i can. Thanks once again for your awesome work and time.

Ps The attached picture is showing a character with the ability to move the root bone without affecting the position of the feet or hands (constraints).

climbing_ladder_v2.PNG

That is really funny. I had no idea that you could animate the armature and the animation would appear in the action keyframe data. Anyway, there is a reason why I am using the first bone to animate. When I set up my rig, I created constraints and drivers which completely counter the effects of the root bone and attach it to the pelvis bone. This allows me to do two things. First, when Unreal is playing the root motion, the camera of the character follows the root bone. This means I can animate the root bone solely for the camera information so I can give weight to the animation. Second, it takes out the issue of having to counter-animate the motion of the root bone. It is hard to explain, but when setting up a complex Root Motion animation, you have to go back and forward between moving the Root of the character and the animation around it to compensate. Long story short, you can animate the rig as the root bone, but you lose control of the bone drivers and constraints, and it leads to an un-seamless animation workflow within the pose mode (jumping in and out to update keyframes). I hope the following discussion made it clear and i'll check out what you've done as soon as i can. Thanks once again for your awesome work and time. Ps The attached picture is showing a character with the ability to move the root bone without affecting the position of the feet or hands (constraints). ![climbing_ladder_v2.PNG](https://archive.blender.org/developer/F209005/climbing_ladder_v2.PNG)
mont29 commented 6 years ago
Owner

Added subscriber: @rickjs

Added subscriber: @rickjs
Sign in to join this conversation.
No Label
good first issue
legacy module/Animation & Rigging
legacy module/Core
legacy module/Eevee & Viewport
legacy module/Grease Pencil
legacy module/Modeling
legacy module/Nodes & Physics
legacy module/Pipeline, Assets & IO
legacy module/Platforms, Builds, Tests & Devices
legacy module/Python API
legacy module/Rendering & Cycles
legacy module/Sculpt, Paint & Texture
legacy module/User Interface
legacy module/VFX & Video
legacy project/2.81
legacy project/2.82
legacy project/2.83
legacy project/2.90
legacy project/2.92
legacy project/2.93
legacy project/3.0
legacy project/3.1
legacy project/3.2
legacy project/3.4
legacy project/Add-ons (BF-Blender)
legacy project/Add-ons (Community)
legacy project/Alembic
legacy project/Animation & Rigging
legacy project/Asset Browser
legacy project/Automated Testing
legacy project/BF Blender: 2.8
legacy project/BF Blender: After Release
legacy project/BF Blender: Next
legacy project/BF Blender: Regressions
legacy project/BF Blender: Unconfirmed
legacy project/Blender 2.70
legacy project/Blender Cloud
legacy project/Code Quest
legacy project/Collada
legacy project/Compositing
legacy project/Core
legacy project/Cycles
legacy project/Datablocks and Libraries
legacy project/Dependency Graph
legacy project/Documentation
legacy project/EEVEE & Viewport
legacy project/Freestyle
legacy project/Game Data Conversion
legacy project/Game Engine
legacy project/Game Physics
legacy project/Game Python
legacy project/Game UI
legacy project/Geometry Nodes
legacy project/Good First Issue
legacy project/Grease Pencil
legacy project/Images & Movies
legacy project/Import/Export
legacy project/Infrastructure: Blender Buildbot
legacy project/Infrastructure: Blender Web Assets
legacy project/Infrastructure: Websites
legacy project/Modeling
legacy project/Modifiers
legacy project/Motion Tracking
legacy project/Nodes
legacy project/Nodes & Physics
legacy project/OpenGL Error
legacy project/Overrides
legacy project/Papercut
legacy project/Physics
legacy project/Pillar
legacy project/Pipeline, Assets & I/O
legacy project/Platform: Linux
legacy project/Platform: macOS
legacy project/Platforms, Builds, Tests & Devices
legacy project/Platform: Windows
legacy project/Python API
legacy project/Render & Cycles
legacy project/Render Pipeline
legacy project/Sculpt, Paint & Texture
legacy project/Straightforward Issue
legacy project/Text Editor
legacy project/Tracker Curfew
legacy project/Translations
legacy project/USD
legacy project/User Interface
legacy project/UV Editing
legacy project/VFX & Video
legacy project/Video Sequencer
legacy project/Virtual Reality
papercut
Priority › High
Priority › Low
Priority › Normal
Priority › Unbreak Now!
Status › Archived
Status › Confirmed
Status › Duplicate
Status › Needs Information from Developers
Status › Needs Information from User
Status › Needs Triage
Status › Resolved
straightforward issue
Type › Bug
Type › Design
Type › Known Issue
Type › Patch
Type › Report
Type › To Do
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender-addons#45368
Loading…
There is no content yet.