Skip to content

Back to basics: transform spaces.

March 22, 2007


So, It’s been a very long hard day and now after a long bath and let my mind slow to a crawl I can add some more to this blog. Transforms affect everything in rigging, there the staple food for a TD and to know them as they say, is to love them.

What is a transform? well essentially a rotation about an axis (the origin) and an offset from the origin (its position). Rotations dont really exist, they’re just how an objects orientation is defined via an axis. Scale is defined by the lengths of these axis, all in one would be universal. On there own would be non-uniform. Sheering is cause by the axis’ not being orthogonalized or perpendicular to each other.

Every object in max and most other 3d packages has a transform space, this is the space the object inhabits. For example for us our transform space is Earth, with the Sun being the Earths. When an object gets created in max, it exists in root or world space, it has no parent and so both its local and world space’s are the same.

When an about gets transformed ‘into’ anothers space, be it from matrix transformations, controllers or simple parenting it gets a relative local space, but still has a world space.  For example if have ‘A’ at [10,0,0] and ‘B’ at [20,0,0] with B parented to A, B has both a local value and a world. Its local value would be [10,0,0] because now its relative to A, and it has a world space value of [30,0,0]. If I put B back to [10,0,0] it would be [0,0,0] in local space, but [10,0,0]  in world.

Transform spaces are crucial in controlling objects especially if they have no parent, or cant have a parent. One way to make an object relative to another is to transform it. In max we have two systems, a left handed system to the user and an internal right-handed system. What happens behind the scenes is every position/rotation/scale you do is transform into the right space system. So all you need to do is force transform an objects space from its current one to a targets space:

(object.transform * inverse target.transform) –  this simple function will get the transform of any object relative to a targets space. Now if you want to transform with the target you have to multiple by it, for example.

Tm = (a.transform * inverse b.transform)

a.transform = (Tm*b.transform)

One Comment

Post a comment
  1. S #
    April 4, 2007

    Hello, I’ve just started riggin in 3ds max. I’m planning on making models for games, so no realistic animation is required. I have set up normal bones and bones for the eyebrows, eyes and jaw. But when I move the headbone backwards (so the model looks up) the eyebrows slightly move down and the mouth up. They do move with the headbone but there is some deformation. If I rotate the headbone one eye gets pulled back and the other pops out.

    I know it may have something to do with the location of the pivotpoints of the bones. Do you know how to better this? It’s a simple custom bone structure with the physiques modifier.

    any tips are welcome.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: