UltKit

STL, OBJ hay 3MF: Nên dùng định dạng file 3D nào?

Hãy dùng STL cho bản in một màu mà bạn chỉ cần đưa vào slicer, OBJ khi mô hình có texture để render hoặc đưa vào game engine, và 3MF khi slicer của bạn hỗ trợ và bạn muốn giữ nguyên đơn vị, màu sắc cùng nhiều chi tiết khi chuyển file. Định dạng quyết định siêu dữ liệu nào đi kèm lưới (mesh); nó không bao giờ quyết định bản thân lưới có hợp lệ hay không.

Jonas WeberJonas WeberBiên tập viên hiệu suất web
Cập nhật 12 phút đọc
Máy in 3D để bàn trong vỏ trong suốt trên bàn trắng, bên cạnh laptop hiển thị mô hình 3D và các chi tiết in nhiều màu, gồm một bản đồ địa hình và một bánh răng đỏ

STL: chỉ là danh sách tam giác

STL ra đời năm 1987 cho những máy tạo hình lập thể (stereolithography) đầu tiên của 3D Systems, và thiết kế của nó vẫn mang dấu ấn đó. Một tệp là danh sách phẳng các tam giác, mỗi tam giác được mô tả bằng pháp tuyến mặt và ba điểm góc. Không có bảng đỉnh dùng chung, nên một góc chạm sáu tam giác sẽ được ghi sáu lần. Cũng không có trường đơn vị: tọa độ 25 có thể là milimét, inch hoặc mét, và gần như mọi slicer đều đoán là milimét. Màu sắc, texture và tên chi tiết không có chỗ trong định dạng gốc, chính vì vậy mọi slicer, phần mềm CAD và dịch vụ in vẫn đọc được nó.

STL có hai kiểu mã hóa. STL ASCII viết mọi thứ dưới dạng văn bản, với các dòng như facet normal, outer loop và vertex 12.5 0 3.2, nên bạn có thể mở bằng trình soạn thảo văn bản và đọc các con số. STL nhị phân bắt đầu bằng phần đầu 80 byte và số lượng tam giác 4 byte, sau đó lưu mỗi tam giác bằng mười hai số thực 4 byte cùng một trường thuộc tính 2 byte: đúng 50 byte cho mỗi tam giác. Quy tắc đó giúp dễ dự đoán dung lượng. Một mô hình một triệu tam giác nặng khoảng 50 MB ở dạng nhị phân, còn bản ASCII của cùng lưới thường lớn hơn bốn đến sáu lần vì mỗi chữ số trở thành một ký tự.

Sự đơn giản vừa là điểm mạnh vừa là cái bẫy. Một tệp STL không cho bạn biết nó vốn là một chi tiết hay ba, có được xuất theo inch hay không, hoặc các tam giác có thực sự bao kín một khối đặc hay không. Slicer phải tự suy ra từ tọa độ thô, và khi đoán sai bạn sẽ có chi tiết nhỏ hơn 25,4 lần hoặc thiếu một bức tường. Với chi tiết một màu do bạn tự thiết kế và xuất theo milimét, những điều đó không quan trọng, và STL vẫn là định dạng ít bị từ chối nhất.

OBJ: đa giác, UV và file vật liệu đi kèm

OBJ xuất phát từ Wavefront Technologies, có phần mềm Advanced Visualizer dùng nó vào cuối thập niên 1980, rồi lan rộng trong thập niên 1990 như định dạng văn bản thuần mà hầu hết chương trình 3D đều trao đổi được. Khác với STL, nó giữ danh sách đỉnh và tạo mặt từ các chỉ số, nên một góc dùng chung chỉ được lưu một lần, và mặt có thể là tam giác, tứ giác hoặc đa giác lớn hơn. Các dòng bắt đầu bằng v chứa vị trí, vt là tọa độ texture (UV), vn là pháp tuyến và f là các mặt. Nhóm (g) và đối tượng (o) đặt tên cho các bộ phận, nhờ vậy OBJ qua Blender, Maya hay ZBrush vẫn giữ nguyên cấu trúc.

Giao diện hiển thị nằm ngoài tệp .obj. Một dòng mtllib nêu tên tệp .mtl đi kèm, và các dòng usemtl gán vật liệu cho mặt. Tệp .mtl lưu màu như Kd (khuếch tán) và trỏ tới ảnh texture bằng các mục như map_Kd wood.png. Vì vậy OBJ có texture gồm ít nhất ba tệp: hình học, thư viện vật liệu và một hoặc nhiều ảnh, tất cả được tham chiếu bằng đường dẫn tương đối. Nếu chỉ gửi tệp .obj, người nhận sẽ thấy một mô hình màu xám. Cách tách này hữu ích trong quy trình game và VFX, nơi họa sĩ đổi texture mà không đụng tới hình học, và đó cũng là lý do phổ biến nhất khiến mô hình tải về trông sai.

OBJ cũng có điểm mù về tỉ lệ giống STL: nó lưu số thuần túy không kèm đơn vị. Hầu hết công cụ dựng mô hình ghi theo mét hoặc xentimét, trong khi slicer đọc theo milimét, nên một OBJ từ cửa hàng tài nguyên game có thể lệch 10 hoặc 1.000 lần. Với việc in, OBJ không thêm gì mà slicer dùng được, trừ màu theo đỉnh ở vài công cụ, nên nếu cần in một tài nguyên nghệ thuật thì thường đơn giản nhất là giữ texture cho việc render và đưa slicer một lưới sạch. Theo chiều ngược lại, chuyển STL sang OBJ là đường ngắn nhất từ mô hình in sang quy trình render hoặc game.

3MF: gói ZIP được thiết kế cho in 3D

3MF được công bố năm 2015 bởi 3MF Consortium, một nhóm do Microsoft khởi xướng cùng các công ty trong ngành in và CAD. Tệp .3mf là một kho lưu trữ ZIP, cùng loại vùng chứa đã nói trong ZIP vs RAR vs 7z. Đổi đuôi thành .zip bạn sẽ thấy tệp XML 3D/3dmodel.model chứa lưới, một tệp content-types, các tệp quan hệ và thường có cả ảnh thu nhỏ lẫn cấu hình slicer. Mỗi mô hình khai báo đơn vị (micron, milimét, xentimét, inch, foot hoặc mét), nên vấn đề tỉ lệ vốn làm khổ STL và OBJ đơn giản là không xảy ra. Màu sắc, vật liệu cơ bản, nhiều đối tượng và vị trí của chúng trên bàn in đều nằm trong đặc tả.

Đặc tả cũng yêu cầu lưới phải manifold và có hướng nhất quán: mỗi cạnh được đúng hai tam giác chia sẻ, tất cả hướng ra ngoài. Các trình xuất tuân theo quy tắc sẽ không ghi được hình học hở, tự cắt nhau mà STL vẫn chứa được. Mức hỗ trợ khá rộng ở các công cụ hiện nay. PrusaSlicer, Bambu Studio, OrcaSlicer và UltiMaker Cura đọc được 3MF, PrusaSlicer và Bambu Studio lưu cả dự án thành .3mf kèm cài đặt in và màu đã tô, còn ứng dụng 3D Builder của Microsoft trên Windows mở trực tiếp. Điểm yếu là firmware cũ, cổng của trang trại in và trình nhập CAD vẫn chỉ mong đợi STL; với những nơi đó, hãy chuyển 3MF sang STL và chấp nhận rằng phần bổ sung sẽ bị bỏ lại.

from ↓ · to →UnitsColorTexturesNhiều chi tiếtCài đặt inQuy tắc manifold
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to Nhiều chi tiết: no– STL to Cài đặt in: no– STL to Quy tắc manifold: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to Nhiều chi tiết: yes– OBJ to Cài đặt in: no– OBJ to Quy tắc manifold: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to Nhiều chi tiết: yes3MF to Cài đặt in: yes3MF to Quy tắc manifold: yes
supported not offeredHàng là các định dạng, cột là những gì bản thân tệp có thể chứa. Màu và texture của OBJ cần tệp .mtl và ảnh riêng; texture của 3MF đến từ phần mở rộng vật liệu. Một vài công cụ ghi màu vào các byte không dùng của STL nhị phân, nhưng không có tiêu chuẩn nào quy định điều đó.
Một hàng máy in 3D khung hở trên các bàn gỗ, chiếc gần nhất có vài chi tiết hình trụ màu xanh trên bàn in
Ảnh: Unsplash

Chọn định dạng phù hợp với công việc

Định dạng phù hợp phụ thuộc vào nơi tệp sẽ đến tiếp theo, không phải định dạng nào mới hơn. Nếu bước tiếp theo là slicer và chi tiết chỉ một màu, STL là đủ, và nó vẫn là định dạng mà mọi diễn đàn, thư viện mô hình và dịch vụ in đều hiểu. Nếu bước tiếp theo là trình render, game engine hoặc công cụ dựng mô hình của họa sĩ khác, OBJ giữ lại UV, pháp tuyến và các nhóm có tên mà STL bỏ đi, và dạng văn bản giúp dễ kiểm tra lỗi.

3MF có giá trị khi tệp chứa nhiều hơn hình học. Một bản in nhiều màu tô trong Bambu Studio, một bàn in gồm mười hai chi tiết sắp xếp cho một lần in, một chi tiết thiết kế theo inch, hoặc một dự án bạn muốn mở lại với cùng chiều cao lớp và độ đặc đều cần 3MF, vì không định dạng nào khác ở đây giữ được thông tin đó. Nếu có nhiều đích đến, hãy giữ phiên bản đầy đủ nhất làm bản gốc và xuất các bản đơn giản hơn từ đó bằng công cụ chuyển đổi mô hình 3D thay vì chuyển đổi nối tiếp nhiều lần.

STL cho bản in đơn giản

Một chi tiết, một màu, xuất theo milimét. Mở được trong mọi slicer, hộp thoại nhập CAD và biểu mẫu tải lên của dịch vụ in.

OBJ cho mô hình có texture

UV, pháp tuyến và nhóm có tên cho Blender, Maya, Unity hoặc Unreal. Gửi kèm tệp .mtl và các ảnh texture.

3MF cho slicer hiện đại

Đơn vị thật, màu sắc, nhiều đối tượng và cài đặt in trong một tệp ZIP. Là định dạng dự án gốc của PrusaSlicer và Bambu Studio.

Năm lỗi thường gặp ở file 3D

Phần lớn bản in hỏng và lần nhập lỗi bị đổ cho định dạng thực ra là lỗi của lưới, hoặc do chương trình nhận đã giả định sai về nó. STL dễ gặp nhất vì không mang siêu dữ liệu để bắt lỗi; OBJ cũng có vấn đề về tỉ lệ và thiếu tệp; 3MF tránh được phần lớn nhờ thiết kế, dù một trình xuất cẩu thả vẫn có thể ghi ra lưới xấu. Hãy mở các hàng dưới đây để xem từng lỗi trông thế nào và thường bắt nguồn từ đâu.

Lưới non-manifold

Cạnh chỉ có một tam giác hoặc có từ ba tam giác trở lên, khe hở giữa các bề mặt, hoặc tường có độ dày bằng không. Slicer hiện thiếu lớp, lỗ ngẫu nhiên hoặc cảnh báo về cạnh hở. Nguyên nhân nằm ở khâu dựng mô hình hoặc xuất, thường do gộp các chi tiết chỉ chạm nhau.

Pháp tuyến bị đảo

Một số tam giác hướng vào trong. Trình render hiện các mảng đen hoặc trong suốt, còn slicer có thể coi vùng đó là không gian trống. Lệnh tính lại pháp tuyến trong Blender, Meshmixer hoặc công cụ sửa lỗi của slicer sẽ khắc phục được.

Nhầm lẫn milimét và inch

Chi tiết vẽ theo inch khi vào slicer giả định milimét sẽ nhỏ hơn 25,4 lần; xentimét bị đọc thành milimét gây sai số 10 lần. STL và OBJ không ghi được đơn vị, nên bạn phải đặt đơn vị khi xuất hoặc chuyển đổi.

Thiếu tệp .mtl hoặc texture

OBJ hiện màu xám hoặc màu tím hồng là do mất thư viện vật liệu hoặc ảnh, hoặc đường dẫn trong .mtl trỏ tới thư mục trên máy của họa sĩ ban đầu. Hãy để mọi tệp trong một thư mục và nén ZIP cùng nhau.

Tệp STL ASCII quá lớn

Một bản quét chi tiết lưu dạng STL ASCII có thể vượt vài trăm megabyte, làm slicer chậm và chạm giới hạn tải lên. Xuất lại cùng lưới đó thành STL nhị phân sẽ giảm còn khoảng một phần năm mà không đổi một tam giác nào.

Dung lượng thường gặp của từng định dạng

Dung lượng phụ thuộc vào cấu trúc. STL nhị phân cố định 50 byte cho mỗi tam giác, nên bạn có thể tính trước khi xuất. STL ASCII lặp lại mỗi góc dưới dạng văn bản và thường lớn hơn bản nhị phân bốn đến sáu lần. OBJ lưu mỗi đỉnh dùng chung một lần và tham chiếu bằng chỉ số, nên với lưới kín thông thường nó nhỏ hơn STL ASCII và gần mức của STL nhị phân, lớn hơn nếu có thêm UV và pháp tuyến. 3MF lưu XML có chỉ mục rồi nén trong ZIP, nên thường nhỏ nhất trong ba định dạng với cùng hình học.

Các số liệu dưới đây là điển hình cho một lưới kín khoảng 500.000 tam giác, chẳng hạn một tượng nhỏ chi tiết. Tệp thực tế thay đổi theo độ chính xác tọa độ và trình xuất, nên hãy xem đó là bậc độ lớn, hữu ích khi dịch vụ in giới hạn tải lên hoặc khi STL xuất từ 3MF lớn hơn vài lần.

STL nhị phân (500.000 tam giác × 50 byte)
≈ 25 MB
STL ASCII, cùng lưới, điển hình
≈ 100–150 MB
OBJ không có UV, điển hình
≈ 15–30 MB
3MF sau khi nén ZIP, điển hình
≈ 5–12 MB

Chuyển đổi file 3D sửa được gì và không bao giờ sửa được gì

Chuyển đổi đọc các tam giác từ một vùng chứa và ghi vào vùng chứa khác. Cái gì định dạng đích diễn đạt được thì được mang theo; cái gì không thì bị bỏ. Vì vậy STL sang OBJ không mất gì về hình học, 3MF sang STL mất màu, đơn vị và bố cục bàn in, còn OBJ sang STL mất texture và tên chi tiết. Trong các công cụ 3D của UltKit, những quyết định bổ sung được nêu rõ: Đơn vị mô hình cho bộ chuyển đổi biết tỉ lệ của nguồn, Trục hướng lên xử lý khác biệt Y hướng lên và Z hướng lên giữa game engine và slicer, còn Gộp thành một lưới quyết định các chi tiết riêng có được giữ riêng hay không.

Không có phép chuyển đổi nào sửa được lưới. Nếu STL có lỗ, OBJ tạo từ nó cũng có đúng lỗ đó, và trình xuất 3MF sẽ từ chối hoặc vẫn ghi ra. Sửa lỗi là một bước riêng trong công cụ lưới hoặc trình sửa tích hợp của slicer, và tốt nhất làm một lần trên tệp gốc trước khi xuất bất kỳ định dạng nào khác. Tỉ lệ cũng vậy: chuyển đổi không thể biết chi tiết vốn tính theo inch nếu bạn không nói. Mức chi tiết cũng tương tự: STL ít đa giác thành OBJ hoặc 3MF ít đa giác, nên hãy xuất lại từ mô hình nguồn khi cần chất lượng.

Đổi định dạng làm được gì

  • Chuyển cùng các tam giác sang vùng chứa mà chương trình khác chấp nhận
  • Áp dụng đơn vị bạn chọn ở Đơn vị mô hình, sửa lỗi tỉ lệ 25,4 lần hoặc 10 lần
  • Xoay mô hình giữa Y hướng lên và Z hướng lên bằng Trục hướng lên
  • Giảm dung lượng STL ASCII bằng cách ghi dạng nhị phân
  • Giữ riêng hoặc gộp các chi tiết, tùy theo Gộp thành một lưới

Những gì nó giữ nguyên như cũ

  • Lỗ hổng, cạnh hở và hình học non-manifold
  • Pháp tuyến bị đảo hoặc không nhất quán
  • Chi tiết tự cắt nhau và tường dày bằng không
  • Chi tiết đã mất ngay từ lần xuất lưới đầu tiên
  • Màu sắc và texture khi định dạng đích không có chỗ chứa

Bảng lựa chọn: STL, OBJ hay 3MF

Có hai định dạng khác thường xuất hiện khi câu hỏi này được đặt ra. STEP (ISO 10303) lưu khối đặc và bề mặt chính xác thay vì tam giác, nên là định dạng cần dùng khi chi tiết phải quay lại Fusion 360, SolidWorks hoặc FreeCAD để chỉnh sửa. GLB, dạng nhị phân của glTF 2.0 do Khronos Group phát triển, gói lưới cùng vật liệu và texture vào một tệp tính theo mét và là định dạng để hiển thị mô hình trên web hoặc trong AR của Android.

Với ba định dạng bài này bàn tới, bảng dưới đây tóm tắt lựa chọn theo đích đến. Nếu hai hàng đều hợp, hãy chọn định dạng mang nhiều thông tin hơn và xuất bản đơn giản hơn sau; chuyển từ 3MF sang STL thì dễ, còn dựng lại màu hay đơn vị đã mất là việc thủ công.

Chọn theo nơi tệp sẽ đến tiếp theo
Tình huốngĐịnh dạng tốt nhấtLý do
Chi tiết một màu gửi tới bất kỳ slicer nàoSTL (nhị phân)Được hỗ trợ phổ biến; slicer không cần gì thêm
Tải lên thư viện mô hình hoặc dịch vụ inSTL, thêm 3MF nếu được hỗ trợSTL luôn được chấp nhận; 3MF giữ đơn vị và màu
Bản in nhiều màu hoặc nhiều vật liệu3MFĐịnh dạng duy nhất ở đây lưu màu và vật liệu từng chi tiết cho slicer
Bàn in gồm nhiều chi tiết kèm cài đặt in3MFLưu vị trí đối tượng và cài đặt slicer trong một tệp
Chi tiết thiết kế theo inch3MFKhai báo đơn vị, nên không bị nhân tỉ lệ 25,4
Mô hình có texture cho Blender, Unity hoặc UnrealOBJ (+ .mtl và ảnh)Giữ UV, pháp tuyến và việc gán vật liệu
Kiểm tra nhanh bằng trình soạn thảo văn bảnOBJ hoặc STL ASCIIVăn bản thuần, đọc được từng dòng
Firmware hoặc phần mềm cũ chỉ liệt kê STLSTLBỏ phần bổ sung và gửi lưới

Điểm chính cần nhớ

  • STL chỉ lưu tam giác: không đơn vị, không màu, và 50 byte cho mỗi tam giác ở dạng nhị phân.
  • OBJ thêm UV, pháp tuyến và nhóm có tên, nhưng màu và texture phụ thuộc vào tệp .mtl và các tệp ảnh riêng.
  • 3MF là tệp ZIP chứa XML, ghi đơn vị, màu, nhiều đối tượng và cài đặt in, đồng thời yêu cầu lưới kín.
  • Dùng STL cho bản in một màu đơn giản, OBJ cho mô hình có texture trong quy trình nghệ thuật và game, và 3MF bất cứ khi nào slicer của bạn hỗ trợ.
  • Chuyển đổi chỉ đổi vùng chứa, không đổi lưới: hãy sửa lỗ và pháp tuyến trong công cụ lưới, và tự đặt đơn vị.
Chia sẻXFacebookWhatsAppTelegram

Câu hỏi thường gặp

3MF có đang thay thế STL không?

Chậm thôi, nếu nói về quy trình in 3D. PrusaSlicer và Bambu Studio đã lưu dự án dưới dạng 3MF, nhưng STL vẫn là định dạng mà mọi công cụ và thư viện mô hình đều hỗ trợ, nên hai định dạng này sẽ cùng tồn tại trong nhiều năm nữa.

STL dạng nhị phân có lưu được màu không?

Không theo cách chuẩn nào cả. Một số phần mềm ghi màu vào trường thuộc tính 2 byte của từng tam giác, nhưng hầu hết phần mềm slicer đều bỏ qua, vì vậy hãy dùng 3MF hoặc OBJ khi màu sắc quan trọng.

Vì sao file OBJ hiện màu xám sau khi tải xuống?

File .mtl hoặc các ảnh texture đã bị bỏ sót, hoặc đường dẫn bên trong file .mtl trỏ tới những thư mục không tồn tại trên máy tính của bạn. Hãy đặt file .obj, .mtl và các ảnh vào cùng một thư mục rồi tải lại mô hình.

STL dạng ASCII hay nhị phân cho bản in chính xác hơn?

Trên thực tế, cả hai đều không in chính xác hơn. Cả hai mô tả cùng các tam giác như nhau; bản binary lưu tọa độ dưới dạng số thực 32-bit còn ASCII lưu dưới dạng văn bản, và file binary thường nhỏ hơn nhiều lần.

Có thể chuyển OBJ ngược lại sang STL để in không?

Được. Các tam giác được giữ nguyên, còn UV, vật liệu và texture sẽ bị loại bỏ vì STL không có chỗ lưu những thông tin này. Hãy kiểm tra lại tỉ lệ sau đó, vì file OBJ từ các công cụ dựng mô hình thường dùng đơn vị mét hoặc centimet.

Nên dùng định dạng nào để chia sẻ mô hình cho người khác in?

Hãy cung cấp một file STL để đạt khả năng tương thích rộng nhất. Nếu mô hình có nhiều bộ phận, nhiều màu hoặc được thiết kế theo inch, hãy thêm một file 3MF bên cạnh để người dùng slicer đời mới có đầy đủ thiết lập.

Đọc tiếp