1. 程式人生 > 實用技巧 >3D模型的格式

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