What is Softimage Scaling Anyway?
January 30th, 2006 by Brent McPherson - Viewed 20572 times -
http://www.softimageblog.com/archives/84




and from isner.com:


*Visualizing Softimage Scaling Transforms*

So the next algorithm we are going to look at is the default in XSI, built
for the purpose of defeating shearing distortion problems.
First lets start with the algorithm:



*Scale Change Matrix  = Child Scale Matrix  * Parent Scale MatrixRotation
Change Matrix  = Child Rotation Matrix  *  Parent Rotation
MatrixTranslation Change Matrix = Child Translation Vector * Parent Matrix
(full SRT)*

*Global Matrix of Child = Scale Change Matrix * Rotation Change Matrix *
Translation Vector (Extracted from Translation Change Matrix)*

as a  simpler set of instructions:

1) Get the difference between the Parent and Child's scaling
2) Get the difference between the Parent and Child's rotations
3) Multiply the translation vector by the full Parent Matrix ie (place,
rotate and scale the start of the stick in the space of the Parent)
4) Place the Scale and Rotations from step 1 at the end of that vector.

In diagram form:



So you can see the end result is almost identical to Classical Scaling.  In
fact the result is exactly the same expect for when you have non-uniform
scaling.  If you ever needed to mimic or break down this behavior yourself
in scripting, here's a function that does it.  It could probably be better
optimized, but I kept it simple for legibility:

/*--------------------------------
Softimage Transform Multiply
--------------------------------*/
function SoftTransMul(inTrans1, inTrans2){

var scale1 = XSIMath.CreateVector3();
var scale2 = XSIMath.CreateVector3();
var rot1 = XSIMath.CreateVector3();
var rot2 = XSIMath.CreateVector3();
var trans1 = XSIMath.CreateVector3();

var scaleChange = XSIMath.CreateVector3();
var rotChange = XSIMath.CreateVector3();

var S1 = XSIMath.CreateTransform();
var R1 = XSIMath.CreateTransform();
var S2 = XSIMath.CreateTransform();
var R2 = XSIMath.CreateTransform();

inTrans1.GetScaling(scale1);
inTrans1.GetRotationXYZAngles(rot1);
S1.SetScaling(scale1);
R1.SetRotationFromXYZAngles(rot1);

inTrans2.GetScaling(scale2);
inTrans2.GetRotationXYZAngles(rot2);
S2.SetScaling(scale2);
R2.SetRotationFromXYZAngles(rot2);

// Get result of multiplying scale + rot
S1.MulInPlace(S2);
R1.MulInPlace(R2);

// Get the position result from the matrices multiplied

inTrans1.GetTranslation(trans1);
trans1.MulByTransformationInPlace(inTrans2);

// Bring it all together
var resultTrans = XSIMath.CreateTransform();
resultTrans.MulInPlace(S1);
resultTrans.MulInPlace(R1);
resultTrans.SetTranslation(trans1);

return resultTrans;
}

//------------------------------------------------------

So the next thing to look at is how these transforms cluster together in
hierarchies of objects.

On Tue, Oct 25, 2016 at 12:55 PM, Jeremie Passerin <[email protected]>
wrote:

> Hey guys,
>
>
> Anyone knows if there is a backup somewhere of Michael Inser old Softimage
> Website ?
> He had a couple of interesting pages including one where he was explaining
> the way hierarchy scaling works in Softimage.
> Working in Maya now, I'm trying to fight some shearing on my objects, and
> I think I need to understand the core difference of the way scale is
> treated in parenting in Maya vs Softimage.
>
> Thanks,
> Jeremie
>
> ------
> Softimage Mailing List.
> To unsubscribe, send a mail to [email protected]
> with "unsubscribe" in the subject, and reply to confirm.
>
------
Softimage Mailing List.
To unsubscribe, send a mail to [email protected] with 
"unsubscribe" in the subject, and reply to confirm.

Reply via email to