Anim Component Layer Blending Update

We are planning to release a new option for layer blending in the anim component which will unlock additional blending functionality similar to that seen in Unity3D. There will now be an option to toggle the normalization of layers weights.

When the normalization of weights is on, the anim component system will behave the same as it is now. In this current system, the resulting animations from each layer are combined together based on their relative weights. All of these weights are normalized by their total sum. For example, if you have two animation layers, one with a weight of 1, the other with a weight of 0.5, the first layer ends up accounting for 2/3 of the output animation while the second accounts for 1/3.

As the output of this system is always a normalized combination of each weighted layer, the resulting animated values from the system can never exceed more than 100% of the max value of any of the animated keyframe values. In this system all additive and overwrite layers are simply combined together using a weighted sum. In addition, overwrite layers set the weights of all previous layers to 0, excluding them from the final calculation.

In engine version 1.53 however, the normalization of layers weights can be turned off (it will also be off by default). This enables a new layer blending algorithm which no longer normalizes layers weights by their total sum. Instead layer weights are clamped between 0 and 1.

Layers set to overwrite replace a percentage of the previous layers values based on their weight. If you only use overwrite layers, you can ensure that the system’s output animation never exceeds 100% of any given input animation as subsequent layers are always overwriting a portion of the previous layers values. Below is an example of overwrite layer blending:

In this new system additive layers allow you to add the output of a layer on top of previous layers, without replacing a portion of the previous layers output… This allows you to alter the output of an animation using an additive layer, without removing any of the animation values of previous layers. This can be really useful if you want to augment your animations with different poses (e.g adding a crouch pose to your walking animation). This does however mean the transforms of bones animated by additive layers can exceed more than 100% of the input curves and will therefore extra consideration must be taken when determining which animations you should additively blend together. An example of additive blending can be seen below:

Starting with the engine release 1.53, the anim component will use the new mode of layer blending without weight normalization by default. If your project requires the previous normalization method, you can set the normalizeWeights property to true when initializing your anim component. If you’re an editor user, a ‘Normalize Weights’ checkbox will be made available in the inspector panel of the anim component and will default to true for existing components. Newly created anim components will default to false.

You can follow the progress of the engine pull request here.

7 Likes