3D⽂件压缩库——Draco简析
3D⽂件压缩库——Draco简析
今年1⽉份时,google发布了名为“Draco”的3D图形开源压缩库,下载了其代码来看了下,感觉虽然暂时⽤不到,但还是有前途的,故简单做下分析。
注:Draco 代码地址:
基本使⽤
手机上网编译
cmake . + make 编译源码,⽣成 draco_encoder 和 draco_decoder 两个可执⾏⽂件
编码/压缩
使⽤ draco_encoder 压缩 obj 或 ply 的⽂件:
./draco_encoder -i torusknot.obj
列宁的故事1
结果如下:
g调笛子
Encoder options:
Compression level = 5
Positions: Quantization = 14 bits
Texture coordinates: Quantization = 12 bits
Normals: Quantization = 10 bits
党员思想
Encoded mesh saved to torusknot.obj.drc (3 ms to encode)
Encoded size = 2272 bytes
垃圾房
1)Compression level:这个决定后续选⽤什么算法进⾏压缩,值越⾼,速度越慢,压缩效果越好。
(2)Positions: Quantization = 14 bits:顶点属性值是由浮点转换为整数再编码的,14位表⽰⽤(1<<14)(即2的14次⽅)去乘浮点数,然后取整。
家长保证书
解码
./draco_decoder -i torusknot.obj.drc -o torusknot.obj
这⾥必须指定obj的输出⽂件,不然会解成ply格式,这样⾯的信息就没了。
原理
3D⽂件格式
⼀个3D模型⽂件,⼀般包含顶点、⾯、材质、动画等各种引擎渲染所需要的信息。
ply⽂件格式只包含顶点信息,⽽obj⽂件包含顶点信息和⾯的信息。
这两者的联系如图所⽰:
顶点信息就是该点的物体坐标、法线向量、纹理坐标等,如果绑定了⾻骼,还有各块⾻骼的权重。
⾯的信息指怎么由顶点围成⾯,它是⼀系列顶点索引的集合。如 f1: 0,1,2 表⽰由 x0, x1, x2 三个点围成⼀个⾯。
素描小狗但这两种格式都不满⾜3D项⽬的需求,我们所⽤的模型⽂件还需要材质信息,动画信息等,因此在项⽬中想⽤draco,必须将其改造⼀下。流程与算法
发展党员这⾥只列obj⽂件格式的编码流程图:
这⾥⾯采⽤的是如下⽂献的算法:
它⽤ edge breaker 算法去压缩⾯的信息,并产⽣ CornerTable,⽤平⾏四边形差分⽅式压缩顶点属性信息。
Draco ⾥⾯还有其他的压缩顶点属性值的算法,如kd-tree、差分等,详细见各种 PredictionScheme,不多述。
Draco作⽤
1、Draco 在当前的VR、AR⽣态下,基本上没有直接使⽤的价值,想⽤它必须理解原理并修改源码。
2、Draco ⾥⾯有⽐较好的mesh压缩⽅案,有利于游戏引擎公司基于该代码优化⾃⼰的模型设计。
3、Draco 所能压缩的只是3D模型⽂件中的⼀部分,⽽3D相关的资源⼤头(图⽚)还是⼀个⽼⼤难的问题。版权声明:本⽂为博主原创⽂章,转载请注明出处:blog.csdn/jxt1234and2010
blog.csdn/jxt1234and2010/article/details/53999155