3D模型的格式
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列印格式的支援,擺明了就是來搶班奪權的。