The Animation Compression Library just got even faster

Slowly but surely, the Animation Compression Library has now reached v1.2 along with an updated v0.3 Unreal Engine 4 plugin. The most notable changes in this release are as follow:

  • More compilers and architectures added to continuous integration
  • Accuracy bug fixes
  • Floating point sample rate support
  • Dramatically faster compression through the introduction of a compression level setting

TL;DR: Compared to UE 4.19.2, the ACL plugin compresses up to 1.7x smaller, is up to 3x more accurate, up to 158x faster to compress, and up to 7.5x faster to decompress (results may vary depending on the platform and data).

Note that UE 4.21 introduced changes that significantly sped up the compression with its Automatic Compression codec but I haven’t had the time to setup a new branch with it to measure.

UE 4 plugin support and progress

Now that ACL properly supports a floating point sample rate, the UE4 plugin has reached feature parity with the stock codecs.

As announced at the GDC 2019, work is ongoing to refactor the Unreal Engine to natively support animation compression plugins and is currently on track to land with UE 4.23. Once it does, the plugin will be updated once more, finally reaching v1.0 on the Unreal marketplace for free.

Lighting fast compression

One of the most common feedback I received from those that use ACL in the wild (both within UE4 and outside) was the desire for faster compression. The optimization algorithm is very aggressive and despite its impressive performance overall (as highlighted in prior releases), some clips with deep bone hierarchies could take a very long time to compress, prohibitively so.

In order to address this, a new compression level was introduced in the compression settings to better control how much time should be spent attempting to find an optimal bit rate. Higher levels take more time but yield a lower memory footprint. A total of five levels were introduced but the lowest three currently behave the same for now: Lowest, Low, Medium, High, Highest. The Highest level corresponds to what prior releases did by default. After carefully reviewing the impact of each level, a decision was made to make the default level be Medium instead. This translates in dramatically faster compression, identical accuracy, with a very small and acceptable increase in memory footprint. This should provide for a much better experience for animators during production. Once the game is ready to be released, the animations can easily and safely be recompressed with the Highest setting in order to squeeze out every byte.

In order to extract the following results, I compressed the Carnegie-Mellon University motion capture database, Paragon, and Fortnite in parallel with 4 threads using ACL standalone. Numbers in parenthesis represent the delta again Highest.

Compressed Size Highest High Medium
CMU 67.05 MB 68.85 MB (+2.7%) 71.01 MB (+5.9%)
Paragon 206.87 MB 211.81 MB (+2.4%) 218.58 MB (+5.7%)
Fortnite 491.79 MB 497.60 MB (+1.2%) 507.11 MB (+3.1%)
Compression Time Highest High Medium
CMU 24m 57.59s 11m 51.48s 6m 20.89s
Paragon 4h 55m 42.57s 1h 19m 36.01s 29m 21.65s
Fortnite 8h 13m 1.66s 2h 29m 59.37s 1h 3m 18.17s
Compression Speed Highest High Medium
CMU 977.36 KB/sec 2057.24 KB/sec (+2.1x) 3842.79 KB/sec (+3.9x)
Paragon 246.79 KB/sec 916.82 KB/sec (+3.7x) 2485.58 KB/sec (+10.1x)
Fortnite 613.56 KB/sec 2016.82 KB/sec (+3.3x) 4778.65 KB/sec (+7.8x)

And here are the default settings in action on the animations from Paragon with the ACL plugin inside UE4:

  ACL Plugin v0.3.0 ACL Plugin v0.2.0 UE v4.19.2
Compressed size 234.76 MB 226.09 MB 392.97 MB
Compression ratio 18.22 : 1 18.91 : 1 10.88 : 1
Compression time 30m 14.69s 6h 4m 18.21s 15h 10m 23.56s
Compression speed 2412.94 KB/sec 200.32 KB/sec 80.16 KB/sec
Max ACL error 0.8623 cm 0.8590 cm 0.8619 cm
Max UE4 error 0.8601 cm 0.8566 cm 0.6424 cm
ACL Error 99th percentile 0.0094 cm 0.0116 cm 0.0328 cm
Samples below ACL error threshold 99.19 % 98.85 % 84.88 %

The 99th percentile and the number of samples below the 0.01 cm error threshold are calculated by measuring the error of every bone at every sample in each of the 6558 animation clips. More details on how the error is measured can be found here.

In this new release, the decompression performance remains largely unchanged. It is worth noting that a month ago my Google Nexus 5X died abruptly and as such performance numbers will no longer be tracked on it. Instead, my new Google Pixel 3 will be used from here on out.

What’s next

The next release v1.3 currently scheduled for the Fall 2019 will aim to tackle commonly requested features:

  • Faster decompression in long clips by optimizing seeking
  • Multiple root transform support (e.g. rigid body simulation compression)
  • Scalar track support (e.g. float curves for blend shapes)
  • Faster compression in part by using multiple threads to compress a single clip (which will help the UE4 plugin a lot)

If you use ACL and would like to help prioritize the work I do, feel free to reach out and provide feedback or requests!