Answered

Humanoid to generic rotates 180 degrees

Elsiehar 2 years ago updated by Peter - Soxware Developer 1 year ago 16

Hello Peter,

When I convert humanoid to generic animations by duplicating the character and importing into generic project, it works but the animation is rotated 180 degrees around the Y axis.  See video - Screen Recording 1 31 2022 at 12 24 42 PM.mp4.  Do you know what could be causing this?

Also, If I include the face morphs in the both generic and humanoid projects it comes up with the following error.  Is there a way to get the face morphs into the generic project and still import the humanoid animations?  I have tried importing the face morphs into the generic file and then importing the humanoid without the morph's but this doesn't work.  I don't have any facial animations as yet but would like to do them in the generic project once I sort everything out if possible.

Image 1036

UMotion Version:
1.28
Unity Version:
2020.3.25f1

Answer

Answer
Answered

Hi,
thank you very much for your support request.

When I convert humanoid to generic animations by duplicating the character and importing into generic project, it works but the animation is rotated 180 degrees around the Y axis. See video - Screen Recording 1 31 2022 at 12 24 42 PM.mp4. Do you know what could be causing this?

Please compare the two UMotion projects with a version of your character not being assigned to the Unity timeline. So that we know if this issue is related to Unity timeline or not.

Are you sure you haven't added a custom 180° rotation to any of the root/hips bones (e.g. on the humanoid character but not on the generic version of it)? Outside of UMotion using Unity's regular inspector window, please compare the rotation values of your generic and humanoid character by starting from the hips bone and then continuing upwards in the hierarchy for each parent bone until you reach the root transform. Are there any rotation differences?

Btw. you can workaround this issue by adding a 180° rotation offset as an additive animation layer in your generic project.

Also, If I include the face morphs in the both generic and humanoid projects it comes up with the following error.

Blend shapes are added to a UMotion project by using "Custom Property Constraints". They can be added to any bone/transform in the UMotion project. If you copy an animation from one UMotion project to the other, you need to ensure that the custom property constraints are setup exactly the same way.

I think the reason why the message prints two empty quotes ("The constraints of "" are ...") is because it's indicating that there is a difference on the root transform. Please check if that is the case by going into config mode and compare the constraints window of the root transform between both your UMotion projects.

Best regards,

Peter

Answer
Answered

Hi,
thank you very much for your support request.

When I convert humanoid to generic animations by duplicating the character and importing into generic project, it works but the animation is rotated 180 degrees around the Y axis. See video - Screen Recording 1 31 2022 at 12 24 42 PM.mp4. Do you know what could be causing this?

Please compare the two UMotion projects with a version of your character not being assigned to the Unity timeline. So that we know if this issue is related to Unity timeline or not.

Are you sure you haven't added a custom 180° rotation to any of the root/hips bones (e.g. on the humanoid character but not on the generic version of it)? Outside of UMotion using Unity's regular inspector window, please compare the rotation values of your generic and humanoid character by starting from the hips bone and then continuing upwards in the hierarchy for each parent bone until you reach the root transform. Are there any rotation differences?

Btw. you can workaround this issue by adding a 180° rotation offset as an additive animation layer in your generic project.

Also, If I include the face morphs in the both generic and humanoid projects it comes up with the following error.

Blend shapes are added to a UMotion project by using "Custom Property Constraints". They can be added to any bone/transform in the UMotion project. If you copy an animation from one UMotion project to the other, you need to ensure that the custom property constraints are setup exactly the same way.

I think the reason why the message prints two empty quotes ("The constraints of "" are ...") is because it's indicating that there is a difference on the root transform. Please check if that is the case by going into config mode and compare the constraints window of the root transform between both your UMotion projects.

Best regards,

Peter

Thank you for the fast response.  The character is the correct way around when not added to the timeline - see screenshot below.

Both the generic and humanoid characters have a rotation of 180 degrees set.  I think it is a bug with the timeline.  I have just created a new animation track and added both the generic character and the animation track and it seems to work - Thank you.  I previously just changed the character and the track in the original humanoid timeline.  

With regard to the import of humanoid to generic project they appear to be the same.  The attached file (Humanoid constraints -in case I am looking at the wrong thing) shows the Constraints for the humanoid character - the generic look the same.  I also all I did was duplicate the character and changed the duplicate to generic without changing anything else, so they should be the same?

Thanks

Great to hear that the timeline problem is fixed.

With regard to the import of humanoid to generic project they appear to be the same. The attached file (Humanoid constraints -in case I am looking at the wrong thing) shows the Constraints for the humanoid character - the generic look the same. I also all I did was duplicate the character and changed the duplicate to generic without changing anything else, so they should be the same?

Hmm... I would need to take a closer look to give you further advice. Could you send me the following as a *.unitypackage: Your humanoid version of your character, your generic version of your character, the humanoid UMotion project (*.asset) and the generic UMotion project (*.asset). You can send the *.unitypackage to me via the email support form (or request a link to my dropbox if filesize exceeds the limits).

Best regards,
Peter

Thank you very much for sending me the requested files and sorry for the late reply. I've been rather busy the last few days.

The face morphs of the humanoid character are assigned to the head joint, while the face morphs of the generic project are assigned to the root transform. Make sure that both UMotion projects have the custom property constraints of the face morphs assigned to the same joint/transform. Then the import should work.

Let me know in case you need any further assistance.

Best regards,
Peter

Thanks Peter,

I am not sure how that happened as all I did is create a duplicate and change it to Generic.  I will get the character developer to have a look at it.

Sorry for the misunderstanding. This has nothing to do with the 3D model of the character itself. It has something to do with UMotion.

When you assign a character that has face morphs to UMotion for the first time, UMotion asks you if it should add custom property constraints to the project to control the morphs. For a humanoid project, the dialog looks like this:


And for a generic it looks like this:

My guess is, you used "Add to Head" on the humanoid project and "Add to Root" on the generic project. Generic has no information about which bone is a "head" bone (as generic can really be anything) so thus this option is not available.

Here is a super unofficial thing you could try (but be aware that there might be edge cases where this doesn't work):

  1. Duplicate your humanoid project file.
  2. Open the duplicated file with a text editor.
  3. Change the highlighted value from 1 to 0:
  4. Save the file and open it with UMotion. Your project should now be generic.

----

The "correct" way would be to edit your generic UMotion project in config mode. Remove the custom property constraints from the root transform and re-create them on the head joint (same as in the humanoid project). Make sure to use exactly the same settings.

Unfortunately there is no way to copy & paste constraints so this is a bit tedious.


I hope that clears it up for you.

Best regards,
Peter

Hello Peter,

I initially tried to change the Object from "DaughterHead" to head in config/constraints but as soon as I changed the object to just "head" the Property wouldn't allow me to select skinnedMeshRenderer.blendShape.open it would only show GameObject.IsActive as an option.  See screenshots below.

Before

Image 1225

After

Image 1226

I then tried deleting all the constraints and adding them again but it won't find the blendshapes at all - see screenshot below.

Image 1224

How do I recreate them as suggested?

Thank you

The value assigned to "Object:" should stay "DaughterHead". But location of the custom property constraint itself should be changed. Remove the custom property constraints from the "Daughter_Body_Generic" transform and re-create it at the same bone/transform where it is located in your humanoid project.


Hope this makes sense.

Best regards,
Peter

Hello Peter, I understand now and that worked. Thank you. I am so sorry but I am however still having trouble importing the animation file. I moved them to a couple of locations and it didn’t work. I then created a U-motion file for just the head and imported to that and it worked..yay and the blendshapes were attached to Daughter_Head) . See screenshot below

Image 1237

But when I moved “open” and “W” to “Daughter_Head” in the uMotion project for the entire character, I get the following messages (I didn’t do them all in case it didn’t work). I couldn’t figure out to export the log, is there a way to do that?

Image 1238

When I look at the hierarchy the Head controller is in a different location.

Image 1239

Image 1240

Is there a way to import the animation?  This is what it looks like when I open it in Unity.

Image 1241

Thanks

Great to hear that the first problem is solved!

When I look at the hierarchy the Head controller is in a different location.

You need to make sure your character's transform hierarchy matches the one of the animation you are trying to import. UMotion simply compares the paths and if they don't match it won't import the corresponding curves.

So one solution would be to move the head controller to the correct location (you need to do this in Unity's hierarchy window while the character is not assigned to the UMotion Pose Editor). Then either create a new UMotion project file and assign the character to it, or update the existing one (make sure to press Clean Up in config mode to remove the reference to the old location of the head controller).


Best regards,
Peter

Hello Peter,

I have tried moving the transforms so the hierarchy matches but it still won't import.  I think the problem is that it is telling me that "DaughterHead" doesn't exist (see first screenshot) but it does as this is what all the blendshapes are attached to (see second and third screenshot).

Image 1268

Image 1269

Image 1270

Also, by the way, when I moved the constraints, by creating new ones it
wouldn't let me change the default name "custom property" while the
Pose Editor was docked. As soon as I un-docked it I could re-name it
with no issues.

Thank you

Hi,

thank you very much for your support request.

Image 1271

This tells you that it is looking for a bone named "DaughterHead" under the root of your GameObject which it doesn't find because the "DaughterHead" in your case is at a different location in the hierarchy ".../neck/Daughter_Head_Generic/DaughterHead".

This warning is directly related to this:

You need to make sure your character's transform hierarchy matches the one of the animation you are trying to import. UMotion simply compares the paths and if they don't match it won't import the corresponding curves.

-----

Also, by the way, when I moved the constraints, by creating new ones it
wouldn't let me change the default name "custom property" while the
Pose Editor was docked. As soon as I un-docked it I could re-name it
with no issues.

Sounds like Unity GUI input focus got lost/stuck somehow. That's why undocking fixed it. Unfortunately, this is Unity internal stuff I do not have influence on.

Best regards,
Peter

Hello Peter,

I am so sorry I can't sort this.  I have moved "DaugherHead" to hips and I still get the same message that it can't find DaughterHead.

Image 1275

Do I need to change the root node from "None" to "Hips" in inspector as per below?   I did actually try this and it tried to import the file and then issued the bug message.

Image 1276

Also could the problem be that the characters is actually made up of two seperate fbx files, which are joined in the Heirarchy as per below?

Image 1277

I have moved "DaugherHead" to hips and I still get the same message that it can't find DaughterHead.


Because your DaughterHead bone/transform is now located at "hips/DaughterHead". But the animation clip you are importing is looking for it at the path "DaughterHead" (notice that there are no parents in the path). So you need to make it a child of your root GameObject (i.e. "Daughter_Body_Generic_Move_Head_controller"). Do you get what I mean?

The transform path is simply a description of where in the hierarchy a bone/transform is located. It works in a similar fashion to how file system paths work.

Please let me know if that works for you.

Best regards,
Peter

Yes, sorry for some reason I thought the hips were the root (not sure why).  I have moved the daughterhead and it try's to import but now I get the bug error.

Thanks

Which "bug error" are you referring to?

Best regards,
Peter