F.A.Q.

These're some frequently asked questions, so it might be beneficial to collect them here.

Here're some suggestions about issues & questions:

  • For an issue, it would be usually quite helpful to add the info of the OS & Unity version & Skele version that in use.
  • Check if you're using the latest Skele package; check it by watching if there're "Update" button in AssetStore window;
  • if an issue is hard to describe with text, then a very helpful method is to make a short full-screen video to slowly display how to reproduce it. ScreenToGif & CamStudio are both great free tools that can help make gif/avi that can be uploaded to Imgur.com or Youtube.

Compatibility

Compatibility: The latest Skele package is targeted for Unity5.3 and above; (There're incompatibility issues with Unity5.3.4p1 -> Unity5.3.5, so try avoiding using on these versions, and be sure to update Skele to v1.9.7p3 or above)

I get compilation errors when import the Skele package

It's a big chance that there is a name collision in the project.
You could check that by import Skele into an empty project and see if the error still persists.

Please be sure to put your classes in their own namespace, it's a bad practice to put class in global namespace.
A few 3rd-party plugins put classes in global namespace too. You could just notify its author, it's a minor modification in most cases.
e.g.:
(1) "Action", heard MANY cases about this one, it will collide with .Net library's Action delegate;
(2) "Options", not much, but some people had made this classes into global namespace too.

If all of these don't apply to your case, be sure to mail me and I'll fix it ASAP.


How to find out my Skele package version info

You can find out the current version info at the RELEASE file located at "Assets/Skele/ReleaseNotes_CAT.txt" in the project.

Tips to author animation

Here is an example of side flip animation gif I made.

side-flip gif

I had made the animation in a traditional way. (i.e.: no constraints, just manipulate joints directly)
The most important point is to insert multiple keyframes in the middle to smooth the motion and add details.
 
Here're also some tips:
1. if you're not familiar with animation authoring, use the "quaternion interpolation" instead of "euler interpolation", it ensures the rotation to go the shortest way, in most situation this is what people are trying to do;
2. Don't make a 360-degree rotation keyframe, animation engine might interpolate it in a unpleasant way sometimes, split it and add multiple keyframes instead.

quaternion1

You could also refer to the Unity manual on this:
It could be useful to manipulate animation curves directly sometime, after you get familiar with the curves and angles.
 
For better quality motion:
We added "constraints system" like in Blender to help animators make motions with better quality, please check the doc below.
Hope my answer can help you make the needed motions,
 
If you find something not clear enough yet, just tell me :)
 
 

I cannot add keyframe on model / My model snaps into 'curling pose'

curling

Unity AnimationView could directly edit on Generic/Legacy models, but doesn't support direct editing on Humanoid-rig models.

You could just fix that by duplicating the target humanoid model, and change the duplicate's rig-type to 'Generic', then you could make/edit clips on it.

Steps: (Ref the Rig-type manual)

  1. Click the .FBX model file in project view;
  2. Select the rig tab in inspector;
  3. Change "Animation type" from Humanoid to Generic;

You could also check on this post.

Q: But I need to use Humanoid clips with all my different models?

Of course, that's a common use case.

You could easily convert the Generic clips to Humanoid clips

http://www.tmpxyz.com/Skele/docs/84-utility/81-f-a-q#how-to-convert-generic-clip-to-humanoid-clip-i-want-to-make-a-huamnoid-clip-to-use-on-many-models

Q: I also want to edit some Humanoid clips I get from other animator from web / AssetStore?

Yes, that's another common use case.

You can convert Humanoid clips (with/without FBX file) to Generic clips with our toolset.

Dont forget, you can always convert it back to Humanoid after you finished the editing.

http://www.tmpxyz.com/Skele/docs/84-utility/81-f-a-q#how-to-modify-existing-humanoid-clips

 

Why is my rotation twisted when animated?

 
Put simply, it's because of math of interpolation.
There's no silver bullet of interpolation algorithm yet.
 
Such questions appear regularly, you can see that in main modeling applications like blender:
 
There're some methods to handle that:
(1) Change the interpolation from EulerAngles to Quaternion; (quaternion is more stable, but eulerAngles is more versatile)
(2) Add more keyframes in the middle; (This could usually guarantee solving the twist)

Why is my rotation twisted in exported clip?

Please check if the sample-rate of your original clip is lower than 30.

It seems that if the sample-rate of the imported clips is lower than 24, Unity will import the clips with sample-rate as 12.5; (checked on U5.3.4)

So, you should always keep your sample-rate above 30, keep it 60 if possible.

My model is not rigged/skinned yet...

Skele package works on skinned meshes, so it's required that you have your models rigged & skinned first.

If you're not familiar with the skinning skill, you could try this Adobe's free auto-rigger service, it automatically rigs your bipedal models.

It works well for most models, but you might have a few finger vertices wrongly assigned in some rare cases, but it's relatively easy to fix in Blender or other 3D-softwares.

I cannot find Skinned Mesh Renderer

In Unity5.1 or lower, double clicking on the model should bring you to the GameObject with SMR;

In Unity5.2 or higher, Unity introduces the cycle selection, which means clicking on same spot will make the selection to cycle among all the object under that spot. So you just need to keep clicking there until it turns out.

[Don't add a SMR by yourself. when Unity imports the model, it added the SMR component and fills it with needed data. If you add the SMR by yourself, the needed data will be missing and the SMR will NOT work ]

Oh, and before all of this, you should ensure that this model is skinned (in another word, it has bone data), non-skinned model will not have SMR component when imported, it will only have MeshFilter & MeshRenderer;

 

How to convert Generic clip to Humanoid clip? / I want to make a Huamnoid clip to use on many models.

  1. Export the Generic clip with DAE exporter into DAE archive;
  2. Change the rig type of the DAE archive to "Humanoid";
  3. Grab the clip from the DAE archive, apply it in your target model's animator controller;

Check the video below of how to use DAE exporter to export and convert rig type;

 

Be warned there's a catch:

Usually when you're done exporting there would be 1+x archives (1 for model, x for clips);

And if you need to convert them to Humanoid-rig, you just need to:

  1. select the archive for model;
  2. change its rig to "Humanoid";
  3. click "Update reference clips" button 

Example: After exporting we got 3 archives:

  • E.dae   <--- right here
  • This email address is being protected from spambots. You need JavaScript enabled to view it.
  • This email address is being protected from spambots. You need JavaScript enabled to view it.

The "Update reference clips" button is on the "E.dae" archive

If you only change the clip archive to humanoid rig and not click the "Update reference clip", the animation clip generated could be twisted somehow.

Export2

How to modify existing Humanoid clips?

Q:
I have an animation on humanoid rig model, and I want to modify some frames, how to do it?

A:
If you want to EDIT an Muscle clip ( Humanoid clip ) in Animation view, you need to convert it to Generic/Legacy clip first.

There're two methods:
1. if the Muscle clip has a FBX/DAE archive,
(0). Duplicate the archive (if you don't want to mess with the original one )
(1). change the import setting from Humanoid to Generic;
(2). and you get the Generic clip in the archive.
duplicate the clip from archive and edit it. 


2. if the Muscle clip has NO FBX/DAE archive, (which is common if you bought it from assetstore, only one .anim file)

Use the MuscleClipConverter to convert it to Generic
Watch this video:


You can also see this video for the three examples of clips conversion:
1. Generic => Humanoid
2. Humanoid A => Humanoid B
3. Humanoid => Generic





And after you're done editing, if you want to make it a Muscle clip, use the "DAE exporter" to export it to DAE archive, then make it Humanoid in Import setting.

P.S.:
If you want to learn more details on Muscle-Clip (Humanoid clip), you could check this official blog and see why it's designed this way.
BLOG: Mecanim Humanoid

No keyframe is added when I manipulate the joints

1) Check if the AnimationView's record-mode is turned on;

2) Please check if you've added Animation/Animator component manually, in 99% cases, you don't need to add them by yourself.

The safe & standard method is to have only ONE Animation/Animator component per one model, and put it on the topmost GameObject. 

AW(AnimationWindow) will make keyframes by tracking the changes on children transforms UNDER the gameObject with Animation/Animator component.

For example, if there're two Animators on your models, one on the Root, one on the RightShoulder, then if you make a clip for the rootObject, you will NOT be able to add keyframes for RightHand, as it will be intercepted by the Animator on RightShoulder.

The animation clip is READ-ONLY

Clips in archive file (FBX/DAE) are read-only
you could make a modifiable clip by duplicate it from archive, [be sure to set the rig-type of model to be GENERIC, you cannot modify HUMANOID rig-type clip]
(1) expand the archive file
(2) select the clip
(3) Ctrl+D to duplicate the clip, (duplicate the containing clip, not the archive file)
(4) Put the duplicated clip into the Animator component

I cannot get the vertex-animation MorphProc to work in another scene

The vertex-animation shape-keys are saved in the scene by default. To use it in other scenes, you need export them as prefab, check how to do it in the video below:

Steps: 

  1. Export as Prefab with the "Export prefab" button, this will create a prefab, and a directory containing mesh & anim-data;
  2. To use the vertex-animation in other scenes, just drag in the generated prefab.

How to make RootMotion?

There're many methods for making RootMotion, you could check this post.

I want to convert a Generic clip to Humanoid clip, but what to do with the bones that cannot be mapped to humanoid skeleton?

Humanoid setup has a little gotcha here:
You need to enable those bones which cannot be mapped to humanoid skeleton in the importer's mask setting, or the muscle clip WILL NOT contain curves for these bones

mask1 mask2

Known compatibility issue

1. Unity has some issues since Unity5.3.4 p1, rotation to negative angles might get twisted to rotate via inverse direction, and some issues for keyframes created via editor-script (we've workarounds currently);

Please help to vote for this issue so Unity could fix it earlier: https://issuetracker.unity3d.com/issues/animationwindow-cannot-set-keyframes-with-negative-angle-by-editor-script

2017/02/14 update: We've made fix in Skele 1.9.7 p3 to fix the keyframe "360-deg wild spin" issues, 

2016/09/20 Update: we've made some workaround in Skele 1.9.6 p3, it's okay on the versions listed below:

  • Unity5.3.0 -> Unity5.3.4f1, Unity5.3.6f1 -> newer
  • Unity5.4.0f3 -> newer

We recommend to use Skele on the Unity5.4.0f3 and newer, or Unity5.3.4f1 and earlier.

 

2. It's reported on Mac in U5.4.1/U5.4.2, that Unity might report wrong screen resolution, which would cause the GUI elements malfunction for several assets.

You could check the details explanations in this post:

https://forum.unity3d.com/threads/skele-character-animation-tools-cutscenes-and-animations-authoring-tools.240996/page-17#post-2828929 

 

Utilities

Hello World

This manual will explain the usage of some utilities contained in Skele package.

Jump to specific sub-manual by clicking the index on the right.


Share Skeleton

"Share Skeleton" utility is used to bind two skinned meshes onto one skeleton, if they've common skeleton hierarchy.

You could also refer to this old thread to find out what it's mean to: http://answers.unity3d.com/questions/44355/shared-skeleton-and-animation-state.html

For example, say we've a warrior model, and we want to wrap an arm-armor (from shoulder to hand) on the model, of course, it must be able to bend with the elbow, move with the shoulder.

If the base model of warrior and the arm-armor are both skinned with the same skeleton, then you could use the share-skeleton utility to bind the arm-armor onto the warrior model.

(Techniqually, they don't have to be skinned against same skeleton, just require all bones of armor have counterparts in the warrior model. And by 'counterpart', it means two bones' names match)

==========================================================

You could find a testing example scene at Assets/Skele/_ExampleScenes/ShareSkele.unity

As you can see in the image below, there're one robot model and a hat model, both are skinned with the same skeleton. Our target is to bind the hat on the head of the robot, so when robot moves around, the hat will follow.

shareSkele1

To archieve that, follow these steps:

  • Bring up the ShareSkeleEditor located at menu item of "Window/Skele/Share_Skeleton".
  • Fill the Main SMR field with the robot model's SkinnedMeshRenderer;
  • Fill the Extra SMR field with the hat model's SkinnedMeshRenderer;
  • Click the "Share_Skele" button and we're done;

shareSkele2

(Of course, an arm-armor or something that has multiple bones involved would be better to explain the usage)


Muscle Clip Converter

This utility is used to convert muscle clip to generic clip or legacy clip.

The main reason that we might need to convert humanoid clip to generic clip is that Unity Animation View doesn't support auto-add humanoid clip keyframes or update keyframes from the transform changes.

The secondary reason is that the humanoid clip cannot be recognized by 3D softwares like Blender/Maya/etc, so if we need to export humanoid clip, we need to convert it from "muscle space" to the traditional "bone space".

 

Background knowledge

Unity has three different animation types: Generic Humanoid Legacy

  • Humanoid clip (also called as Muscle clip) can only be applied on skeleton with specific structure, but have much benefits like retargetable clips, IK, etc.
  • Generic clip and Humanoid clip both use the Animator component with the benefits of state-machine and blend-tree, etc. Generic clip don't limit the skeleton hierarchy, and can work with any skinned mesh; but Generic clips are not retargetable like Humanoid clip. (There used to be 'retarget generic clip' on the Unity5 roadmap, not sure how it goes now)
  • Legacy is the deprecated format mainly used before Unity4, it uses the Animation component.

In case that some developers might be not very familiar with some important concepts of Unity Animations, we suggest read these docs:

Basic usage

muscleClipConvert1

Take these steps:

  • Bring up editor at MenuItem "Window/Skele/MuscleClipConverter";
  • Fill the Animator field with a Humanoid rig model;
  • Select target animation type (generic or legacy);
  • Open up the model's AnimationController, select the to-convert clip's state, make it default state;
  • Click the "Convert Animation" button, select the location and you get the converted clip;

Convert Humanoid RootMotion to Generic

RootMotionConvert

In order to convert RootMotion from Humanoid clip to Generic clip, we need to set the Conversion mode from 'Standard' to 'RootMotion'. 

This will bake the RootMotion on to the topmost transform of the model, and we'll auto-enable the RootMotion on the clip.

GOTCHA:

1. If a generic clip is enabled as RootMotion, the Animator's "Apply RootMotion" must be enabled for this clip to work as expected.

2. Be sure to set the Generic model's Root Node to None, in the (FBX/DAE) archive's inspector, or the root motion would act weird. Ref: https://docs.unity3d.com/Manual/RootMotion.html

 

 


Animation Compressor

This utility is used to greatly reduce keyframe numbers inside animation clips.

Reducing keyframes could effectively reduce memory usage of animation;

Compare the two images below, see how many keyframes have been stripped out with AnimationCompressor;

animCompressor1

animCompressor2 

=======================================================================================

The usage of Animation Compressor is very simple, take these steps:

  • Bring up the EditorWindow at the MenuItem "Window/Skele/Anim Compressor";
  • Drag the clip into the first field, click the "Execute" button, then it's done.

animCompressor3

The options in the editors are similar to the Unity Animation importer's options, you do not need to modify them usually, but if the compressed clip has lost too much quality, you could make the parameters smaller and try it again.

When would I need to use "Anim Compressor"?

Usually you might want to compress the clip after you perform an action of baking keys.

1. You need to bake clip when you convert a constraint-driven clip to the standard skeleton clip; (read this part in the Constraint System manual)

2. The Muscle Clip Converter would bake clip automatically when convert muscle clip to non-muscle clip;

Special thanks to the Mecanim.Dev from Unity, who helps most on this tool.


Anim Curve Prop Editor

AnimCurvePropEditor is designed to help the experienced users to mess with animation clip's transform path & properties directly. 

As the operations here have a big chance to corrupt clip file if used improperly, it's strongly recommended to backup the original clip before the usage;

Before we dive into the details, let's see some use-cases first:

Batch modify transform paths after merging clips

Fix single transform path after modifying hierarchy

 

Then, let's examine each feature of the Editor:

Batch Add Prefix

"Batch Add Prefix" is used to add prefix to the transform paths of many curves;

It takes several step to add prefix to a batch of curves:

  1. Select multiple properties in the Animation View;
  2. Fill the "Prefix" field with needed prefix text;
  3. Click "Apply Prefix" to make it take effect;

Note: the Animation View might not refresh immediately, poke the AnimationView to make it update;

curveProp1


Animation Baker 

AnimationBaker is the utility used to forcibly fill the interpolated space in clip with keyframes.  

You might wonder when this would be useful.

Please take a watch of this video:


We could bring up the Animation Baker via the MenuItem "Window/Skele/AnimationBaker";

AnimationBaker1

Here's the steps to use it:

  1. Click the "Add Root Entry" button to add a slot, then drag the animating model's topmost GameObject into it. (If you've multiple top-level models are animated in one clip together, add multiple entries and fill them all)
  2. Click the "Not baking" button to make it "baking";
  3. Switch to the Animation View, drag the timeline head on the timeline, if a transform is modified at that time position, then a keyframe will be added there for the transform.
  4. When you feel there're enough keyframes, click the "baking" button to toggle it off to "Not baking";
  5. [Optional] The result clip will have a lot of keyframes, if the size matters to you, you could use the Animation Compressor to compress this clip.

 RootMotion

What's RootMotion?

Put simply, RootMotion is driving the character's transform via animation. [ref]

Usually, we use scripts to move characters or use physx to push them around. However if there's some animation with big translation offset, it could cause the logic position and visual position to differ greatly.

RootMotion would use the animation's data to drive the character's logic position, hence keep the logic position in sync with the visual position.

Of course, everything has its own pro and cons. For example, you might have to pay extra effort to debug the control transition between script/physx/rootmotion.

==================================

There're many methods to make RootMotion in Unity. For example you could script RootMotion for "in-place" animations [ref]

Here we would show you:

1. How to make RootMotion for Generic-rig models with AnimationView;

2. How to make RootMotion for Humanoid-rig models with DAE Exporter;

The detailed steps are recorded in the video tutorial below:

It's also a common use-case that people might need to preserve the RootMotion data when convert Muscle-Clip to Generic-clip.

This video shows how to do it:

==========

NOTE1: Be sure to set the "Root Motion Node" to "<Root Transform>", or else the Root Motion might have some weird behaviour;

RootMotionNode

NOTE2: If you're working on RootMotion for generic animation, be sure to set the RootNode to <None>

RootMotionRootNode

 


 Constraints Automatic-Setup

We added this automatic-setup utility to help people setup the IK constraints within several clicks.

AutoConstraintSetup

The steps include:

  1. Open the editor via Menu "Window/Skele/SetupBipedConstraint";
  2. Drag the topmost GameObject into the 'Root' slot, the editor will automatically find out corresponding joints. [For generic-rig models, we will call the Unity's auto avatar mapper to find the joints] 
  3. Check the options to decide what groups of IK constraints are needed;
  4. Click the "Add Constraints" button to automatically add the constraints needed;