Animation Compression Using The Compression Editor
The following information is valid for v1.0 of the compression settings.
We want to have assets that take the lowest amount of memory, but that animate at the highest possible quality.
Uncompressed, an animation contains a key for every frame in the animation and for each joint that has been exported. We usually want to reduce the amount of joints and keys to minimize the size. We have separate channels for rotation keys and position keys per joint.
When compressing an animation, the compression editor uses the RC.
The following section explains in a little bit of detail what happens when changing the values in the 'Preview Animation Compression Settings' panel.
Removing channels (position/rotation keys) completely
- The best savings we can have is by completely removing a joint from the animation.
- This can be done if the joint doesn't contribute much to the animation.
- Roughly, for the RC to know if a joint contributes to an animation it finds out how much it moves during the animation and compares it to the provided epsilon values. If it finds that it moves less than what the epsilon specifies it will remove the keys for the joint. Higher values for epsilons will remove more joints
- The values to tweak for this are 'Position Epsilon' for the position channel and 'Rotation Epsilon' for rotation channel. This means rotation and position keys are considered separately.
- 'Position Epsilon' and 'Rotation Epsilon' are global values for the whole animation.
- Additive animations have smaller movement so you'll need to use smaller values for the epsilons.
- This is an all or nothing process: Either the keys are all kept for a channel(position/orientation), or deleted.
Reducing the amount of keys within a channel
- The previous step has removed joints completely, we now want to reduce the number of keys each channel has, since at this point we have one key per frame.
- For this the RC uses the 'Compression' value. Higher values will remove more keys within a channel.
- Compression value is a global value so it will affect all joints the same by default (although we can still tweak it later on a per joint detail level).
The goal should be at this point to have an animation that takes as little as possible but looks good. Sometimes though, playing around with global values for a whole animation is not enough, and we will need to fix up individual joints that show choppy motion.
Individual Joint Setup
There are two panels (docked by default) that allow to tweak the compression settings for individual joints.
This gives some per joint control over the two previously explained compression steps.
Per joint control over the epsilons removal process
- For each joint, by default, the epsilon values are used to decide if they are removed or not.
- We can force a joint to be removed by setting 'Force Delete' on that joint. Position and Rotation channels will both be removed for the selected joints.
Per joint control over the compression value
- For each joint we can specify a multiplier that is applied to the 'Compression' value. By default this value is 1, so a joint uses the global 'Compression' value.