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.
(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.
We have updated the Oodle Data Compression Integration for Unreal Engine 4 to now do multi-threaded encoding in UnrealPak.
ReplyDeleteThis 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.