Orientation warping is an animation technique that is used in
Paragon. You can find more information about it here.
There are already a bunch of implementation methods provided by
Epic or SeanChen. None of them really suits our project, though. And I’ve eventually implemented orientation warping in a brand new way, which works brilliantly in our project.
You may wonder what on earth orientation warping is or why and when I should use this feature.
There are two types of locomotion style:
forward move and
sideway move(aka. strafe move). Orientation warping is typically used for
sideway move, which means that the character aims forward while moving in all directions. You can find more information about it here).
A naive but common implementation is simply applying a looping animation sequence for a certain range of moving directions:
Straightforward but effective. The main problem is that it always causes foot-sliding. To my surprise, I can still find it in some so-called modern games(yes, I mean
It naturally comes to my mind that I can use a
2-D Blend Space in UE4, or
Blend tree in Unity to achieve this feature.
And I have to admit, sometimes this method works pretty nice. But strange pose can still be found since it’s hard to control animation blending:
As can be seen from the image above, character legs get crossed with each other for some certain input:
This issue is even worse for stylized character because animation resource can vary dramatically in different moving directions.
Orientation warping solves this problem once and for all.
The main idea of this method is rotating the whole character first, so that foot-sliding is prevented. And then rotating the upper body to the front.
In this case, I can get a controllable and non foot-sliding character strafing pose.
In addition, orientation warping requires far less anim resources. In
Paragon, only 4-direction anim resources are required to produce a pretty nice locomotion effect.
An earlier implementation method proposed by Laurent Delayen can be found here.
And it seems that
Paragon simply use a blend space that handles one direction, an
AimOffset node that reverse-rotates the upper body, and a
rotate root bone node to prevent foot-sliding as well as rotate upper body back to forward:
This works, in price of a complex anim graph structure and many aim offset resources.
Moreover, this implementation has bad performance since an
AimOffset node is expensive!
This implementation method can be found in
Advanced Locomotion System V4:
Since this is a free project that is available on Unreal Marketplace. You can download this project and play with it. And I am pretty sure that most of you can be overwhelmed by its complexity. And btw, I hate Animation Layers.
The performance can also be a big issue. So it would be a better choice to considered this project as reference only.
This should be the most well-known orientation warping implementation method. For more information, check this out.
And SeanChen has already shared his or her implementation on Unreal Marketplace. You can play with these anim nodes and use them in your project.
Actually I’ve tried this method in our project at the very beginning. I’ve encountered several severe problems and as a result,I decided to implement our own orientation warping implementation method, which I will talk about later.
But it is much more valuable, in my opinion, to share those problems I just encountered using this method.
It looks nice in general. But sometimes it looks not smooth enough when switching from one direction to another direction.
Anim Graph looks like:
When active child index changes, animation blending can still happen. And moreover, a
Blend List node looks bad when blending interruption happens. You can use
Inertialization transition type to ease this problem(well, sometimes this problem can be aggravated).
This problem can be eased even more if
sync marker is properly used. But frankly speaking, it is hard to manage sync marker, especially when a blend-space is involved with sync groups.
It turned out that our animators loves how animation sequence play rate is handled inside a single blend space. It is smooth enough so that switching direction looks wonderful!
And we’ve integrate the bone modification feature into a
BlendSpacePlayer. To be more specific, we can rewrite
Since it is not possible for me to paste any relevant code here because of secrecy. But I believe that is simply enough—All you need to do is applying orientation warping to each sample pose, and then blend those poses together.
This method works perfectly! And eventually this method is adopted in our project!
It’s a pity that I cannot share more details(maybe later?). Go for Apex Legends Mobile now and check how this looks like!