Answered

Animation doesn't work outside of Unity

Peter - Soxware Developer 11 months ago updated 11 months ago 1
Hi, @SoxwareInteractive

We have bought your tool "Animation Converter" to convert humanoid->generic animations.
During the process, we had encountered some issues and are wondering if buying "UMotion Pro" can fix it.

After the humanoid->generic animation conversion, the rotation curves on some bone transforms are broken into segments instead of a continuous curve. The yellow curve has several segments that jump from -180 to +180.

The original humanoid clip and the converted generic clip both played fine inside unity, but we exported the generic animation to FBX (using the official FBX exporter by Unity). And later opened them in MAX, and MAYA, that particular bone is flickering like crazy.

Is there anyway to fix it? Maybe some filters to auto fix -180 to +180 wrapping issue?

I have already tried AnimationCurve.SmoothTangents(), AnimationClip.EnsureQuaternionContinuity(); but that didn't fix the problem.

Thanks a lot in advance.

We are running into the exact problem. From humanoid -> generic, in Unity is ok as long as "Resample Curves" is used, but the animation doesn't work outside of Unity, since the keys in the converted animation are quaternion and not Euler interpolation.

Wondering if you have any suggestion,

Thanks!

Animation Converter Version:
Unity Version:
Answered

Hi,
thank you very much for your support request.

If the animation plays correctly in Unity, that means that the quaternion curves of the generic animation should be correct. The animation converter uses quaternion interpolation, as quaternions don't suffer from gimbal lock and thus work universally without introducing gimbal lock artifacts. The euler curves displayed in Unity's animation window are generated by Unity's animation window/Unity's animation api, not by the animation converter itself.


I'm not sure if Unity's FBX exporter generates it's euler curves on it's own or uses the curves of the animation window. Anyway it should work, if the animation plays correctly in Unity. Only exception: If some joints initial rotation of your character are not setup in a way to avoid gimbal lock, you might see gimbal lock situations on your character after the animation is exported to FBX (as FBX always has to use euler curves). In that case, the only thing you could do is to improve the rigging of your character.


My official product for exporting animations to FBX is UMotion Pro. The UMotion Pro workflow would be as following:

  1. Create a new UMotion Pro project file of type humanoid.
  2. Assign your humanoid character to the pose editor.
  3. Import the humanoid animation.
  4. Change the export settings to FBX. Use the "Update exisiting file" method and select your character as destination file. (It's also possible to export as a separate fbx file that only contains the animation, but I recommend the first method.)
  5. Export your animation. Your animation is now written into your character's FBX file.
  6. Import this FBX file into your external modeling application / engine.

Please note that if the issue you are seeing is introduced by gimbal lock due to a bad bone/joint setup, you would still get this issues. If you are interested in using UMotion Pro, you could send me a humanoid animation and the humanoid character, bundled in a *.unitypackage and I could try and see if the animation converts correctly to FBX. It's important to send it as a *.unitypackage, otherwise I'm not receiving all the settings related to your animation/character. You can send the file to me via the email support form.

Best regards,
Peter