3D模型的格式


gitee: 点云入门手册Tutorial_No.3_点云文件格式

PCD: Point Cloud Data,PCL(Point Cloud Library)官方指定文件,用于存储点云中点的具体信息。

  • TXT:用来存储点云的点的信息,操作简单,与我们平时处理数据的 txt 文件处理方式一致;
  • VTK:除了存储点的信息,还存储点与点之间的拓扑关系(拓扑关系在 3-3 VTK 文件中有说明);
  • PLY:三维 mesh 模型数据格式,只用于描述一个多边形模型对象,也即网格结构模型;
  • OFF:保存几何体的多边形信息;
  • OBJ:从几何学上定义的文件格式,主要支持多边形模型,也即网格结构模型;
  • STL:存储点的信息以及拓扑信息,表示封闭的面或者体;
  • BIN:与上述七种文件不同,一个后缀名为 .bin 的文件, 只是想表明它是 binary 格式. 但并不表明它与某种应用程序有必然的联系性,一个 bin 文件也可能不是点云数据;

1. STL

STL文件格式(stereolithography,光固化立体造型术的缩写)是由3D SYSTEMS 公司于1988 年制定的一种为快速原型制造技术服务的三维图形文件格式。

PS:STL可不是专门为3D打印而创造的喔,只是碰巧3D打印是快速原型制造技术的一种,而且是名气最大的一种。

STL文件不同于其他一些基于特征的实体模型,STL用三角形网格来表现3D CAD模型,只能描述三维物体的几何信息,不支持颜色材质等信息。

PS:​这下明白为什么会丢失那么多重要信息了吧!​STL就是个简化版的3D模型。

但是——正因为数据简化,格式简单,STL普及很快应用广泛,“简单易用”说的就是它。随着3D SYSTEMS的快速崛起, STL已经成为快速原型系统事实上的数据标准。

PS:管你高端中端低端CAD软件,要想用3D打印,都必须给我往STL格式转换;

STL 文件有2 种类型:文本文件(ASCII格式)和二进制文件(BINARY)。

PS:相比之下ASCII格式更加通用一些。​​

2. PCD

在点云库PCL 1.0发布之前,PCD文件格式就已经发展更新了许多版本。这些新旧不同的版本用PCD_Vx来编号(例如PCD_V5、PCD_V6和PCD_V7等),分别代表PCD文件的0.5版、0.6版和0.7版。在PCL中,用到的PCD文件格式的正式发布是0.7版,即PCD_V7。

PCD文由 “头文件 + 点云数据” 构成,头文件声明了该点云数据集的基本特性。下面以PCD_V7版本的PCD文件为例,对头文件进行介绍。头文件及部分点云数据如下所示:

# .PCD v.5 - Point Cloud Data file format
VERSION .5
FIELDS x y z
SIZE 4 4 4
TYPE F F F
COUNT 1 1 1
WIDTH 397
HEIGHT 1
POINTS 397
DATA ascii
0.0054216 0.11349 0.040749
-0.0017447 0.11425 0.041273
-0.010661 0.11338 0.040916
0.026422 0.11499 0.032623
0.024545 0.12284 0.024255
0.034137 0.11316 0.02507
  • FIELDS:

    指定本点云数据集中任意一个点可以有的维度信息和其他附加信息。如:FIELDS x y z 指每个点都有xyz三个维度信息,FIELDS x y z rgb 指每个点除了xyz维度信息外还有颜色信息等。

  • SIZE

    储存每个维度信息占用的字节数(byte)。1指用char型数据存储维度信息,2指用short型数据存储维度信息,4指用int或float型数据存储维度信息,8指用double型数据存储维度信息。

  • TYPE

    用字符指定每一个维度的数据类型。I表示有符号类型:int8(char),int16(short),int32(int);U表示无符号类型:uint8(unsigned char),uint 16(unsigned short),uint32(unsigned int);F表示浮点型float和double。

  • COUNT

    每个维度包含的元素个数。

  • POINTS

    点云中点的总数,从0.7版本就开始显得有点多余,可能会在后续版本中舍去这个参数。

  • DATA

    指定存储点云数据的数据存储格式:ASCLL码或二进制数据。

3. OBJ

OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合用于3D软件模型之间的数据交换,比如你在3dsMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。

OBJ主要支持多边形(Polygons)模型。不包含动画、材质特性、贴图路径、动力学、粒子等信息。​

由于OBJ格式在数据交换方面的便捷性,目前大多数的三维CAD软件都支持OBJ格式,大多数3D打印机也支持使用OBJ格式进行打印。​

PS:虽然OBJ格式诞生得晚一些,也比STL有所进步,但并无实质区别。​

4. PLY

典型的 PLY 文件结构:

头部
顶点列表
面片列表
(其他元素列表)

头部是一系列以回车结尾的文本行,用来描述文件的剩余部分。头部包含一个对每个元素类型的描述,包括元素名(如“边”),这个元素在工程里有多少,以及一个与这个元素关联的不同属性的列表。头部还说明这个文件是二进制的或者是ASCII的。头部后面的是一个每个元素类型的元素列表,按照在头部中描述的顺序出现。

下面是一个立方体的完整ASCII描述。相同工程的二进制版本头部的唯一不同是用词 “binary_little_endian” 或者 “binary_big_endian” 替换词“ascii”。大括号中的注释不是文件的一部分,它们是这个例子的注解。文件中的注释一般在 “comment”开始的关键词定义行里。

ply
format   ascii   1.0   {   ascii/二进制,格式版本数   }
comment   made   by   anonymous   {   注释关键词说明,像其他行一样   }
comment   this   file   is   a   cube
element   vertex   8   {   定义“vertex”(顶点)元素,在文件中有8个   }
property   float32   x   {   顶点包含浮点坐标“x”}
property   float32   y   {   y   坐标同样是一个顶点属性   }
property   float32   z   {   z   也是坐标   }
element   face   6   {   在文件里有6个“face”(面片)   }
property   list   uint8   int32   vertex_index   {   “vertex_indices”(顶点素引)是一列整数   }
end_header   {   划定头部结尾   }
0   0   0   {   顶点列表的开始   }
0   0   1
0   1   1
0   1   0
1   0   0
1   0   1
1   1   1
1   1   0
4   0   1   2   3   {   面片列表开始   }
4   7   6   5   4
4   0   4   5   1
4   1   5   6   2
4   2   6   7   3
4   3   7   4   0

这个例子说明头部的基本组成。头部的每个部分都是以一个关键词开头以回车结尾的ASCII串。即使是头部的开始和结尾(“ply”和“end_header”)也是以这种形式。因为字符“ply”是文件的魔法数字,必须是文件的头四个字符。跟在文件头部开头之后的是关键词 “format” 和一个特定的ASCII或者二进制的格式,接下来是一个版本号。再下面是多边形文件中每个元素的描述,在每个元素里还有多属性的说明。

另外一个立方体定义:

ply
format   ascii   1.0
comment   author:   anonymous
comment   object:   another   cube
element   vertex   8
property   float32   x
property   float32   y
property   float32   z
property   red   uint8   {   顶点颜色开始   }
property   green   uint8
property   blue   uint8
element   face   7
property   list   uint8   int32   vertex_index   {   每个面片的顶点个数   }
element   edge   5   {   物体里有5条边   }
property   int32   vertex1   {   边的第一个顶点的索引   }
property   int32   vertex2   {   第二个顶点的索引   }
property   uint8   red   {   边颜色开始   }
property   uint8   green
property   uint8   blue
end_header
0   0   0   255   0   0   {   顶点列表开始   }
0   0   1   255   0   0
0   1   1   255   0   0
0   1   0   255   0   0
1   0   0   0   0   255
1   0   1   0   0   255
1   1   1   0   0   255
1   1   0   0   0   255
3   0   1   2   {   面片列表开始,从一个三角形开始   }
3   0   2   3   {   另一个三角形   }
4   7   6   5   4   {   现在是一些四边形   }
4   0   4   5   1
4   1   5   6   2
4   2   6   7   3
4   3   7   4   0
0   1   255   255   255   {   边列表开始,从白边开始   }
1   2   255   255   255
2   3   255   255   255
3   0   255   255   255
2   0   0   0   0   {   以一个黑线结束   }

这个文件为每个顶点指定一个红、绿、蓝值。为了说明变长vertex_index(顶点索引)的能力,物体的头两个面片是两个三角形而不是一个四边形。这 意味着物体的面片数是7。这个物体还包括一个边列表。每条边包括两个指向说明边的顶点的指针。每条边也有一种颜色。上面定义的五条边指定了颜色,使文件里 的两个三角形高亮。前四条边白色,它们包围两个三角形。最后一条边是黑的,他是分割三角形的边。

5. AMF

AMF是以目前3D打印机使用的“STL”格式为基础、弥补了其弱点的数据格式,新格式能够记录颜色信息、材料信息及物体内部结构等。

AMF标准基于XML(可扩展标记语言)。采用XML有两个好处,一是不仅能由计算机处理,人也能看懂,二是将来可通过增加标签轻松扩展。新标准不仅可以记录单一材质,还可对不同部位指定不同材质,能分级改变两种材料的比例进行造型。造型物内部的结构用数字公式记录。能够指定在造型物表面印刷图像,还可指定3D打印时最高效的方向。另外,还能记录作者的名字、模型的名称等原始数据。 ​

PS: 虽然AMF有成为新一代3D打印数据标准的潜力,但没有巨头支持是硬伤。

6. 3MF

另一大阵营就是由微软牵头的3MF联盟,于2015年推出全新的3D打印格式——3MF(3D Manufacturing Format)。​

相较于STL格式,3MF档案格式能够更完整地描述3D模型,除了几何信息外,还可以保持内部信息、颜色、材料、纹理等其它特征。

3MF同样也是一种基于XML的数据格式,具有可扩充性。对于使用3D打印的消费者及从业者来说,3MF最大的好处是大品牌支持这个格式。

虽然来得晚,但是实力强啊!看看3MF联盟的成员:Microsoft、Autodesk、Dassault Systems、Netfabb,SLM、惠普(HP)、Shapeways,个个都是巨头!加上微软宣布WIN8.1和WIN10对3MF打印格式的支持,摆明了就是来抢班夺权的。​

posted @ 2020-12-29 14:04  brt2  阅读(1804)  评论(0编辑  收藏  举报