Best practice animating various movement gaits - Blendspaces or Animation BP States or ..?

Hello everyone,

I have been looking at various sample projects and video tutorials regarding character animation movement. Looking at how the different gaits (crouch, crouch walking, walking, jogging, running, …) are handled.

The two most often seen solutions are:

  1. Having States in the Animation BP for each gait and stance combo (Idle, Crouch, Crouch Walk, Walk, Jog, Run, etc).
  2. Using Blend Spaces for transitioning between idle, walk, jog, running, etc. where the Blend Space is fed speed and direction.

The problems I have had when working with blend spaces is that I try to use a mocap library which has information on the exact movement speeds for each gait. This is a problem because when you subdivide the Blend Space you get fixed offset values and those rarely match up with the character speed in the animation. I know I can just increase the number of divides along the speed axis but at some point it just feels weird/wrong. How do you manage the animations and blending in this case? Just find the closest matching marker and increase or decrease the play rate of the animation to sync?

My current solution that I am trying out is the first one listed, having multiple states in the animation bp, this enables me to sync the animation perfectly with the movement since no blending is happening. But the problem with this solution is that when I use a controller, I have to account for the input axis/actual speed compared to the desired speed of the current gait animation, and modify the play rate. It looks weird when the actual character movement speed is slow and the jog animation is being played in slow-motion. This problem is solved by the blend space used in solution 2 as it changes the animation based on the speed of the character instead of a desired gait variable.

How would you solve having mocap animations with specific speeds for the different gaits: blend spaces, modified play rates with multiple animation bp states or some other solution?

What I am trying to create is a “true first person camera” experience that works with multiplayer, where I can look around and the mesh animates (aim offset), like Star Citizen. I currently do not have aim offset to the sides, I only have up and down for the sake of simplicity. It would be nice to also be able to look to the sides while not moving, but I will look into that later. But right now, I am trying to get a really solid movement animation solution in place.

Small update:
I just found the “Snap to grid” checkbox when working with Blend Spaces.

Small update 2:
“Snap to grid” did not appear to have given me free rein to put my blend points where I want and have it work properly, it seems I have to put the animations on exact divisions for them to be respected.

Small update 3:
Seems that the more blend points I use the choppier the transition becomes. I tried putting down multiples of the same animation using different Rate Scale values, but the animation became choppy. The fewer points I use the better the result.

Update 4:
I found this great page, Unreal has several videos going over what they did for Paragon.