"Warning: Non-Orthogonal Matrix Support" message appears when exporting CAT rig from 3ds Max

harriet8GAP7
Explorer
Explorer

"Warning: Non-Orthogonal Matrix Support" message appears when exporting CAT rig from 3ds Max

harriet8GAP7
Explorer
Explorer

Hi! I have a problem with the "Warning: Non-Orthogonal Matrix Support" message appearing when exporting a CAT rig from 3ds Max to .fbx. I understand that this is because I have CAT Bones that have been non-uniformly scaled. I have googled the crap out of this and come across many possible solutions that didn't help me, but the most helpful has been https://knowledge.autodesk.com/support/3ds-max/troubleshooting/caas/sfdcarticles/sfdcarticles/Warnin... . From that support page I have downloaded the script Fix_CAT_BoneScale.ms and have used it as directed and have managed to successfully reduce the number of non-uniformly scaled bones down from ten bones to only four. But four bones are still giving me errors - two neck bones, one spine bone and the head bone. I have tried, as step 6 in the support document suggests, to run the script on each bone within the rig from the highest bone within the hierarchy, but it still doesn't fix those four bones. Strangely, the spine bone and the head both actually have scales of 100, 100, 100 but are throwing up errors anyway. As for the two neck bones, they do have non-uniform scales such as 100, 99.996, 100.004, and if I try to manually enter a scale of 100, it just jumps back to the previous value. Screenshots and max file are attached.

0 Likes
Reply
542 Views
4 Replies
Replies (4)

leeminardi
Mentor
Mentor

First off, I do not have a fix.  I did do a little investigation work.  I wrote two scripts.  The first I call transform_checker.

m = $.transform
x = m.row1
y = m.row2
z = m.row3
p = m.pos
format "\nlenghts x = %,  y = %,  z = %" (length x) (length y) (length z)
format "\nangles xy = %,  yz = %,  zx = %" (acos (dot x y)) (acos (dot y z)) (acos (dot z x))

It outputs the length for each axis of the selected object and the angles between principal axes.  For Cat_Neck001 it looks like this:

lenghts x = 1.0,  y = 1.0,  z = 1.0OK

angles xy = 89.998,  yz = 89.9961,  zx = 89.9995OK

This leads me to believe that the problem is less a scaling problem and more that the primary axes are not perpendicular.  The precision of max is at the most 7 significant digits.   After some analysis I've come to the conclusion that about 6 are carried in an object's matrix (e.g., zx = 89.9995).

I wrote the following script to be a "matrix fixer".

m = $.transform
x = m.row1
y = m.row2
z = m.row3
p = m.pos
xn = normalize(x)
yn = normalize(cross z x)
zn = normalize(cross x yn)
mnew = (matrix3 xn yn zn p)
format "\nOld matrix = %" m
format "\nNew matrix = %" mnew
format "\nangles new matrix xy = %,  yz = %,  zx = %" (acos (dot xn yn)) (acos (dot yn zn)) (acos (dot zn xn))
$.transform = mnew

 Although the new matrix mnew is an orthogonal matrix with principal angles of 90°, I could not determine how to get Cat_Neck001 to accept the new values.

Interestingly, I create a box with the default orthogonal matrix and used a Substitute modifier to replace the Neck object.  In doing so the box took on the non-orthogonal qualities of the Neck object. The chain of bones seems to lock the matrix. 

I then totally unlinked Neck from the bone chain but still could not edit its transform.   

lee.minardi

harriet8GAP7
Explorer
Explorer

Thank you for your investigating, I really appreciate it, and I thank you on behalf of my daughter who made the cat. That is interesting that the rotations of those neck bones are also non-uniform. It sounds like no script is going to be able to fix them, however my daughter was able to send the max file to her lecturer who fixed the rig using XForm, and it is now able to be exported to .fbx and imported to Unity. However she lost her animation work and is now redoing that.

0 Likes

domo.spaji
Advisor
Advisor

She shouldn't lost her animation.

That spine bones aren't animatable by default, more precisely, by default dont have PRS controller and can't have "bad keys"

Can inherit some bad transforms from hub parent though (pelvis and ribcage)

 

In Setup mode neither bone have PRS controller...

That's why you cant change existing values

Position and rotation are always 0 and scale 100 (well, should be)

0 Likes

domo.spaji
Advisor
Advisor
That all is for default mode, in non default mode all values can be changed "normally"
0 Likes