3/19/2018

Oodle Data Compression Integration for Unreal Engine 4

We have created an integration of Oodle Data Compression for Unreal Engine 4. You can now use Oodle's amazing Kraken, Leviathan, Mermaid and Selkie to compress your Unreal game data smaller and load it faster.

Once installed in your source tree, the Oodle Data Compression integration is transparent. Simply create compressed pak files the way you usually do, and instead of compressing with zlib they will be compressed with Oodle. At runtime, the engine automatically decodes with Oodle or zlib as specified in the pak.

Oodle can compress game data much smaller than zlib. Oodle also decodes faster than zlib. With less data to load from disk and faster decompression, you speed up data loading in two ways.

For example, on the ShooterGame sample game, the pak file sizes are :


ShooterGame-WindowsNoEditor.pak

uncompressed :       1,131,939,544 bytes

Unreal default zlib :  417,951,648   2.708 : 1

Oodle Kraken 4 :       372,845,225   3.036 : 1

Oodle Leviathan 8 :    330,963,205   3.420 : 1

Oodle Leviathan makes the ShooterGame pak file 87 MB smaller than the Unreal default zlib compression!

NOTE this is new and separate from the Oodle Network integration which has been in Unreal for some time. Oodle Network provides compression of network packets to reduce bandwidth in networked games.

The Oodle Data Compression integration is available for Unreal 4.18 and 4.19.

Oodle is an SDK for high performance lossless data compression. For more about Oodle, or licensing inquiries, visit the RAD Game Tools web site. This is my personal blog where I post supplemental material about Oodle.

(these sizes are from the actual Oodle integration in UE4, taking the ShooterGame content and exporting paks with different compression options)


Update June 19 2019 :

Here's another example on a large pak from Fortnite :


FortniteGame-WindowsClient.pak

uncompressed :   14,150,876,787 bytes

zlib 9       :    6,601,033,750 bytes

Oodle Mermaid :   5,878,738,118 bytes

Oodle Leviathan : 5,461,767,960 bytes

zlib and Oodle are both run with 256 KB chunks. Leviathan decodes roughly 3X faster than zlib.

On my Core(TM) i7-8750H zlib is roughly 300 MB/s to decode, Leviathan is 850 MB/s, Oodle Kraken is 1.5 GB/s , Mermaid and Selkie are even faster.

The special thing about Oodle Leviathan is that it gets very high compression levels while still being super fast to decode. Kraken, Mermaid and Selkie are even faster and give you options for different platforms and performance targets.

Note this test on the Fortnite pak was done just by compressing the uncompressed pak that comes with the game, applying 256 KB chunking. This is not quite the same as what you'd get from applying the compression in the Unreal pak file system, because there would also be chunking at the resource level.

1 comment:

cbloom said...

We have updated the Oodle Data Compression Integration for Unreal Engine 4 to now do multi-threaded encoding in UnrealPak.

This allows you to use the slower Oodle encode levels (such as Leviathan level 8) without a major impact on your game packaging time.

If you got an earlier version of the integration without async compression, contact RAD for an update.

old rants