The Importance of Joint Orientation
- June 9th, 2010
- Posted in Uncategorized
- Write comment
Joint Orientation is critical when preparing characters for animation, and especially so when developing animations for game development. It is an integral part of the character animation skeleton. Beyond mere joint placement, which acts as a pivot for the joint or limb, joint orientation contains information as to the direction/angle of the X, Y, Z axes, and their ranges of motion.
For example, you create a skeleton with the correct joint placement, and do not consider joint orientation. When the animator takes a hold of the skeleton to animate (Forward Kinematics), a common occurrence is that the animations will not transition correctly (most likely horribly) between key frame poses, thus creating a lot more work for the animator to modify/clean up the animation curves: highly inefficient. This is particularly due to the fact they don’t have defined ranges of motions to base their movements on, and will have to animate based on camera perspective, which is not very efficient or effective.
Animating joints via Inverse Kinematics with Pole Vectors can simplify some of the work for the animator for certain animations, however, visible gimbal rotation malfunctions are common, and are more complicated to adjust via animation curves because the object being animated is the IK controller, not the joint.
If you are building a character skeleton for game development, and not just for working within your 3D software package, poor joint orientation can cause some major integration issues since game engines import skeleton/joint information differently.
For now, here are some example screens of a clean joint oriented skeleton. As I expected, integration into Unreal Development Kit was clean, simple, and uneventful.
Tip: Orient joints with the X axis pointing down the joint, have the Z axis be a pivot for the joint. Consistency is key!
———————————————————–
Update:
Defining World/Local/Object axes.
World: the world’s default axis, Go to and expand/enable “Display >> Heads Up Display >> Origin Axis” to view.
To view the axis of an object, select desired objects and press the “F8” key, this is the object/component mode toggle button and then click on the question mark icon/button next to the “lock/unlock” icon in the Status Line menu (directly underneath the main menu by default, and the same line where the drop down menu for different modes ie. Animation/Polygon/Dynamics/Rendering etc is located on).
Local: Based on the parent objects’ axis, notice that if there is a single object in a scene, the Local axis of this object is the same as the world axis because the parent of the object IS the world.
Object: the objects’ axis.
hi, I’m currently in the process of rigging and have been researching the joint orientation a bit. Is it correct for me to zero out all the joint orientations (for a humanoid character)?
I’ve mirrored the arms and legs by behaviour. The arms at the moment have -180 for the X joint orientation. Should I zero that out too?
Thanks for the awesome tips here by the way.
To answer that question, you will first need to understand what joint orientations do, put simply, they are used to offset the parent orientations so that the joint can point in a different direction and make it easier to use rotation values.
Also, it depends on who/what is going to use the rig and if they can recognize the joint orientations. If it’s just for personal use in Maya, then it’s OK. Exporting to a game engine on the other hand, is a different story, hence I talk about zeroing out the joint orientations to keep the skeleton as clean as possible.
Typically, you don’t want to touch the joint orientations of a mirrored skeleton after it’s been mirrored because it might act inconsistently with the other side, if you modify one side, I recommend you scrap the other and mirror again. When mirroring joints with behavior, the joint axis will follow the same paths as the original joint, just pointing in the opposite direction, so seeing different/opposite values in the joint orientation is OK.
Hope that helps, and best of luck.
So, I’m new to this rigging thing. I’m teaching myself, coming from a programming background I learned nothing about art/modeling, but I’m greatly interested in it, as well as writing tools. But, before I write tools I need to understand WTF is going on! Anyways, I understand just about everything you said, but I do have a question about other things I’ve read and watched, and I hope you have the time to answer them. I can’t for the life of me for some reason understand the difference between Local and Object Space/Axis. I do understand World space though.
Also, I was watching a video and instead of using the “Orient Joint” tool through maya, they guys used maya’s quick menu, selected Object, then brought the menu up again and selected Axis > Local. What did that do? Can you also explain to me why do that instead of use the Orient Joint tool?
I know this post is old, but I thought maybe you could still help. Thanks for the great read, and hopefully an answer.
– Austin
Hey Austin,
Thanks for checking in, it’s great that you are interested in rigging, I’m starting to focus more on tools as well, maybe we can both learn from each other, since unlike you, I come from the opposite end of the spectrum doing art/animation. Anyways, I’d be glad to answer your question about World/Local/Object axis.
World orientation/axis is pretty self explanatory as you have so figured out, the remainder work in a similar way going down the chain.
Simply put, Local orientation is based on the objects’ parent axis, and Object orientation is based on the objects’ own axis.
Hope that makes things easy to understand, I’ve also added an update to the post about your question. Also, you may have just given me a good idea for another video, it’s been awhile.
Cheers!
Hi There,
I am creating a python arm rigging template. Basically I want it to create the joints for the arms, IK, FK, Main, and stretchy automatically. I’m wondering what the best way to orient joints on the right side is, as that is the mirror side for me in this case. I can either create the joints automatically, or create one side and mirror them, if I do the first option, which is cleaner for the python script, how should i orient it’s joints axes. As of now I have it where for both sides the joints are oriented with X as the primary axis, Y as the secondary axis, and orientation of -X.
Good question you have there, and you’ve definitely considered the possible joint orientation issue of mirroring joints.
Whether it’s clean or not, getting it working is most important.
As for mirroring, I don’t know off the top of my head, I’d play around with the joint orient command options, and try it on a few test joints. Also, it all depends on your joint/skeleton setup. You are using X primary and Y secondary, take into consideration the direction the joint chain is going in, and what type of control functionality you want from the joints when it is time to animate.
For example, there are two joint chains going in opposite directions from the same location, when rotating on the positive value of the same axis (let’s say Y), the chains curl inward towards the same world space axis. This would require the Y axis of one jointn chain to be reversed 180 degress from the other (pointing in the opposite direction).