Armature editing : making bones point to their children

Hello all -

I am working with game character armatures which went through a number of file format conversions. The armatures feature a high number of limb bones as well as helper bones for deformations. The files I have to work with are originally FBX, and I do not have much control over the conversion process they went through.

The armatures themselves are fully functional, but the bone orientations are inconsistent and the FBX bone orientation options on import cannot fix it since some do point in the right direction while others do not. For instance on the image below you can see that the main left arm bones are mostly correct, while the ones of the right arm stick out at 90 degrees of the main direction of the limb. And then leg bones tend to be rotated 180 degrees compared to what one would expect, and are inconsistent between left and right leg as well.

This video shows the different scenarios as well as the kind of edit I would like to perform, at the end.

Basically I would like to be able to edit the armature as a whole by telling each bone to keep its point of origin, while pointing down to the next (non-helper) bone in the hierarchy. This is all for the sake of making this armature more human readable while working in Blender, since once the character is exported to the game it refers to a master skeleton armature which is already established - therefore the orientation edits I am attempting to do will not affect it (they will however help me a lot while skin weighting).

Here is a blend file :
https://drive.google.com/file/d/0B3tXoYtBEtrTSXRMXzNCZHVoOFU/view?usp=sharing
And the corresponding FBX before import :
https://drive.google.com/file/d/0B3tXoYtBEtrTXzFzeHlaZkR3NWM/view?usp=sharing

As a matter of fact, loading this FBX in FBXreview gives a nice preview of what I would like to achieve visually in Blender - that is to say, a bone structure “connecting the dots” from one bone to the next.

Thank you for your help !

This all looks a bit complicated but if this needs to be exported back to an armature already in engine then changing the bone rotates will mean the animation’s will not export correctly.
The only way I can see is to set up a control armature to animate with in Blender which is not exported. This is the common way to do it for real time game rigs anyway.
You would link the original armature to the control armature with constraints. No hard parenting. Then bake the animation to the original armature before you export.

Either that or try to get the original re-done which might be a hassle of course. Is it known that the model in engine can run animations correctly ?

If this came from Maya originally ? it possibly looks like the bone, joint orient’s might not have been set up properly. The Joint Orient is a function or bottom control layer in Maya joints that point’s and orients the bone while keeping it’s actual rotate transforms at zero.
It can be confusing as the rig will read right visually in Maya even if the orients are all skewed. If this is not set up cleanly it can cause these sorts of problems later with exporting out.

Hi Toka, thank you for your reply.

- This all looks a bit complicated but if this needs to be exported back to an armature already in engine then changing the bone rotates will mean the animation’s will not export correctly.

As counter-intuitive as it may seem this is actually not the case here. I too was confused by it at first, but improper bone orientation does not cause any issue in this specific case. For instance a model assigned to the armature shown here (with obvious orientation problems) exports fine to the game and behaves properly during gameplay. Note that I am not animating - I am just modeling assigning weights. The animations and master skeleton are stored in completely distinct files that I do not have access to.

- The only way I can see is to set up a control armature to animate with in Blender which is not exported. This is the common way to do it for real time game rigs anyway.

I like the way you think ! Indeed, this armature was without a doubt originally controlled with a rig ; and creating one on top of the current armature I am working with would make it much easier for me to handle, thus bypassing the need to edit the individual bone alignements altogether. (Again I am not exporting animations to the game, BUT, being able to intuitively control the armature would help me tremendously for deformation testing while skin weighting).

I could definitely identify the main bones and their respective points of origins. How would I then proceed to create a rudimentary control rig for them ?

Thanks !

(As for the origin of the model : it was decompiled from a .uasset into a .psk, imported into Max (as the Blender .psk importer does not support the amount of weights per bone that the original model had), exported as .fbx, and finally imported into Blender. In other words, a lot of steps that could have caused bone orientation conversions and that I do not have control over.)

I could definitely identify the main bones and their respective points of origins. I would I then proceed to create a rudimentary control rig for them ?

Just use the 3d cursor to snap the control bones to the position of the armature bone pivots. Then copy rotation constrain the bones of the original armature to the new control bones making sure maintain offset is ticked.

Just wanted to chime back in to mention that everything worked smoothly ! I wasn’t familiar with the constraints system before that so that was a great occasion to learn. Using proxy manipulators was a great way to work around the original issue of bone orientation.

The armature and the bone orientations themselves are still all over the place, but I can now work with the armature easily and test my weighting at all times, so in that regard I achieved what I wanted/needed.

Thanks again !