You may not be aware that in XSI scaling is handled differently than in other 3D software packages or perhaps you have encountered situations where scaling a hierarchy did not quite give you the results you were expecting.

In this article I’m going to crack open the mysteries surrounding Softimage scaling. You might find this useful if you are exporting rigs out of XSI or trying to integrate XSI into an existing pipeline. At the very least you might be able to use this knowledge to impress the newbies at work.

There are two types of transformation schemes that XSI supports: Softimage scaling (also affectionately known as SI scaling) and classical scaling (which is a term we invented to refer to the way everyone else handles scaling).

SI scaling was invented at Softimage and it was designed to avoid shearing. Shearing happens when an object is scaled in a direction that does not line up with one of its local axes. One characteristic of shearing is that the object’s local axes may no longer be perpendicular. Shearing can also affect your mesh normals in undesirable ways.

So, if shearing is generally undesirable then why don’t we see other software taking a similar approach? Well for starters classical scaling more closely matches the matrix-stack transformation model used by the graphics hardware and it is simpler to implement and understand. Another reason is that even though shearing can occur with classical scaling it is fairly easy to avoid in practice.

In fact, under many circumstances SI scaling and classical scaling may yield the exact same results which is one reason why SI scaling is not more well known. In fact, the only situation where SI scaling differs from classical scaling is when you apply different scale factors to one or more axes on a 3D object with children *and* the local axes of the children do not line up with the parent’s local axes. If you stick to uniform scaling or the parent and children’s local axes line up or you only apply non uniform scaling to 3D objects without children then the math works out the same.

Time to get down and dirty with the implementation details of SI scaling. I’m going to try and keep this discussion simple even though transformations in XSI are anything but simple. The local transform is chock full of buttons and sliders that let you modify scale orientation, pivots, constraints, neutral poses and a bunch of other stuff I’m too lazy to look up. So, I’m just going to gloss over all that stuff and pretend that our transformation is made up of a scale, a rotation and a translation. After all those are the main parameters animators deal with and they are the only ones that show up in the transform panel. (so I do have some justification for my simplification) You can think of all the other parameters as optional accessories that hang off the main transform.

The first thing to note is that in both schemes the local transform is defined exactly the same. SI scaling only kicks in when 3D objects are parented in a hierarchy. In both schemes our local matrix is just formed by converting our scaling, rotation and translations to matrices (using the standard 4×4 matrix formulas) and multiplying all three matrices together.

M = M x M x M
local scale rot trans

Now, here is where classical scaling really shines. To get a global matrix for a 3D object A which is parented under another 3D object B we simply multiply together the local matrix and the parent’s global matrix.

A = A x B
global local global

Nice and simple. If B has a parent C we expand this formula again. (Note: if an object doesn”t have any parents then the global matrix is the same as the local matrix)

A A x B x C x and so on...
global = local local local

SI scaling takes a different approach by constraining the scale factors to always happen around an object’s local axes. Therefore, shearing cannot occur by definition. So, what this means is that, when dealing with a hierarchy, all the scaling matrices are combined together first followed by all the rotation matrices and finally all the global translations.

One other thing to note is that SI scaling is not a simple matrix product (like classical scaling) since it requires us to handle translations in a slightly different manner. In SI scaling a global matrix is formed as follows.

A = A x B x A x B x AB
global scale scale rot rot trans

You can see how the in SI scaling the scale/rotation/translation components are combined separately. The only strange thing in this equation is the AB translation matrix and this is formed by taking the translation component of the following matrix product. (which is just a fancy way of getting the translation in parent space by transforming it by the parent’s local matrix)

Most users won’t need to concern themselves with SI scaling versus classical scaling especially if they are doing everything in XSI and just outputting rendered frames. However, I would still like to give you a practical example of where you might want to use classical scaling instead of SI scaling. In the example below I have created a brick wall by translating and rotating individual (identical) bricks and parenting them under a null. Now, if I want to squish the entire wall by scaling the (null) parent I will get very different results depending on whether I am using SI or classical scaling. In this situation classical scaling is more useful since we do not want the bricks to scale along their local axes. (which point in different directions)

The good news is that, in XSI, you can mix and match SI scaling and classical scaling to fit your needs. Perhaps you are more comfortable with classical scaling because you cut your teeth on a different 3D software package.

First, if you want to make classical scaling the default in XSI, there is a preference to activate classical scaling globally under File > Preferences > General > Use Classical Scaling for Newly Created Objects.

If however you just want to use classical scaling on a few objects you simply need to 1) select all the objects in your hierarchy 2) hit Ctrl+K to inspect their local transforms and 3) turn off “Hierarchical (Softimage) Scaling” parameter. (which is found under the “Scaling” tab)

If you are interested in learning more about SI scaling and transforms you might also want to also check out Michael Isner’s website where he explores SI scaling from a technical animator/TD perspective. He even has some nifty JScript sample code for dealing with SI scaling that you can incorporate into your own scripts.

Footnotes:

[1] In XSI there is actually a way to shear local transforms by using the scale orientation parameter which changes the axes about which scaling occurs. Oh the irony!

This entry was posted
on Monday, January 30th, 2006 at 10:10 pm and is filed under Modeling, User Interface.
You can follow any responses to this entry through the RSS 2.0 feed.
Both comments and pings are currently closed.

5 Responses to “What is Softimage Scaling Anyway?”

This is great as I had this happen to me just recently when I tried to scale some objects and could not get them all to scale under a parent the waI wanted. For the life of me I could not figure t out. Now it makes sense and it”s going to be of great benefit.

Thank you so much for this! Maybe it would be good idea to add this notion into XSI 6.0 Tips and Tricks DVD :)

I”ve been really long making ma hairs grey trying to figure out what is happening often when the answer was actually that easy. Article is nice, but all I undestand was that classical scaling is cool but it is too simple and inferior to SI scaling. So basically if you want to be hip, go and use SI scaling, it is nothing that your brain cells die in a accelerated mode but this way you can be cool and thats what counts :p
No really, I am missing the point here seems but that”s ok.
Thanks for the tip again!