Document Summary: Overview of the Animation Compression system in Unreal Engine 3.
Document Changelog: 10/19/2010 - Updated by Jeff Wilson.
Animation compression is utilized in Unreal Engine 3 in order to reduce the amount of memory skeletal animation data takes up when used in-game. This can be achieved in several ways:
A key improvement of the animation compression in Unreal Engine 3 over previous versions of the engine is that compressing animation does not destroy the raw (uncompressed) animation data. The raw data is stored alongside the compressed data, giving artists full latitude to quickly experiment with various compression schemes and parameters without having to reimport the animation data.
When an animation is imported into the engine for the first time, the animation is not compressed. This allows artists who are authoring animation to quickly iterate on bringing motion into the engine and seeing how it looks, without having to worry about any potential artifcating introduced by compression.
Each time an animation sequence is compressed, the compression settings are stored with the sequence so that animation can easily be recompressed in bulk when, for example, a new compression algorithm comes online. Animation is automatically recompressed when certain animation editing operations occur (for example, when an animation is reimported, when a track is deleted from a set, etc).
- Removing Keys - Many animations have smoothly varying motions containing keys that can be removed without significantly affecting the overall shape of the motion. When exporting motion from an animation authoring package, the animation will often be sampled at a high rate (e.g. 30 keys/sec), even if the motion is relatively smooth and unvaried.
- Reducing the Size of Each Individual Key - A raw animation key is stored as a rotation and translation per bone, where the rotation and translation are represented with floating point numbers. Depending on the range of values taken on by these floating point numbers, the amount of storage consumed by each number can be reduced without significant loss of precision.
- Higher Order Techniques (Curve Fitting) - Instead of storing a motion as discretely sampled keys, the motion could be stored as a function and then sampled during playback. Compression 'occurs' when the internal representation of the function consumes less memory than storing the keys directly. The trick with curve fitting is finding functions 1) that are a close approximation of the input motion; and 2) that can be sampled efficiently at runtime. Note: UE3 does not currently perform any curve fitting.
Animation Compression Topics
- Animation Compression Algorithms
- An overview of animation compression algorithms provided in Unreal Engine 3.
- Animation Compression Dialog
- Overview of the Animation Compression Dialog in the AnimSet Editor.