At the moment, I have a character rigged to a bunch of bones whose pivots are
all going whichever way they darned well please.
For the sake of compatibility with my engine, I need to adjust the pivots of all those bones so that their axes are aligned with world X,Y,Z axes.
Simple enough, right? Just turn on "Affect Pivot Only" under the Heirarchy tab, select all my bones, and click "Align to World". Well, it seems to work (minus a few easily corrected inverted axes), save one problem:
the bones are being adjusted with their pivots.
No fair, right? How can I be expected trust a program whose "Affect Pivot Only" button does not, in fact, affect only pivots? Disappointment ensues, but I quickly decide to try a workaround. I grab all those bones, convert them to Editable Polygons, and make a hopeful dash towards the "Align to World" button. No luck, same problem.
So what gives? Anyone ever had this problem or found a workaround, or is my rig pretty much done for? Thanks in advance for the help. :}
Replies
Recreate the rig.
edit: it's under "advanced parameters" "Always deform", uncheck it, run your align stuff, then check it again
btw why do you need them aligned in the first place?
@Eric: I'd recreate the rig, but it'd probably have the same problem, since I made this one, too. :<
@CrazyButcher: This solution allows me to align my bones without causing any noticeable deformations, but since the bones are still modified when I realign their pivots, they break apart from one another, causing all kinds of ugly things to happen when I re-enable deformations and animate. :<
e_x: Aye, this method does, indeed, allow me to rotate/re-orient the bones, but it yield's the same problem as CrazyButcher's solution: the bones are now broken off from one another, causing some heavy deformation when animated.
Anyway, I'm still trying out a couple of other ideas.
They have to be local, otherwise all your animations are going to be messed up... the bones need to be able to rotate about the alignment of their real-world bones (thumb knuckle must rotate perpendicular to the thumb, etc.).
If aligned to world, you won't be able to constrain the lower arm to rotate on only one axis at the elbow, etc. You would have to rotate on two axes at once, to try and simulate local-singl-axis rotation. Which leads to interpolation problems.
CrazyButcher is right, talk to your prorammers, something is wrong with what they're asking you to do. Probably a simple miscommunication. They might actually just be asking for the root bone to be aligned to the world, which isn't usually a requirement, but everyone's different.
I first stumbled upon problems while setting up some code that points bones in a rig towards a 3d vector: for instance, making a head bone "look at" a nearby NPC, or an arm bone "aim" a gun at its target.
Turns out that there's a bug in the actor.SetBoneRotation function that disables the ability to set absolute world space rotations, which left me with the impression that in order to set absolute rotation values, I would have to align each bone's axes to world axes. A quick chat with the dev team unearthed the bug, and they're now working on fixing the problem for the next update. :}
Thank you all for the help!