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打印格式的支持,擺明了就是來搶班奪權的。