Blender: A Small Step Toward Sanity


We recently made a pull request #6113 that was just merged. It should help the Blender FBX Amature export problem for Avatars. It looks like the FBX export doesn’t do the right thing w.r.t. joint pre-rotations, (aka Maya Joint Orient). It stores them in the wrong place on export. Anyhow, this change has the same effect as swapping the fbx “Pre Rotation” and “Lcl Rotation” which, @Menithal had tried in a previous FBX Madness thread.

These avatar’s still won’t quite work correctly with IK and hand controllers, due to the creation of an empty “Armature” root bone, but it’s a small step in the right direction. But we are working on that and should have a fix soon.

I’m a bit worried that the Blender FBX importer and exporter doesn’t handle the Joint Orient property well at all. But maybe it’s not that big of a deal, except when transferring stuff between Maya and Blender.

Anyhow, Let us know if you encounter any issues.


I have to check this out when I get home:
From the code however it seems like a direct switch off pre and rotation values.

Again thanks for looking into this

But I honestly do think that just switching the pre rotations and the rotations is not the right direction, as the exact same bug can be replicated within Blender when importing a Mixami model without using the pre/ post rotations into blender. While by default it behaves as expected (2.75, the new 2.76 behaves oddly), Edit: and apparently in Cheetah3D as well.

In my later threads I even did a comparisons of the difference in rotation values. And they are off by a bit.

There has to be a more accurate answer, especially considering that Mixamo is able to apply their same animation sets onto Blender animated rigs.


Cool work
Please can you provide a video explaining how you import a fuze avatar into blender then export it from blender un changed back into Hifi working correctly.
Once I understand the work flow works correctly I shall spend some time making some avatars


I would say, if the problem is pinpointed that it need to be fixt in the fbx importer and exporter.

But mabye am wrong.


@Menithal - I’m not too familiar with the detail on this, but looking over these values:

Right Shoulder
P: "PreRotation", "Vector3D", "Vector", "",-70.1488928685856,-88.979431384796,178.678676366088
P: "Lcl Rotation", "Lcl Rotation", "", "A",109.851189176122,-91.0205625400723,-1.32127437500787

P: "PreRotation", "Vector3D", "Vector", "",2.27804863475665,-0.0247413215694183,-179.37807713654
P: "Lcl Rotation", "Lcl Rotation", "", "A",4.63874133094755,0.169534526627267,-179.640286266128

I’d be tempted to try zeroing out the Lcl rotations after the swap, as then would look like a sensible set of values. If all else is correct this should put the avatar in a t-pose.


They are floating points because they are penultimately converted from Quaternions (Blender naturally calculates everything with them ,and just shows them infront as degree vectors) so the values end up being odd to look at. Even so there seems very strange changes between rotation axises. And in anyway, they arent really meant to be read by humans :slight_smile:

But what is REALLY odd about them, is the fact that the legs, if, simply swapped work fine:. However Lcl rotation value is interpreted drastically different from how the Pre rotations are interpreted.

Unfortunately there is not much documentation on these differences from autodesk.


Great work @hyperlogic. There is one more thing, which maybe dos bring errors. If I set a rotation and after this read the rotation with MyAvatar.getjointRotation, I get different values.

{joint:joints.RightShoulder, rotation: {x:0.00004471950887818821, y:-0.000004222378720442066, z:-0.000013855306860932615}},
{joint:joints.RightShoulder, rotation: {x:79.67715454101562, y:-98.32688903808594, z:9.943785667419434}},

So it seems the gotten values includes the perotation? The rotation which I get for the same avatar in t-pose in cheetah3d is {84,86,189}.


That seems odd too because shouldnt the rotation values be quaternion in Hifi?


Sure finally I set it as quaternion. :smile:


my afternoons noodlings
firstly use 2.75 2.76 seems to make the blendshapes in the face exploode


exporting i got the most normal result using

that got me to this stage which is a huge improvement as mentioned till i pick up the hydras

thus but that’s mentioned as work in progress
so yay


Those hydras must be heavy :slight_smile:


It is fantastic, here is the Kate from the market imported in Blender 2.75, exported as fbx and brought again in hifi. I can’t believe it, but my poses work now also for this avatar, so fully new possibilities.


And so I have gotten the first hug in hifi, thanks Judas for your help by the adjusting of the pose. It is made again with the avatar exported from Blender and with the poseballs.


Seem like you mastered the arch joga move.

Anyway, So far it seems to work quite well. I just have to update the bones to be correctly oriented on my Nyanta Avatar.

Ill have to try how this effects animations on Entities later this week with bringing back my old teleporter platform.

I now did some test and I can confirm that the old “absolute value” skeletons are not anymore in-place, Forexample, my fennec avatar now works as I originally designed it.

So we can now officially say that you must model your Avatars in Absolute T pose as was discussed, waaay back for best animation results.
Although this means that the make human avatar work flow, must be revisited.


Yes, I’ll keep looking into this issue and perhaps submit a PR to the Blender project, if there’s a clear cut fix. But the more I look into this, the more I think that Blender, maybe, doesn’t support the basic Joint Orient feature from Maya. The same effect might be achieved by manipulating the bone head, tail and roll, but I need more investigation here.


Could you specify the joint orient feature? Not sure of the specifics on that but there is the ability to control the direction of the rolls, under term ‘recalculate roll’ and manual roll manipulation.


Well, for Blender the things are now much better, but I have gotten now the exported Avatar from Cheetah3d and again I see the avatar folding in hifi.


I can take a look, if you can share a link to the cheetah3d exported fbx, it would be helpful. thanks.


Gonna have to add quite alot of exceptions in the reader with this method. why not just check if PreRotations/Post Rotations do not have anything, and then switch LCL Rotations with Prerotations?


@hyperlogic, sure I can give the link, but I don’t own the full version cheetah3d. I have send my avatar to the developer of cheetah. And he has done the export for me. I don’t fully know, how he has imported it and with which parameters he has exported. So no clue, if you should now work at it. But have send you the link in IM.