Technical Animation Reel
*Responsible for all animation blueprint creation, upkeep, and optimization.
Feature Breakdown
-
Montages + State Machines
0:10
Using a layered blend, I was able to play one-off animation montages, called from Unreal gameplay abilities, without exiting the state machine. The base functionality of montages is to override the state machine, and then have to re-enter it from the entry point, but with a blended setup I was able to avoid that and maintain state while montages play.
This is a similar concept to the upper/lower body blending I’m doing, where one layer of the blend plays “on top” of the other, while that base layer is able to animate separately.
-
Pivoting
0:15
Using UE5’s new animation tools, I used the distance from the pivot point to drive the animation. This was especially helpful in Ultimate Rivals, where we never wanted to take control away from the player during base movement if at all possible. This setup makes use of the predicted pivot point based on the player’s free movement, and progresses through the animation as they get nearer to it.
Additionally, using sync markers and sync groups, I set up the one-off movement animations (like pivots) to blend out with the appropriate timing, in order to match the locomotion cycles and minimize feet sliding.
-
Retargeting
0:39
Unreal’s base skeleton settings are important for retargeting, but they don’t necessarily get you all of the way there when there are complicated movements on highly-varied characters. The ball-in-the-hand interaction was one of these, and required a lot of extra blueprint care to make sure it would appear to be properly held. The very-large and very-small characters are included to demonstrate the system working in spite of extreme conditions.
I used virtual bones mapping to the original animation, two bone IK nodes (which can move IK chains based on the end point of the chain), bone transforms, and more to achieve this result.
-
Play Rate Scaling
1:07
Another retargeting-adjacent technique that I employed was play rate scaling, to allow characters of different sizes to share locomotion animations without their feet sliding. This means that large characters animate slower, while small characters animate faster, in order to keep them moving the appropriate speed in-game while sharing animations.
There are other solutions to this, such as UE5’s stride warping, but it was important for us to maintain the silhouette of the characters as much as we could. So a large character animates at a slower play rate, rather than warping the animation to have them take smaller steps.
-
Pass Receives
1:22
As the ball approaches a player during a pass, the angle of the ball is checked in order to play the appropriate anticipation animation. Each directional anticipation animation has a different attach point for the ball, which the ball will begin to path towards once it gets close enough. As the ball makes contact with the player, the player transitions into their post-contact pass receive animation, with the ball smoothly transitioning because it has already arrived at the appropriate location.
All of this setup is being done on the upper body with a precise layered blend, so the character is able to move freely while it’s happening.
-
Loose Ball Pickup
1:53
For loose balls, I initially tried having similar anticipation animations to the pass receives when the ball got near, but since we have less guarantee that a contact will occur, it often felt like they were reaching out and missing.
To avoid this feeling, the attempted anticipation was scrapped, and characters only begin to move after contacting the ball. With this in mind, I set the character’s local ball attach point to the world location of the ball at the beginning of pickup, and then interpolate it back to the character’s local ball location. This keeps the ball at it’s world location for the moment of possession, and smooths the transition into the hands.