Draco 压缩一篇讲透:从参数到验证
【免费下载链接】dracoDraco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.项目地址: https://gitcode.com/gh_mirrors/draco1/draco
Draco 压缩 3D 网格与点云,testdata 里一个 11 KB 的网格编码后仅 1.1 KB,约为原来十分之一。下文讲各场景该改哪些参数、最容易踩的坑在哪、以及如何验证改动生效。
⚙️ 不同场景下 Draco 压缩该改什么
文件大小与外观的取舍在量化位
最容易忽略的是:-cl(压缩级别)默认 7,范围 0–10,10 压缩最狠但解码最慢,0 反过来;真正决定文件大小和视觉偏差的往往是位置量化位,默认 11,多数项目照默认走"肉眼看不出差别"。设 0 则完全不做量化,文件会明显变大。
默认值集中定义在src/draco/compression/draco_compression_options.h,命令行入口在src/draco/tools/(draco_encoder)。
验证标准:对同一输入分别用cl10和cl3编码,如果 cl10 产物明显更小且解码耗时明显变长,说明参数链路生效了。仓库里现成的对照:testdata/test_nm.obj约 11 KB,test_nm.obj.edgebreaker.cl10.2.2.drc约 1.1 KB,sequential/cl3 版本约 1.6 KB。
编码测试用的示例模型
移动端和 Web 解码:两个开关决定速度
最容易忽略的不是算法,是内存分配方式。JavaScript 解码器默认按动态内存构建,兼容所有文件但不是最快的;如果峰值内存可预估,改成静态预分配,README 给出的数据是解码速度约提升 2 倍。npm 包(javascript/npm/draco3d/)自 1.4.0 起已改用 WASM,官方记录的性能提升约 200%,直接用包比自搓 JS 版本更划算。
解码端文件在javascript/(draco_decoder.js、draco_decoder_gltf.wasm按资产类型选),静态内存开关在CMakeLists.txt;Unity 项目不需要从源码编,unity/Plugin/里有 Windows/macOS/iOS/Android 四份预编译归档。
边界要说清楚:静态内存构建受预分配上限约束,超过预设大小的大文件会处理不了,资产大小分布跨度大时别贸然开。
Unity 插件解码后的渲染效果
glTF 转码器默认不构建,最容易漏
draco_transcoder目标只有在 CMake 配置时带上-DDRACO_TRANSCODER_SUPPORTED=ON才会生成,不开就以为没有转码工具,是最常见的误判。BUILDING.md也明说:开启后可能增大二进制体积,只编解码库时别顺手开。
转码器实现在src/draco/tools/draco_transcoder.cc,glTF 编解码在src/draco/io/gltf_encoder.cc和src/draco/io/gltf_decoder.cc。
已知限制要坦白:Draco 对小资产可能不赚反亏。仓库 testdata 里的对照:Box/glTF_Binary/Box.glb1.6 KB,转码后的Box_Draco.glb2.4 KB,反而大了。KB 级资产过一遍转码再比大小,不划算就别压。
转码前后对比用的测试资产
🧪 三个动作确认改动生效
- 同一模型分别用 cl10 与 cl3 编码,对比 .drc 大小
- 解码产物过一遍,核对顶点数与三角面数等于原网格
- 转码一个小 glb,实测体积是变小还是变大
下一步读src/draco/compression/encode.h里的SetSpeedOptions与SetAttributeQuantization,按自己的资产类型封装一层参数预设。 让项目里每类资产锁定一组固定的压缩级别与量化位组合,避免每次编码临时拍参数。
【免费下载链接】dracoDraco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.项目地址: https://gitcode.com/gh_mirrors/draco1/draco
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考