ref:
https://github.com/google/draco
https://codelabs.developers.google.com/codelabs/draco-3d/index.html#6
Draco
Draco 是一个用于编码压缩和解压缩 3D 几何网格和点云的库,从而改进 3D 图形的存储和传输
该代码支持压
缩点、连接信息、纹理坐标、颜色信息、法线以及与几何相关的任何其他通用属性
数据压缩/编码工具安装
使用 Draco 的编码工具进行压缩编码:因为是基于 C++的,需要使用 cmake 编译,直接在 Linux 中方便些
git clone https://github.com/google/draco.git
cd draco-master
mkdir build
cd build
cmake ../
make
数据编码命令:
./draco_encoder -point_cloud -i /opt/point_cloud_data/test2.ply -o /opt/point_cloud_data/test2.drc -qp 12 -cl 8
编码器参数说明(影像压缩文件的大小和模型加载视觉质量):
-qp
:默认值 11,这 是一种减小3D模型数据大小的主要策略之一,是指将模型顶点位置的精确浮点数值转换为较为粗略的离散整数值。这个转换过程被称为"量化",在这里使用的 12位量化,意味着每个坐标值都会被映射到0到4095(2的12次方减1)之间的整数,这相当于在一个均匀的3D网格中对顶点位置进行取样。原始的顶点位置信息通常是用32位浮点数表示的,而量化为12位整数后,存储需求减少了大约2/3,能显著减少模型数据的大小。
然而,这并不是毫无代价的。量化过程由于金字塔般的信息损失会导致模型的逼真程度降低,可能出现顶点位置不精确,模型表面粗糙等问题。因此,在选择合适的量化比特数时,需要在减小文件大小和保持模型质量之间找到一个平衡。默认的11位量化提供了一个权衡点,而12位量化则提供了更高精度的位置数据,但牺牲了一些压缩效率(越小压缩效果越明显)
-cl
:模型的压缩率(压缩级别),设置 10 的压缩程度最高,但解压速度最差,吗,默认值为 7,范围 0-10
-point_cloud
:因为与3D模型(通常以网格的形式存在)不同,点云数据不包含任何关于这些点如何相连或组合成物体表面的信息,所以和压缩其他三维数据还有点区别,需要使用这个参数,指定了-point_cloud参数,那么无论你的输入文件是否包含连接信息(即网格),draco_encoder都会忽略这些连接信息,只编码文件中的点的位置信息
遇到的问题:(参数位置。。被官方文档坑了。还有网上下的一个数据的问题)
压缩前后比对:
700M->30M
200M->20M
three 加载:
这里遇到一个奇怪的问题:THREE.DRACOLoader: Unexpected geometry type
draco 解码器版本与 three 版本没对应。。。得去当前包下去考 draco 文件
简单的加载和顶点着色不难,根据打印的信息 buffergeomtry构建点模型即可
这里加载测试两份数据一份大(700M->30M) 的一份小(200M->20M)的
(200M->20M)70 帧左右,卡几秒解压
这个 700 多 M 的加载时解码会卡半分钟左右,帧数 20 多