当前位置: 首页 > news >正文

Draco点云压缩测试

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都会忽略这些连接信息,只编码文件中的点的位置信息

遇到的问题:(参数位置。。被官方文档坑了。还有网上下的一个数据的问题)
image.png
压缩前后比对:
700M->30M
image.png
200M->20M
image.png

three 加载:
这里遇到一个奇怪的问题:THREE.DRACOLoader: Unexpected geometry type
draco 解码器版本与 three 版本没对应。。。得去当前包下去考 draco 文件
简单的加载和顶点着色不难,根据打印的信息 buffergeomtry构建点模型即可
这里加载测试两份数据一份大(700M->30M) 的一份小(200M->20M)的
(200M->20M)70 帧左右,卡几秒解压
image.png
image.png
image.png

这个 700 多 M 的加载时解码会卡半分钟左右,帧数 20 多

相关文章:

  • scikit-learn保姆级入门教程
  • Qt 定时器事件
  • Python中,括号内部的for循环(列表推导式)
  • Kubernetes 安全秘籍:5 个你必须知道的知识点
  • 【操作系统学习笔记】文件管理1.9
  • ROS2动作通信的实现
  • 电子数字灯LED管变化数量
  • 计算机找不到api-ms-win-core-path-l1-1-0的5种解决方法
  • 解决ts报错:类型“entry”上不存在属性“$AppTools”
  • 【REST2SQL】12 REST2SQL增加Token生成和验证
  • YOLOv8.1.0安装
  • java实现文件下载(前端传文件后端以流的方式进行输出)
  • 专业140+总分430+西南交通大学924信号与系统考研经验电子信息与通信工程,真题,大纲,参考书
  • 【面试题】Rocketmq面试题总结
  • 图形库实战丨C语言扫雷小游戏(超2w字,附图片素材)
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [译]CSS 居中(Center)方法大合集
  • 《深入 React 技术栈》
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • CSS相对定位
  •  D - 粉碎叛乱F - 其他起义
  • EOS是什么
  • golang 发送GET和POST示例
  • Map集合、散列表、红黑树介绍
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • nodejs:开发并发布一个nodejs包
  • Python爬虫--- 1.3 BS4库的解析器
  • 浮现式设计
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前嗅ForeSpider中数据浏览界面介绍
  • 区块链共识机制优缺点对比都是什么
  • 深入 Nginx 之配置篇
  • 使用docker-compose进行多节点部署
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 一个项目push到多个远程Git仓库
  • 译有关态射的一切
  • 我们雇佣了一只大猴子...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #单片机(TB6600驱动42步进电机)
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (¥1011)-(一千零一拾一元整)输出
  • (11)MATLAB PCA+SVM 人脸识别
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (转)Oracle存储过程编写经验和优化措施
  • (转)大型网站架构演变和知识体系
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • /proc/vmstat 详解
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48