(Feedback) Animation system could use some love

Coming from unity, I think that UE4 animation system, despite having multiple great features, could use some attention. Below is collection of issues I encountered mixed with feature requests.

  • (feature)No transition preview in unreal. In unity it is possible to preview what exactly your transition from animation A to animation B looks like. Editor also provides you curves that demonstrate position of character’s feet, so you can properly align transition between clips. In UE4 you’re operating blind, pretty much.
  • (problem)Animation sequence does not restart if immediatelly reentered. Let’s say you have locomotion blendspace and “kick” animation. As in “kick”<–>“locomotion”, connected by transitions both ways. The fun thing is, if kick animation transitions away to locomotion early BUT “locomotion–>kick” is still true, then “kick” animation won’t restart. Instead of that it’ll play till the end, all the while current state osccillates back and forth between locomotion and “kick” animations.
  • (feature)What’s up with constant need to insuert “time remaining ratio < 0.1” node? There should be a single node for “animation finished playing”.
  • (feature)Likewise, there should be some way to restart animation clip for state machine.
  • (feature)There’s no way to use montage from within animation state machine. Which is a pity, because ability to treat montage as animation clip would help. And no, animation composite doesn’t cut it.
  • (feature)likewise, it would be nice to have ability to use blendspace or statemachine within montage.
  • (feature)Within animation montage, it is not possible to blend bettween currently playing section of the montage and the beginning of arbitrary section.
  • (problem)As of 4.10.1, animation montage slot naming is broken. Slots always end up in “Default Group”, and default group ends up filled with duplicate names, which can’t be removed. I think someone messed up with oeprator== or whatever is its equivalent for animslot references, and that slot does not take group name into account, meaning that engine thinks that “SOmeothergroup.Slot” and “DefaultGroup.Slot” are the same. Also, anim slot manager fave very half-baked feeling to it.
  • (problem)As of 4.10.1, animation retargeting is broken for root motion when retargeting to different skeleton. Root motion (for root bone) is zeroed and ignored completely. Also see JIRA [UE-23809].
  • (feature/problem)It is not possible to disable root motion at montage level. YOu have to do it in blueprint OR animclip/blendspace level. It is extremely inconvenient. There should be a way to disable root motion at every level of animation system - clip, blendspace, montage, blueprint.
  • (problem)Animation retargeting system appears to be nearly unusable, which is definitely a step back from unity’s mecanim. Please note that this refers to animation retargeting only, mecanim has plenty of its own problems in other places. For example, based on the problem I experienced here, it appears that bone rotation is transferred by copying bone local rotation matrix? If that’s the case that’s not really a good way to do it. I think it would help an option of transferring rotation by first computing world-space delta rotation (quaternion) betwen bone current orientation and original orientation and then applying that delta rotation to bone in retargeted sekelton. That probably shouldn’t be a default behavior, but must be available as option. Recalculating limb movement based on IK could probably also work.
  • (feature/tall request)Would be nice to make animations easily exchangeable between characters in general. In Unity 5, animation controller can be freely swapped between different (humanoid) characters and although it occasionally results in weird position of limbs, generally it works well. This kind of behavior is a godsend for indies. Unreal currently appear to be following philosophy that “animation is inseparable part of character that is coupled to skeleton”. That is a bit too old school and is not very good for a small developer with limited budget, who’ll have to waste a lot of time recreating animations for different characters. As of now, retargeting would require either professional modeling package (cause blender can’t do it), expensive middleware or subscription to some service, with no general-purpose easily available solution. In case of UE4, it could make sense if animation was a bit “decoupled” from skeleton and same animation could be used on different skeletons that share similar topology while preserving root motion. That would require some serious R&D, unless it is limited to humanoid skeletons, but it might be worth considering in the long term.

First of all, thanks a lot for the suggestions. Second, I’ll try to evaluate each one the best that I can.

I’ll be asking in a few instances for you to justify a feature request with a use case. The reason being is that I’ve got to back up any feature request I enter into JIRA with a good reason. Please realize that in some of my responses, I am not meaning to sound dismissive. We have to evaluate all requests thoroughly before sending them to an engineer. Feel free to push back if you think any of my solutions or reasons don’t meet your expectations.

This is a great feature request and something I could see being rather useful. I’ve entered it as UE-24838 (State Machine Transition viewport preview)

In this instance, the problem is that States are not “instanced”, so to speak. For instance, you have State A and you decide to transition to State B, but the transition takes 0.2 seconds. If, during that 0.2 seconds, you decide to trigger a transition back to State A, then State A has not been re-initialized. For cases where you believe a transition could be interrupted, I’d suggest setting up a conduit that switches between two identical states. See the example below.


You could also add an additional transition directly between the Primary and Secondary states that would allow one to be interrupted while the other is still active.

SO, after writing all that and setting up the example, I felt that this solution feels like a bit of a hack(and maybe I am overthinking it), so I’ve reached out to one of our Engineers and one a Technical Animator for any additional solutions.

In my experience, I haven’t found this to be an issue and actually find the ability to fine tune when the transition triggers to be an advantage. The vast majority of situations you’d be starting a transition before the final frame of an animation. The very few cases where “time remaining ratio = 0” would be used likely won’t be worth the time to implement a standalone node.

This sounds very similar to what was discussed in your second point. If a state is completely blended out of, the next time it is triggered it will reinitialize, starting the animations within from the beginning (or, as of 4.11, you can set the animation’s Start Positions).

Are you having trouble using Slots within a State? If so, that is a bug, but I was just testing it and it appears to be working as expected. If you’re trying to override EVERY state in the state machine, you can set up the slot in the AnimGraph and run the State Machine through it there.

You can treat the graph inside each state as it’s own isolated AnimGraph.

Could you expand on this? I’m not seeing a situation where this would be necessary. State machines are isolated to the AnimGraph and are controlled by variables specific to an AnimationBlueprint.

Currently, that is not possible. You can blend into and out of the montage itself, but not between sections within the montage. From my understanding, switching sections is expected to be immediate. In the same message to a couple of Devs, I’ll be addressing this as well to see if that’s something we want to do.

A bug report for this issue is in our system, as noted by one of our staff in the AnswerHub you’ve linked to.

There are some known issues retargetting from Animation packs onto the Skeleton in our Template Projects. There were some modifications that made it into an updated version of our template Mannequin (main issues being that the root is rotated 90 degrees and the IK handles aren’t hooked up). These are being addressed. There is no known bug with the retargetting itself, only the example assets that we put out.

Having it available at every level of the animation system can cause a lot of issues when trying to track down root motion problems. If it’s available at every level and there’s an issue, then you’ve got a lot of digging ahead of you.

Can you provide a use case where it’d be useful to be able to control root motion on every level?

Please create a second custom character and retarget anims from your original character to test. As noted before, there are some problems with out mannequin. If you still see issues, please report this in Bug Reports on AnswerHub. It’ll be assigned to me and we’ll go from there.

This is the intended purpose of the retargetting options that you’ve discussed. I realize you’ve had some issues with it, but if it were working as you expected it to, what additional needs would that not address?

The point here was that while fine tuning is fine, if user keeps doing the same thing agan and again and again, it should probably be collapsed into one node. It doesn’t have to be “time remaining ration = 0”, just something that can be used without first dragging out two or three nodes every time.IIRC, setting “time remaining ratio” requires first to drag out that node, then drag out “float <=”, then setting value.

It is either the same or closely related feature.

I did run into issues with slots (duplicated slot names within groups), but what I would like to have is montage being treated as animation clip within statemachine while still being controlled by C++ code. Meaning I could setup attack chain as montage (with segment control and all), and then plug it into statemachine as if it were a clip.

Let’s say you’d want to have middle clip int the montage to be a blendspace. For example, dodge animation, controlled by user input. It is a fairly rare case, but still. Full state machine being treated as a clip in the montage might be overkilld, but blendspace could be useful.

In general, montage offer nicer degree of control compared to state machine, but it would be nice to have ability to mix both systems freely. Allowing this of thing to happen, however, would be a major pain on the programming side of things.

Also, it MIGHT make sense also to investigate Unity’s idea of Sub-State machines and see if those might be of use in UE4. Conduits are quite close to that, though.

The reason why this feature request exists is because I had a “continuous casting” kind of clip, where actor puts hand through motion into specific pose (clip #1), keeps them moving in that pose (clip #2) and then moves them through a motion away from it (clip #3). In that scenario it was done through montage and I quickly realized that I can’t blend away from middle of clip #2 into beginning of clip #3.
Might not be a common scenario, but it is definitely a feature worth having, IMO.

Same set of animation blendspaces used in two different animation blueprints. In first one it is used for root-motion based locomotion, and in second one it is used for traditional capsule-based movement.

That’s actual use case where I ran into problem, and I had to duplicate animations.

I"m not sure if that’ll cause significant issues, because there are only three levels of control total. Blueprint, Blendspace, and Clip. Currently, there’s no root motion control at blendspace level only and you can switch it off on blueprint and clip levels.

I initially experienced problems outlined in this thread:

While transferring animation from one non-ue skeleton to another (different) non-ue skeleton.
Also, in cases when model has different number of spine bones, second model often gets torn to pieces (upper torso ends on floor, etc).

In general, in this kind of system, I’d like to see :

  • some visual feedback (for example, if IK chains are used to retarget limbs, where do they start, where do they end),
  • some explanation about how system calculates this or that value. For example, how is root motion recalculated when transferred between one skeleton from another? Is it scaled by ration of leg length? What if I make a spider? Or a tri pod? Or if character starts walking on hands or does a cartwheel?
  • Have different options for things like hand retargeting. For example, for one character it would make sense to retarget hand animation via IK-chain transfer. For another you’d want to transfer local rotations.
  • It would probably be easier if I could operate (set options for retargeting) on LIMBS instead of individual BONES, and different retargeting options were selectable for individual animations, instead of being tied to skeleton.
  • (sorta contradicts previous point)Also, it would be nice if the system didn’t have to create additional animation files when animation is retargeted… unless those files are absolutely necessary. Unity 5 (sorry I keep mentioning it) treats humanoid animations interchangeable, and that kinda works well, because you can slap animation controller without changing it or retargeting it onto any character, even if you generate that character at runtime. It think it would be nice for UE4 to have similar degree of freedom.

That’s the rough idea.