three.js开发obj格式文件压缩库——Draco简析

转载 2018年04月16日 22:34:11

3D文件压缩库——Draco简析

今年1月份时,google发布了名为“Draco”的3D图形开源压缩库,下载了其代码来看了下,感觉虽然暂时用不到,但还是有前途的,故简单做下分析。

注:Draco 代码地址: 
https://github.com/google/draco

基本使用

编译

cmake . + make 编译源码,生成 draco_encoder 和 draco_decoder 两个可执行文件

编码/压缩

使用 draco_encoder 压缩 obj 或 ply 的文件:

./draco_encoder -i torusknot.obj
  • 1

结果如下:

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(1)Compression level:这个决定后续选用什么算法进行压缩,值越高,速度越慢,压缩效果越好。 
(2)Positions: Quantization = 14 bits:顶点属性值是由浮点转换为整数再编码的,14位表示用(1<<14)(即2的14次方)去乘浮点数,然后取整。

解码

./draco_decoder -i torusknot.obj.drc -o torusknot.obj
  • 1

这里必须指定obj的输出文件,不然会解成ply格式,这样 面 的信息就没了。

原理

3D文件格式

一个3D模型文件,一般包含顶点、面、材质、动画等各种引擎渲染所需要的信息。 
ply文件格式只包含顶点信息,而obj文件包含顶点信息和面的信息。 
这两者的联系如图所示: 
Mesh
顶点信息就是该点的物体坐标、法线向量、纹理坐标等,如果绑定了骨骼,还有各块骨骼的权重。 
面的信息指怎么由顶点围成面,它是一系列顶点索引的集合。如 f1: 0,1,2 表示由 x0, x1, x2 三个点围成一个面。

但这两种格式都不满足3D项目的需求,我们所用的模型文件还需要材质信息,动画信息等,因此在项目中想用draco,必须将其改造一下。

流程与算法

这里只列obj文件格式的编码流程图: 
Obj
这里面采用的是如下文献的算法: 
http://www.cc.gatech.edu/~jarek/papers/CornerTableSMI.pdf 
它用 edge breaker 算法去压缩面的信息,并产生 CornerTable,用平行四边形差分方式压缩顶点属性信息。

Draco 里面还有其他的压缩顶点属性值的算法,如kd-tree、差分等,详细见各种 PredictionScheme,不多述。

Draco作用

1、Draco 在当前的VR、AR生态下,基本上没有直接使用的价值,想用它必须理解原理并修改源码。 
2、Draco 里面有比较好的mesh压缩方案,有利于游戏引擎公司基于该代码优化自己的模型设计。 
3、Draco 所能压缩的只是3D模型文件中的一部分,而3D相关的资源大头(图片)还是一个老大难的问题。

版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/jxt1234and2010 https://blog.csdn.net/jxt1234and2010/article/details/53999155

3D文件压缩库——Draco简析

3D文件压缩库——Draco简析今年1月份时,google发布了名为“Draco”的3D图形开源压缩库,下载了其代码来看了下,感觉虽然暂时用不到,但还是有前途的,故简单做下分析。注:Draco 代码地...
  • jxt1234and2010
  • jxt1234and2010
  • 2017-02-24 14:21:26
  • 2520

Draco:谷歌开源3D数据压缩工具

Draco是一个3D图形压缩工具,由Chrome Media团队开发。它用来压缩复杂3D模型上的数据,使其在浏览器中更快下载和更易显示,而且利用更少带宽。谷歌一个视频显示,Draco比gzip速度快多...
  • yinjiaqi2012
  • yinjiaqi2012
  • 2017-01-18 15:30:13
  • 814

谷歌draco

前不久,谷歌开源的Draco关于点云的编码与压缩的源码,Draco 由谷歌 Chrome 媒体团队设计,旨在大幅加速 3D 数据的编码、传输和解码。因为研发团队的 Chrome 背景,这个开源算法的首...
  • u013019296
  • u013019296
  • 2017-04-11 13:54:53
  • 874

使用three.js加载obj+mtl文件

因在项目中运用到WEBGL的技术。所以研究了一下下。three.js库看来十分强大,此处为加载带材质的obj文件 1.下载相关js    https://threejs.org/     thee....
  • qq_37642205
  • qq_37642205
  • 2018-01-05 13:53:41
  • 1169

DirectX-3d中.x模型转换成three.js可用的obj文件或者js文件

过程十分的痛苦,找了好多工具。 1.首先是directx-3d里面的模型纹理格式是.x后缀的。 所以我们要转换。这里推荐一个工具assimp (点我下载) Assimp(Open Asse...
  • cq361106306
  • cq361106306
  • 2015-09-21 21:20:29
  • 3383

Three.js学习笔记——3dsmax 加载obj模型

利用3dsmax导出.obj 文件,同时还会有一个.mtl
  • yao800382
  • yao800382
  • 2014-07-02 20:35:13
  • 5742

threejs 加载stl 或 obj 模型的代码模板

threejs stl obj 加载模型的代码模板
  • aprildove
  • aprildove
  • 2015-09-17 21:33:26
  • 3560

draco压缩引擎学习笔记(二)

1.压缩模型要求此压缩器只能压缩obj和ply,用建模软件导出obj时,一定要注意,要选择导出【三角形】,只有mesh是三角形才能压缩,四边形或多边形不能压缩。2.压缩测试(1)40m obj文件压缩...
  • cc346271513
  • cc346271513
  • 2018-04-12 18:29:23
  • 10

如何将文件名为obj的3d素材转换为符合three.js标准的json格式的js文件

最近无意间发现一个好东西(three.js),three.js是JavaScript编写的WebGL第三方库。提供了非常多的3D显示功能。Three.js 是一款运行在浏览器中的 3D 引擎,你可以...
  • kevinkew
  • kevinkew
  • 2013-09-23 15:16:10
  • 4234

关于three.js载入js格式模型的问题

先上代码: Title div#canvas-frame { border: none; ...
  • qq563969790
  • qq563969790
  • 2017-07-24 18:15:01
  • 438
收藏助手
不良信息举报
您举报文章:three.js开发obj格式文件压缩库——Draco简析
举报原因:
原因补充:

(最多只允许输入30个字)