UltKit

STL、OBJ、3MF 差在哪?3D 檔案格式該用哪一種

單色列印、只需要切片時用 STL;模型帶有貼圖、要用於算圖或遊戲引擎時用 OBJ;切片軟體支援、又希望單位、顏色和多個零件完整保留時用 3MF。格式決定網格附帶哪些中繼資料,但永遠決定不了網格本身是否完好。

Jonas WeberJonas Weber網站效能編輯
更新於 12 分鐘閱讀
白色桌面上放著一台裝在透明外罩中的桌上型 3D 印表機,旁邊的筆電顯示 3D 模型,還有地形圖和紅色齒輪等彩色列印成品

STL:一串三角形,其他什麼都沒有

STL 於 1987 年為 3D Systems 最早的光固化成型機而制定,設計上處處可見這個出身。檔案就是一份扁平的三角形清單,每個三角形由面法線與三個頂點描述。它沒有共用的頂點表,所以接觸六個三角形的頂點會被寫六次。它也沒有單位欄位:座標 25 可能是毫米、英吋或公尺,幾乎所有切片軟體都假設是毫米。顏色、貼圖與零件名稱在核心格式中都沒有位置,這也正是每套切片軟體、CAD 軟體與列印服務至今都能讀取它的原因。

STL 有兩種編碼。ASCII STL 以純文字寫出一切,例如 facet normal、outer loop 與 vertex 12.5 0 3.2 這類行,用文字編輯器就能讀到數值。二進位 STL 以 80 位元組的標頭與 4 位元組的三角形數量開頭,接著每個三角形存成 12 個 4 位元組浮點數加 2 位元組屬性欄位:剛好 50 位元組。這條規則讓大小很容易預估。一百萬個三角形的模型,二進位約 50 MB,同一個網格的 ASCII 版通常大四到六倍,因為每個數字都變成字元。

簡單既是優點也是陷阱。STL 無法告訴你它原本是一個零件還是三個、是否以英吋匯出,或三角形是否真的圍成實體。切片軟體只能從原始座標推斷,一旦猜錯,就會得到縮小 25.4 倍的零件或缺失的牆面。若是你自己設計、以毫米匯出的單色零件,這些都不成問題,而 STL 仍是最不容易被拒收的格式。

OBJ:多邊形、UV 與附屬材質檔

OBJ 來自 Wavefront Technologies,其 Advanced Visualizer 軟體在 1980 年代末使用它,1990 年代成為幾乎所有 3D 程式都能交換的純文字格式。與 STL 不同,它保存頂點清單並以索引建立面,共用的頂點只存一次,面可以是三角形、四邊形或更大的多邊形。以 v 開頭的行是位置,vt 是貼圖座標(UV),vn 是法線,f 是面。群組(g)與物件(o)為零件命名,因此 OBJ 在 Blender、Maya 或 ZBrush 之間來回匯入匯出時,結構仍能完整保留。

外觀資訊不在 .obj 檔內。mtllib 行指定隨附的 .mtl 檔,usemtl 行把材質指派給面。.mtl 檔記錄 Kd(漫反射)等顏色,並以 map_Kd wood.png 這類項目指向貼圖圖片。因此有貼圖的 OBJ 至少是三個檔案:幾何、材質庫與一張或多張圖片,全都以相對路徑引用。只傳 .obj,對方看到的會是灰色模型。這種分離在遊戲與視覺特效流程中很實用,美術可以更換貼圖而不動幾何;同時也是下載的模型看起來不對的最常見原因。

OBJ 與 STL 一樣在比例上有盲點:它只存純數字,沒有單位。多數建模工具寫的是公尺或公分,切片軟體讀的卻是毫米,所以遊戲素材商店的 OBJ 可能差 10 倍或 1,000 倍。就列印而言,OBJ 沒有切片軟體會用到的內容,只有少數工具支援逐頂點顏色,因此要列印美術素材時,通常最簡單的做法是保留貼圖用於算圖,另外給切片軟體一個乾淨的網格。反過來,將 STL 轉成 OBJ 是把列印模型帶進算圖或遊戲流程最短的路。

3MF:專為列印設計的 ZIP 封裝

3MF 由 3MF Consortium 於 2015 年發布,這個組織由 Microsoft 發起,成員包括列印與 CAD 產業的公司。.3mf 檔是 ZIP 壓縮檔,與 ZIP、RAR、7z 比較中談到的容器格式相同。把它改名為 .zip,會看到內含網格的 3D/3dmodel.model XML 檔、內容類型檔、關聯檔,通常還有縮圖與切片設定。每個模型都宣告單位(微米、毫米、公分、英吋、英呎或公尺),因此困擾 STL 與 OBJ 的比例問題根本不會發生。顏色、基本材質、多個物件及其在列印平台上的擺放位置,都是規格的一部分。

規格還要求網格必須是流形且方向一致:每條邊恰好被兩個三角形共用,且全部朝外。遵守規則的匯出器無法寫出 STL 照樣能攜帶的開放、自相交幾何。目前工具的支援很廣:PrusaSlicer、Bambu Studio、OrcaSlicer 與 UltiMaker Cura 都能讀 3MF,PrusaSlicer 與 Bambu Studio 會把整個專案連同列印設定與上色存成 .3mf,Windows 上 Microsoft 的 3D Builder 也能直接開啟。弱點在於仍預期使用 STL 的舊韌體、列印農場入口網站與 CAD 匯入器;遇到這些情況,請將 3MF 轉成 STL,並接受額外資訊會被留下。

from ↓ · to →UnitsColorTextures多個零件列印設定流形規則
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to 多個零件: no– STL to 列印設定: no– STL to 流形規則: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to 多個零件: yes– OBJ to 列印設定: no– OBJ to 流形規則: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to 多個零件: yes3MF to 列印設定: yes3MF to 流形規則: yes
supported not offered列為格式,欄為檔案本身能攜帶的內容。OBJ 的顏色與貼圖需要另外的 .mtl 檔與圖片;3MF 的貼圖來自其材質擴充。有些工具會把顏色寫進二進位 STL 未使用的位元組,但沒有任何標準涵蓋這種做法。
木桌上一排開放式框架的 3D 列印機,最近的一台列印平台上有數個藍色圓柱形零件
照片:Unsplash

依用途選擇 3D 檔案格式

該選哪種格式,取決於檔案接下來要去哪裡,而不是哪個比較新。如果下一站是切片軟體,且零件為單色,STL 就很合適,而且仍是所有論壇、模型庫與列印服務都能理解的格式。如果下一站是算圖軟體、遊戲引擎或其他美術的建模工具,OBJ 會保留 STL 捨棄的 UV、法線與命名群組,其文字形式也方便檢查問題。

當檔案攜帶的不只是幾何時,3MF 就有用武之地。在 Bambu Studio 中上色的多色列印、為同一次列印排好的十二個零件、以英吋設計的零件,或想以相同層高與填充重新開啟的專案,都需要 3MF,因為這裡沒有其他格式能保存這些資訊。若要送往多個目的地,請保留資訊最完整的版本作為主檔,再用 3D 模型轉換器從中匯出較簡單的版本,而不要連續轉換。

一般列印用 STL

單一零件、單一顏色、以毫米匯出。每套切片軟體、CAD 匯入視窗與列印服務上傳表單都能開啟。

貼圖模型用 OBJ

提供 Blender、Maya、Unity 或 Unreal 所需的 UV、法線與命名群組。請連同 .mtl 檔與貼圖圖片一起提供。

新式切片軟體用 3MF

真實單位、顏色、多個物件與列印設定集中在一個 ZIP 中,是 PrusaSlicer 與 Bambu Studio 的原生專案格式。

3D 檔案出錯的五種情況

多數被歸咎於格式的列印失敗與匯入錯誤,其實是網格本身的問題,或接收端程式對網格的假設有誤。STL 最容易出問題,因為它沒有中繼資料可以攔截錯誤;OBJ 也有比例與檔案遺失的問題;3MF 在設計上避開了大多數問題,但粗心的匯出器仍可能寫出不良網格。展開下列各列,了解各種故障的樣子與通常的成因。

非流形網格

邊被一個三角形或三個以上三角形共用、表面之間有縫隙,或牆面厚度為零。切片軟體會出現缺層、隨機孔洞,或開放邊的警告。成因在建模或匯出,常見於合併了只是相接的零件。

法線反向

部分三角形朝內。算圖時會出現黑色或透明的區塊,切片軟體可能把該區域視為空白。用 Blender、Meshmixer 的重新計算法線指令,或切片軟體的修復工具即可解決。

毫米與英吋混淆

以英吋繪製的零件,在假設為毫米的切片軟體中會縮小 25.4 倍;公分被讀成毫米則有 10 倍的誤差。STL 與 OBJ 無法記錄單位,所以要在匯出或轉換時設定。

缺少 .mtl 檔或貼圖

OBJ 載入後呈灰色或洋紅色,表示遺失了材質庫或圖片,或 .mtl 內的路徑指向原作者電腦上的資料夾。請把所有檔案放在同一個資料夾並一起壓縮。

過大的 ASCII STL 檔

細節豐富的掃描檔存成 ASCII STL 可能超過數百 MB,讓切片軟體變慢並超出上傳上限。把同一個網格重新匯出為二進位 STL,不更動任何三角形,就能縮小到約五分之一。

各格式的檔案大小通常有多大

大小取決於結構。二進位 STL 固定每個三角形 50 位元組,所以匯出前就能算出。ASCII STL 把每個頂點重複寫成文字,通常是二進位的四到六倍。OBJ 每個共用頂點只存一次並以索引引用,所以一般封閉網格會比 ASCII STL 小,大約與二進位 STL 相當,若再帶有 UV 與法線則會更大。3MF 儲存有索引的 XML,再在 ZIP 內壓縮,因此相同幾何下通常是三者中最小的。

下列數字是約 500,000 個三角形的封閉網格(例如精細的公仔)的典型值。實際檔案會隨座標精度與匯出器而異,請當作數量級參考,在列印服務限制上傳大小,或從 3MF 匯出的 STL 大了好幾倍時很有用。

二進位 STL(500,000 個三角形 × 50 位元組)
≈ 25 MB
ASCII STL,相同網格,典型值
≈ 100–150 MB
不含 UV 的 OBJ,典型值
≈ 15–30 MB
經 ZIP 壓縮的 3MF,典型值
≈ 5–12 MB

3D 模型轉檔能解決什麼、永遠解決不了什麼

轉換是從一種容器讀出三角形,再寫入另一種容器。目標格式能表達的都會保留,無法表達的就會被捨棄。因此 STL 轉 OBJ 對幾何而言沒有損失,3MF 轉 STL 會失去顏色、單位與平台排版,OBJ 轉 STL 則會失去貼圖與零件名稱。在 UltKit 的 3D 工具中,這些額外的決定都是明確的:模型單位告訴轉換器來源使用的比例,向上軸處理遊戲引擎與切片軟體之間 Y 軸向上與 Z 軸向上的差異,合併為單一網格決定各零件是否保持獨立。

沒有任何轉換會修復網格。如果 STL 有洞,由它產生的 OBJ 也有同樣的洞,3MF 匯出器則會拒絕或照樣寫入。修復是獨立的步驟,要在網格工具或切片軟體內建的修復功能中進行,最好在匯出其他格式之前,只在主檔中做一次。比例也一樣:除非你告訴它,轉換並不知道零件原本是以英吋為單位。細節同理:低多邊形的 STL 轉成的 OBJ 或 3MF 依然是低多邊形,所以在意品質時,請從原始模型重新匯出。

更換格式能做到的事

  • 把相同的三角形放進另一個程式能接受的容器
  • 套用你在模型單位中選擇的單位,修正 25.4 倍或 10 倍的比例錯誤
  • 以向上軸在 Y 軸向上與 Z 軸向上之間旋轉模型
  • 改寫成二進位,縮小 ASCII STL
  • 依合併為單一網格保留或合併各個零件

完全不會改變的部分

  • 孔洞、開放邊與非流形幾何
  • 反向或不一致的法線
  • 自相交的零件與零厚度的牆面
  • 網格第一次匯出時就已遺失的細節
  • 目標格式無處存放的顏色與貼圖

選擇對照表:STL、OBJ 還是 3MF

每當談到這個問題,還會冒出另外兩種格式。STEP(ISO 10303)儲存的是精確的實體與曲面,而不是三角形,因此當零件需要回到 Fusion 360、SolidWorks 或 FreeCAD 進行編輯時,就該使用這種格式。GLB 是 Khronos Group 的 glTF 2.0 的二進位形式,會把網格連同材質與貼圖打包成一個以公尺為單位的檔案,適合在網頁或 Android AR 中展示模型。

針對本文介紹的三種格式,下表依檔案的下一個去向整理出選擇方式。如果有兩列都符合,請選擇包含資訊較多的格式,之後再匯出較簡單的版本;從 3MF 轉成 STL 很容易,但要重建遺失的顏色或單位就得手動處理。

依檔案接下來的去向來選擇
情境最佳格式原因
要送進任何切片軟體的單色零件STL(二進位)支援度最廣,切片軟體不需要其他資訊
上傳到模型庫或列印服務STL,若有提供也可加上 3MFSTL 一定會被接受;3MF 能保留單位與顏色
多色或多材料列印3MF這裡唯一能為切片軟體儲存顏色與各零件材料的格式
含多個零件與列印設定的列印板3MF把物件擺放位置與切片設定存在同一個檔案中
以英吋設計的零件3MF會標明單位,因此不會被誤乘以 25.4
要用於 Blender、Unity 或 Unreal 的貼圖模型OBJ(+ .mtl 與圖片)保留 UV、法線與材質指定
用文字編輯器快速檢查OBJ 或 ASCII STL純文字,可以逐行閱讀
只列出 STL 的舊韌體或舊軟體STL去掉多餘資訊,只送出網格

重點整理

  • STL 只儲存三角形:沒有單位、沒有顏色,二進位形式下每個三角形佔 50 位元組。
  • OBJ 加入了 UV、法線與具名群組,但顏色與貼圖要靠另外的 .mtl 檔與圖片檔。
  • 3MF 是以 XML 構成的 ZIP,會記錄單位、顏色、多個物件與列印設定,且要求網格必須封閉。
  • 單色一般列印用 STL,美術與遊戲流程中的貼圖模型用 OBJ,只要切片軟體支援就用 3MF。
  • 轉換改變的是容器,而不是網格:請用網格工具修復破洞與法線,並自行設定單位。
分享XFacebookWhatsAppTelegram

常見問題

STL 會被 3MF 取代嗎?

在列印流程中是緩慢進行的。PrusaSlicer 與 Bambu Studio 已經把專案存成 3MF,但 STL 仍是所有工具與模型庫都接受的格式,因此兩者還會並存很多年。

二進位 STL 能儲存顏色嗎?

沒有任何標準做法。少數程式會把顏色寫入每個三角形 2 位元組的屬性欄位,但多數切片軟體會忽略它,所以需要顏色時請用 3MF 或 OBJ。

為什麼 OBJ 下載後顯示成灰色?

可能是 .mtl 檔或貼圖圖片沒有一起帶上,或是 .mtl 內的路徑指向你電腦上不存在的資料夾。請把 .obj、.mtl 與圖片放在同一個資料夾,再重新載入模型。

ASCII 和二進位 STL,哪一種列印比較精確?

實際上兩者的列印精確度沒有差別。兩者描述的是相同的三角形;二進位把座標存成 32 位元浮點數,ASCII 則存成文字,二進位檔案通常小上好幾倍。

OBJ 可以轉回 STL 來列印嗎?

可以。三角形會原樣保留,但 UV、材質與貼圖會被捨棄,因為 STL 沒有地方存放。轉換後請檢查比例,因為建模工具輸出的 OBJ 檔常以公尺或公分為單位。

要分享模型給別人列印,該用哪種格式?

提供 STL 以取得最廣的相容性;如果模型有多個零件、有顏色,或是以英吋設計,再附上一個 3MF,讓使用新版切片軟體的人能取得完整設定。

延伸閱讀