Draco vs LZMA

From Verge3D Wiki
Jump to navigationJump to search

Here we discuss two compression methods used to minify glTF assets: Draco, the industry-leading algorithm and LZMA, the method used in Verge3D toolkit.

We're going to use Blender in our comparison, because it's the only package which comes with Draco compression available out of the box.

Case #1 - Ten low-poly Suzanne models

The first scene contains 10 Suzanne models. We did not shared meshes among these models, so for the exporter the scene appears like having 10 different geometry blocks. In total, there are approximately 10 000 triangles.

10suz blender.jpg

Here is what we've got by exporting it to the gltf+bin format.

10suz result.png

The results are quite shocking. Verge3D's native compression algorithm beats Draco by a factor of 10! Remember we had 10 models on our test scene and LZMA can handle this situation quite effectively.

Case #2 - One middle-poly Suzanne model

The second scene contains 1 middle-poly Suzanne model. In total, there are approximately 62 000 triangles.

1suz blender.jpg

The results are kinda different:

1suz result.png

Now Draco beats Verge3D, but the margin is not so big, approximately 20%.

Verdict

In typical scenarios LZMA and Draco have comparable compression levels, but... Draco applies compression with loss of quality. That means, that in some situations, you we'll be required to manually tweak attribute precisions which is not quite straightforward for non-coders. Check out the Draco params from the Blender glTF exporter:

Draco params.jpg

There are so-called "quantization" params which define quality of the exported attributes. Basically, higher values give better precision, while lower values give better compression ratio.

Contrary to that, LMZA applies lossless compression, means we don't strip any information from the original user meshes. As such there is no loss of precision or any additional settings to tweak the algorithm.