Answered

Animate multiple humanoid characters at the same time?

Yokenstein 3 years ago updated by Peter - Soxware Developer 2 years ago 13
While it is possible to animate multiple 'generic' characters by placing them in a root empty gameobject, is it possible to do the same with humanoid characters? 

UMotion Version:
Unity Version:

Answer

Answer
Answered

Hi Shayan,

thank you very much for your support request.

For humanoid, it is not possible to animate two characters at the same time. It is only possible to animate one and preview the animation of other(s) at the same time using the sync feature.

Please check out this answer I gave to a similar question: https://support.soxware.com/en/communities/1/topics/160-how-animate-2-characters-at-the-same-time#comment-194

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

Best regards,
Peter

Answer
Answered

Hi Shayan,

thank you very much for your support request.

For humanoid, it is not possible to animate two characters at the same time. It is only possible to animate one and preview the animation of other(s) at the same time using the sync feature.

Please check out this answer I gave to a similar question: https://support.soxware.com/en/communities/1/topics/160-how-animate-2-characters-at-the-same-time#comment-194

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

Best regards,
Peter

Well, then I guess I will have to manually add in the IK controls. Is it possible to have the IK control helper window in generic projects? The helper window that contains the muscle control for head, hands/fingers and torso

Unfortunately the muscle control assistant is humanoid exclusive as muscles only exist in the humanoid animation format (see blog post https://blogs.unity3d.com/2014/05/26/mecanim-humanoids/). Furthermore, a generic model can be anything (from a solid object to an animal etc.), so such an assistant wouldn't really be possible as no assumptions about the skeleton of the 3D model can be made.

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

Best regards,
Peter

Joho, followup question coming right up!

Since I found quite a few entries regarding "synchronization" and multiple human editing (and am facing the same issue right now), what are your plans in regards to implementing multiple humanoid rigs at the same time in one UMotion project?

Because right now, it is a bit tedious:
We have to export animation A, open Animation A in Unity's antive Animator, change the Umotion Project, drag in Character B, check if character A and B synch up (and if they don't thanks to Char A:) clear Umotion, change UMotion Project, Add in Character A (not fogetting to export character B's animation and putting that now in the preview) and get to the right point, just to change an arm by a few degrees.

Obviously I know of the Timeline or Generic "workarounds" but given that one of the biggest strengths of Umotion is it's awesome IK, those don't really work.

If you have no plans in that regard, what would it take to change that?

Thanks for chiming into this discussion.


A humanoid animation clipcan only reference one humanoid character at a time. That's how Unity designed the format. This limitation does not apply for generic animation clips. So if you want to animate complex multi-character interactions, I highly recommend using a uber generic animator controller that has all (generic) characters as a child. This allows you to use IK between the characters and gives you full control over everything (like offsets of the characters to each other). If you're for precise interactions between characters, humanoid isn't the right choice anyway as it introduces small re-targeting errors that might be quite noticeable when doing some precise interactions.

If you're in the situation of creating a cut-scene or a movie sequence, using Unity Timeline is a very good choice. It allows you to sequence the whole cut-scene from animation clips, to audio, camera and VFX. With UMotion's Sync button, you can easily connect with Unity Timeline and add changes while previewing the whole sequence. The sync button also speeds up the "switching" process you've mentioned. Btw. UMotion has some easy to use API that you can use to completely automate the switching process. Please check out the "UMotion API" chapter in the manual for a description of all available methods.

So for me, there isn't really a point in having a "multiple humanoid characters at a time loaded into UMotion" mode as there are better options already available.

Best regards,
Peter

Can you do a small 3-5 min tutorial on how you would set up the multiple generic characters in Umotion? Also, would this method allow for individual timeline animation tracks, for each character? I imagine the exported animation would belong to the parent empty game object (under which all the generic characters are). So how would one put the animation tracks onto the characters timeline tracks, instead of the generic parent gameobject timeline track? The individual tracks are important, because they allow for override layers (useful for facial animation) Without that, things will be cumbersome

Can you do a small 3-5 min tutorial on how you would set up the multiple generic characters in Umotion?


The setup is really easy. Just make an empty game object the parent of your generic characters. Remove the animator components from your characters and add an animator to the parent empty game object. Create a new generic UMotion project and drag & drop the empty game object to the pose editor.

Also, would this method allow for individual timeline animation tracks, for each character?

Unfortunately this is not possible using this method. As the animator is a parent of both characters, it would be controlling both characters at the same time. This gives you the opportunity to control both characters (and the offsets to each other) from a single animation which is nice when doing heavy/precise interaction. But you trade that against the loss of flexibility when having multiple clips.

What you could do, is splitting the single "uber" clip into two separate clips again, but that would require advanced Unity editor scripting knowledge.

Best regards,
Peter

Since doing this using Humanoid is not possible due to Unity's backend, it would be nice if in the new update we have the ability to export each generic characters animation as a separate file using this generic parent object approach. That way we have more freedom to to change the offsets, rotation, add override tracks for facial animation in the timeline. Due to this limitation, for now I think I will have to stick with the timeline sync + umotion approach, but it would be really really useful if it can be done inside umotion. If anything, I think this will really enhance the package.

Thanks for the feedback. I've put this on my "ideas for the future" list.

Hello

What you could do, is splitting the single "uber" clip into two separate clips again, but that would require advanced Unity editor scripting knowledge

I'm faced with a situation where I have to do exactly this(Separating)

Since characters A and B interact with each other and are bound by multiple constraints, I had to create one animation clip, but I ended up having to split the uber animation clips for the characters.

The Uber clips themselves work fine with A and B animators respectively.
This is purely for clean-up.
As a separating method that I can do, the thing that came to my mind right now is
- After duplicating "uber" clips, manually select and remove the "missing" properties on the Animation tab displayed when each character animator is selected.
But it's very tedious and it seems hard to keep my sanity while working on it.
Unfortunately, I'm not much "Coder/Dev" myself.
So, Do you, by chance, know of a more efficient or automatic way/example?

Thank you.

So, Do you, by chance, know of a more efficient or automatic way/example?

Hi,
thanks for reaching out. Unfortunately I do not know of any existing tool or script that does this kind of separation. Please note that, if you also want to relocate the animator (from a uber empty game object to the underlying characters), you would also need to manually adjust all the transform paths of all animation curves. This can be done by opening the *.anim file in a text editor and manually correcting all transform paths that you find. This is also something that could be automated via a script, but as mentioned in my original post requires some coding knowledge.

And last but not least, you would need to be very careful to not mess up the position/rotation offsets the two characters have relative to each other. Otherwise your animations don't work well together anymore.

So if there is any possibility, my advice is to try to keep a single animation controlling all underlying characters at once. That's the most robust way to tackle this situation.

Best regards,
Peter

Of course, I would like to avoid the hassle and time consuming of splitting them up if possible.

But for my intended use, I have to split the animation clip for each character.

I have modified and used scripts made by other people for my own use for some automation. So it's not that I don't have any coding knowledge at all. So, if you already had a barebones script, I was going to modify the script to suit my purpose based on it. Unfortunately that's not the case.

But it doesn't matter that much.

After trying a few times, I think I can achieve what I want with a reasonable amount of work while staying sane.

Thank you very much for taking the time to give me advice.

Best regards,

So, if you already had a barebones script, I was going to modify the script to suit my purpose based on it. Unfortunately that's not the case.

Unfortunately I do not have such a script, I'm sorry.

After trying a few times, I think I can achieve what I want with a reasonable amount of work while staying sane.

That's great to hear! Don't hesitate to contact me in case you have any other questions.

Best regards,
Peter