draco是什么?
Google大法好,这是该开源项目的地址:https://github.com/google/draco
官方描述:
Draco是用于压缩和解压缩3D几何网格和点云的库,旨在改善3D图形的存储和传输。
通俗地讲:
draco帮我们把3D模型中的.obj文件,编码压缩成draco的.drc文件,在之后的使用过程中,我们再用draco提供的API将.drc解码。
经测试,256MB的.obj在默认参数压缩的情况下,可压缩至6MB;而如果像我们平时用到的普通3D模型,几MB大小的.obj,压缩后就是几十几百KB的.drc。
准备
由于Windows对于开发者不友好,笔者强烈推荐Windows用户安装虚拟机,使用Ubuntu进行下面的cmake和make等操作。
Mac用户和Linux用户请略过。
- VirtualBox下载:https://www.virtualbox.org/wiki/Downloads
- Ubuntu下载:http://cn.ubuntu.com/download/
- VirtualBox设置共享文件夹:参考、疑难解决
下载源码
安装git
打开终端,安装git。
clone
git安装完成后,使用命令git clone https://github.com/google/draco.git
下载源码。
编译
为了获得编码所使用的draco_encoder文件、和解码所使用的draco_decoder文件,需要cmake和make这两个步骤。
cmake
进入刚才新建的文件夹,这时我们可以看到名为draco的文件夹了,这就是这个开源项目的源码,右键该文件夹,然后选择“在终端打开”。
执行cmake
后发现,就像上面的git一样,Ubuntu还没有安装cmake,按照提示安装即可。
执行cmake ./
你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。
CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。
上面我们可以直接cmake是因为draco文件夹中已经内置了CMakeLists.txt。
make
这里很简单,直接执行make
,然后等待它完成。
此时进入draco文件夹,可以看到我们已经生成draco_encoder、draco_decoder文件了。
测试
继上一篇,现在我们已经得到了draco_encoder、draco_decoder,并且该项目也为我们准备了一些测试数据,就在testdata文件夹中。
draco_encoder可以将.obj或.ply编码压缩成.drc,我们就先拿测试数据中的bun_zipper.ply开刀。
依然在draco_encoder的外层文件夹draco,右键后选择“在终端打开”,执行命令./draco_encoder -i testdata/bun_zipper.ply -o bunny.drc
见到saved就说明压缩成功了,draco文件夹下已经可以找到bunny.drc,大小为82KB,而压缩前为3MB。
参数配置
压缩参数有两个:
- 压缩率:用cl表示,10为最大化压缩,1为最低档压缩。
- quantization bits(量化位?):用qp表示,数值越小输出文件越小,模型效果越差。推荐使用默认配置。
可以看到在上一步压缩测试对象的时候,draco默认使用了参数 cl:7、qp:14。
现在我们自己动手:
- 当参数为 cl:10 时:
执行./draco_encoder -i testdata/bun_zipper.ply -o bunny_cl10.drc -cl 10
- 当参数为 cl:10、qp:12 时:
执行./draco_encoder -i testdata/bun_zipper.ply -o bunny_qp12_cl10.drc -qp 12 -cl 10
测试不同数值的cl、qp参数,输出文件的大小如下表:
bunny.drc | cl = 1 | cl = 7 | cl = 10 |
---|---|---|---|
qp = 12 | 95KB | 57KB | 53KB |
qp = 14 | 121KB | 默认 82KB | 推荐 76KB |
cl参数的值越高,压缩率越高,压缩后文件体积越小,但在解码时更为耗时,因此需要对cl参数的取值做一个权衡。
降低qp参数的值虽然能够缩小输出文件,但降多了会对复杂模型的效果有较大影响,因此推荐尝试性地使用。
压缩obj
我准备了一个obj文件,名为tttttt.obj,大小为256MB,放在draco文件夹中,执行./draco_encoder -i tttttt.obj -o tttttt_cl10.drc -cl 10
压缩后的drc大小为5.7MB。