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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM