Answered

Reference pose, bind pose and humanoid avatar

Anonymous 3 weeks ago updated by Peter - Soxware Developer 2 weeks ago 3

How exactly does the reference pose, bind pose and humanoid avatar interact (humanoid project)?

I definitely get different types of output depending on - for example - when I export 'update fbx' with an existing skeleton avatar and bindpose that matches the reference pose.

UMotion Version:
Unity Version:

Answer

Answer
Answered

Hi,
thank you very much for your support request.

To learn more about the humanoid avatar, please read Unity's blog post about the humanoid animation system: https://blogs.unity3d.com/2014/05/26/mecanim-humanoids/

It basically defines the T-Pose for each character and uses that as the reference pose for all the animation re-targeting. The less accurate the T-Pose of your humanoid avatar is, the more re-targeting error you are going to get.

Bind-pose is the pose that your character had in the 3D modeling application when the bones have been bound to the mesh (skinning). The reference pose is just used internally by UMotion (it is used as initial pose when an empty animation clip is created or by the IK Setup wizard to correctly create the IK rig). When you're animation has keys for all bones, none of these poses is used when the animation is exported.

To get good results when working with Unity's humanoid system, make sure that your character's avatar is setup correctly. Try use some animations (that are working well) to test if everything re-targets nicely. Then use that character for creating/editing your animations (in UMotion). When exporting to *.FBX, always export using "Update Existing File" to write the animation into the *.FBX of your character. This ensures that Unity imports the animation with the correct humanoid avatar.

And always remember: If you don't need animation re-targeting, don't use "humanoid" (but "generic" instead). Re-targeting adds additional complexity and thus issues that you can simply avoid when using "generic" instead. "Generic" also has better performance (on the CPU).

Please let me know in case you have any follow-up questions.

Best regards,
Peter

Answer
Answered

Hi,
thank you very much for your support request.

To learn more about the humanoid avatar, please read Unity's blog post about the humanoid animation system: https://blogs.unity3d.com/2014/05/26/mecanim-humanoids/

It basically defines the T-Pose for each character and uses that as the reference pose for all the animation re-targeting. The less accurate the T-Pose of your humanoid avatar is, the more re-targeting error you are going to get.

Bind-pose is the pose that your character had in the 3D modeling application when the bones have been bound to the mesh (skinning). The reference pose is just used internally by UMotion (it is used as initial pose when an empty animation clip is created or by the IK Setup wizard to correctly create the IK rig). When you're animation has keys for all bones, none of these poses is used when the animation is exported.

To get good results when working with Unity's humanoid system, make sure that your character's avatar is setup correctly. Try use some animations (that are working well) to test if everything re-targets nicely. Then use that character for creating/editing your animations (in UMotion). When exporting to *.FBX, always export using "Update Existing File" to write the animation into the *.FBX of your character. This ensures that Unity imports the animation with the correct humanoid avatar.

And always remember: If you don't need animation re-targeting, don't use "humanoid" (but "generic" instead). Re-targeting adds additional complexity and thus issues that you can simply avoid when using "generic" instead. "Generic" also has better performance (on the CPU).

Please let me know in case you have any follow-up questions.

Best regards,
Peter

Peter,

The bind pose umotion exports in FBX, is this based on the reference pose?

How do those bindposes change if youre using a humanoid vs generic umotion project?

I would prefer using generic, but I need to retarget humanoid input clips (the skeleton does not match). So the workflow I've been using is generic umotion project (matching skeleton to input clips) - export as generic - then set to humanoid on unity import.

I'm trying to minimize errors when unity is moving to muscle space. Currently the results I'm getting have a lot of defects.

"The bind pose umotion exports in FBX, is this based on the reference pose?"

When you export your animation into an existing *.FBX, the bind pose of the character that is inside the *.FBX is kept (and not changed by UMotion).

When exporting to a new *.FBX, UMotion adds all bones to the *.FBX (in the reference pose) but the bones are not bound to a mesh (because no mesh is added to the *.FBX).

"How do those bindposes change if youre using a humanoid vs generic umotion project?"

An *.FBX is always "generic" internally. It's the same no matter if your UMotion project is of type humanoid or generic. When you set the import settings of your *.FBX to "humanoid", Unity converts the *.FBX to a humanoid *.ANIM.

"I'm trying to minimize errors when unity is moving to muscle space. Currently the results I'm getting have a lot of defects."

If you get lots of defects, then your humanoid avatars are probably not setup correctly. Ensure that all bones are green and that they are in a good T-Stance. If you get foot sliding artifacts, enable Foot IK (in the Animator Controller).

(The previously linked blog post covers the Foot IK topic:  https://blogs.unity3d.com/2014/05/26/mecanim-humanoids/)

Best regards,
Peter