(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

关于Draco压缩算法

Draco是一个开源的Lib库,提供3D图形mesh和点云的压缩和解压。它的目标是提升3D图形的存储和传输效率。

Draco is an open-source library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.https://google.github.io/draco/

git路径: https://github.com/google/draco

简单应用

Draco提供了针对性mesh压缩的算法,可以提供比gzip压缩更有针对性的压缩。
缺省支持了OBJ和PLY文件类型的压缩,其它格式的文件需要通过程序进行封装,并调用接口库进行压缩解压使用。
Draco提供的程序库文件有:
draco.lib
dracodec.lib
dracoenc.lib
draco_decoder.exe
draco_encoder.exe
如果输出的是obj/ply文件,

  • 服务端采用压缩程序draco_encoder.exe对文件进行预压缩,当客户端请求时,向web客户端传输压缩后的文件。
  • web客户端侧,调用Draco提供的js解压代码,对obj文件解压,并渲染展示。

定制应用

对于非obj格式,需要写相关的格式压缩处理,调用接口:

  • 包含头文件:
#include "draco/compression/encode.h"
#include "draco/core/encoder_buffer.h"
  • 包装接口调用:
// init encoder
draco::Encoder encoder;
encoder.SetSpeedOptions(7, 7);
encoder.SetAttributeQuantization(draco::GeometryAttribute::POSITION, 14);
encoder.SetAttributeQuantization(draco::GeometryAttribute::COLOR, 12);
encoder.SetAttributeQuantization(draco::GeometryAttribute::NORMAL, 10);
encoder.SetAttributeQuantization(draco::GeometryAttribute::TEX_COORD, 12);
encoder.SetAttributeQuantization(draco::GeometryAttribute::GENERIC, 12);// init mesh
draco::Mesh mesh;
... put mesh info into draco mesh// encode mesh to buffer
draco::EncoderBuffer buffer;
const draco::Status status = encoder.EncodeMeshToBuffer(mesh, &buffer);
// write buffer to file
...
out_file.write(buffer.data(), buffer.size())

c. mesh加载方法
参考Draco源码中 ObjDecoder::DecodeInternal 中的实现

// 1. 设置三角形mesh->SetNumFaces// 逐个设置三角形的index值mesh->SetFace
// 2. 设置点的数量point->set_num_points
// 3. 定义VBO相关属性// 定义attribute, 把vertex/texcoor/normal/color放入attributeGeometryAttribute geoAttr;geoAttr.Init(GeometryAttribute::POSITION, nullptr, ...)int attrid = mesh->AddAttribute(geoAttr...)mesh.attribute(attrid)-SetAttributeValue(draco::AttributeValueIndex(i), value)

使用注意

注意:

  • Draco压缩算法对float数值有一定的要求, 要求是常规数字(Nan, Infinite都是不可接受的), 可以使用std::isnormal判定.(isnormal判定会识别Nan, infinite, 0, 0<abs(x)<mindouble)
  • Draco压缩算法会需要对shader进行修改
  • Draco压缩算法是有损压缩算法, 注意相关的压缩比设置
  • Draco实时解压会占用cpu, 需要关注改点

使用Draco的好处:

  • 减少空间的占用, 减少网络传输量,该优点是它的核心好处
  • Draco的解压算法,网页端提供了wasm的解压算法,一定程度的降低了网页端解压消耗

使用Draco的缺憾:

  • 可能性能提升也并没有期望中那么大,这个跟数据源的特点有关,不能得到保证。

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

Draco压缩算法使用相关推荐

  1. 字节跳动开源最新GAN压缩算法,算力消耗可减少至1/46

    字节跳动近期开源了一项代号为OMGD的压缩技术.这是字节自研的GAN(生成对抗网络)压缩算法,在保证生成效果不变的前提下,算力消耗最低可以减少到原来的1/46,相比之前业界的最佳压缩效果提升一倍多.据 ...

  2. 你发表情包全靠他,GIF压缩算法发明者之一获IEEE最高荣誉奖

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 转载自:量子位 现年90岁的以色列科学家Jacob Ziv,获得了2021年IEEE荣誉奖章(I ...

  3. gzip压缩算法: gzip 所使用压缩算法的基本原理

    gzip压缩算法: gzip 所使用压缩算法的基本原理_凡间_百度空间 gzip压缩算法: gzip 所使用压缩算法的基本原理 1 gzip 所使用压缩算法的基本原理 gzip 对于要压缩的文件,首先 ...

  4. 简单的BMCP位图图片压缩算法

    此算法并不高深,各位专业人士可以飘过了Orz.并且如果各位知道一些图片格式与压缩算法的话,从中应该可以看到一些相似的"影子". PS:本人非专业人士,以下有说错的敬请各位谅解:) ...

  5. 视频压缩算法的相关知识

    视频压缩算法的相关知识 MPEG-1 MPEG 视频压缩编码后包括三种元素:I帧(I-frames).P帧(P-frames)和B帧(B-frames).在MPEG编码的过程中,部分视频帧序列压缩成为 ...

  6. webp、jpeg、png三种压缩算法比较

    jpeg和png两种图片格式大家都熟知,jpeg是一种有损压缩算法,压缩比相对较高,而png常常用于需要透明效果的图片格式,他们应用于不同的场 合,相对来说,同一张图片分别用jpeg和png两种格式来 ...

  7. 倒排索引PForDelta压缩算法——基本假设和霍夫曼压缩同

    PForDelta算法 PForDelta算法最早由Heman在2005年提出,它允许同时对整个chunk数据(例128个数)进行压缩处理.基础思想是对于一个chunk的数列(例128个),认为其中占 ...

  8. 朱俊彦团队提出GAN压缩算法:计算量减少20倍,生成效果不变,GPU、CPU统统能加速...

    边策 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 现如今,GAN的效果已经越来越出神入化. 比如英伟达的GauGAN,就如神笔马良,能够凭空造物: 不过,从无化有背后,计算量也相当惊人 ...

  9. 5MB的神经网络也高效,Facebook新压缩算法造福嵌入式设备

    鱼羊 发自 凹非寺  量子位 报道 | 公众号 QbitAI 人工智能风暴袭来,机器人.自动驾驶汽车这样的嵌入式设备也热度渐长.毫无疑问,现在,嵌入式设备也需要高效的神经网络加持. 但是,如何在嵌入式 ...

  10. Huffman 编码压缩算法

    为什么80%的码农都做不了架构师?>>>    前两天发布那个rsync算法后,想看看数据压缩的算法,知道一个经典的压缩算法Huffman算法.相信大家应该听说过 David Huf ...

最新文章

  1. 两个字符串之间的连接函数,不使用strcat()函数
  2. 李开复「预见2021」:自动化成企业升级转型刚需 | AI日报
  3. MIP、PWA、WebGL、HTTPS,来看Web生态的领先技术
  4. China Mobile 免流原理
  5. 实现原理 扫描枪_条码扫描枪工作原理
  6. Python多进程(process)和多线程(thread)的区别
  7. 做好一个系统分析师、项目经理75条准则
  8. element 如何自定义svg图标_【第2018期】小图标,大学问
  9. java中将list、map对象写入文件
  10. DSP实验报告—实验 4  编写一个汇编和 C 混合的 DSP 程序
  11. 怎么把c盘的软件移到d盘?
  12. 时域技术在天线测量中的应用
  13. 《电路》邱关源 思维导图 第三章 电阻电路的一般分析
  14. 计算机作业上海世博会,上海世博会开启城市生活新未来
  15. 联合循环——16(电缆终端接地总结)
  16. 玩转Linux的下Ip计算器(图文)
  17. 查询分析器默认代码颜色
  18. m73p黑苹果_现阶段最便宜的完美黑苹果配置是什么?
  19. 数据集:人群行为识别数据库总结
  20. 正大国际:做外盘期货主帐户有什么风险?

热门文章

  1. IR(红外遥控)基本原理
  2. 开源开发者 David Recordon 被任命白宫技术总监
  3. 实用的网址(chrome官方离线安装包,chrome插件、 Google play apk下载等等 )
  4. 2014-7-17 NOIP模拟赛
  5. 基于 HTML5 + WebGL 的 3D 太阳系系统
  6. react详细视频 https://www.bilibili.com/video/BV1wy4y1D7JT?p=76
  7. 电脑C盘满了如何扩充C盘内存?
  8. 第三阶段应用层——1.5 数码相册—使用FreeType在LCD上显示单个字符
  9. 菲仕乐高压锅型号全面详解
  10. centOS7搭建DNS服务器配置详解