บทความ › เครื่องมือและความปลอดภัย
ไฟล์ STL 3MF STEP OBJ ต่างกันยังไง เลือกแบบไหนส่งเข้า slicer
STL เก็บแค่สามเหลี่ยมไม่มีหน่วย 3MF เก็บหน่วย สี และค่าพิมพ์ STEP เก็บผิวโค้งจริงแก้ต่อได้ OBJ มาจากงานกราฟิก พร้อมวิธีตั้งความละเอียดตอน export ไม่ให้รูกลายเป็นเหลี่ยม
- STL มีแต่สามเหลี่ยม ไม่มีหน่วย slicer เดาว่าเป็นมิลลิเมตร ไฟล์ที่ออกแบบเป็นนิ้วจึงเล็กลง 25.4 เท่า
- 3MF ระบุหน่วยในไฟล์ (ค่าเริ่มต้นมิลลิเมตร) เก็บหลายชิ้น สี วัสดุ และ slicer ใช้เก็บโปรเจกต์พร้อมค่าพิมพ์
- STEP เก็บผิวแบบคณิตศาสตร์ เปิดแก้ใน CAD ตัวอื่นได้ ใช้ส่งต่อแบบให้คนออกแบบ ไม่ใช่แค่ส่งให้เครื่องพิมพ์
- ตอน export เป็น mesh ตั้งค่าความเบี่ยงเบนให้เล็กพอ รูขนาดเล็กจะได้ไม่เป็นเหลี่ยมจนน็อตใส่ไม่ลง
ไฟล์สำหรับงานพิมพ์ 3 มิติมีสี่แบบที่เจอบ่อย: STL สามเหลี่ยมล้วน ไม่มีหน่วย 3MF สามเหลี่ยมพร้อมหน่วย สี และค่าพิมพ์ในไฟล์เดียว STEP ผิวโค้งแบบคณิตศาสตร์ที่ CAD เปิดแก้ต่อได้ และ OBJ จากงานกราฟิก ใช้ STL หรือ 3MF ส่งเข้า slicer ใช้ STEP ส่งต่อแบบ และเก็บไฟล์ต้นฉบับของ CAD ไว้เสมอ บทนี้อธิบายว่าแต่ละแบบเก็บอะไร และตั้งความละเอียดตอน export ยังไง
Mesh กับ solid: รากของความต่าง
- Mesh แทนผิวด้วยสามเหลี่ยมแบน ๆ ทรงกระบอกจึงเป็นปริซึมหลายเหลี่ยม ยิ่งสามเหลี่ยมมากยิ่งกลม STL, 3MF, OBJ เป็นแบบนี้
- Solid (B-rep) เก็บผิวเป็นสมการ ทรงกระบอกคือทรงกระบอกจริง รัศมี 5 mm ทุกจุด STEP เป็นแบบนี้ และไฟล์ต้นฉบับของ CAD parametric ก็เช่นกัน
slicer ทุกตัวทำงานบน mesh แม้เปิด STEP ได้ ก็แปลงเป็นสามเหลี่ยมตอนนำเข้า (PrusaSlicer เขียนไว้ในคู่มือว่า STEP ถูก triangulate ตอน import) ความต่างคือใครเป็นคนแปลง และแปลงละเอียดแค่ไหน
ตารางเทียบสี่แบบ
| STL | 3MF | STEP | OBJ | |
|---|---|---|---|---|
| เก็บผิวแบบ | mesh | mesh | solid (ผิวจริง) | mesh |
| หน่วย | ไม่มี | มี ค่าเริ่มต้น mm | มี | ไม่มีมาตรฐาน |
| สี / วัสดุ | ไม่มีมาตรฐาน | มี (ส่วนขยาย Materials) | ไม่ใช้ในงานพิมพ์ | มี แต่ slicer มักไม่อ่าน |
| หลายชิ้นในไฟล์ | ชิ้นเดียวต่อไฟล์ (ตามนิยามรูปแบบ) | ได้ พร้อมตำแหน่ง | ได้ | ได้ |
| ค่าพิมพ์ของ slicer | ไม่มี | slicer เก็บโปรเจกต์ได้ | ไม่มี | ไม่มี |
| แก้แบบต่อใน CAD | ยาก | ยาก | ได้ | ยาก |
| ใช้เมื่อ | ส่งเข้าเครื่องพิมพ์ เข้ากันได้กว้างสุด | ส่งงานพร้อมค่าพิมพ์ | ส่งแบบให้คนออกแบบต่อ | โมเดลจากงานกราฟิก/สแกน |
STL: เรียบง่ายที่สุด จึงอยู่มานานที่สุด
STL เก็บแค่รายการสามเหลี่ยม แต่ละอันมีจุดยอด 3 จุดกับเวกเตอร์ตั้งฉาก ไม่มีสี ไม่มีหน่วย Library of Congress บันทึกโครงสร้างแบบ binary ไว้: ส่วนหัว 80 ไบต์ ตัวเลขจำนวนสามเหลี่ยม 4 ไบต์ แล้วสามเหลี่ยมละ 50 ไบต์
ตัวอย่างคำนวณขนาดไฟล์ ฟิกเกอร์ 200,000 สามเหลี่ยม
- 80 + 4 = 84 ไบต์ส่วนหัว
- 200,000 × 50 = 10,000,000 ไบต์
- รวม 10,000,084 ไบต์ ≈ 10 MB แบบ ASCII ใหญ่กว่านี้หลายเท่าเพราะเก็บตัวเลขเป็นข้อความ
ปัญหาเรื่องหน่วย: ตัวเลข 10 ใน STL ไม่รู้ว่าเป็น 10 mm หรือ 10 นิ้ว slicer ส่วนใหญ่ถือว่าเป็นมิลลิเมตร ไฟล์ที่ออกแบบเป็นนิ้วจึงเล็กลง 25.4 เท่า แก้ด้วยการขยาย 2540% หรือคำสั่ง “convert from imperial units” ใน PrusaSlicer
STL ไม่บอกหน่วย ทุกครั้งที่โหลดไฟล์จากที่อื่น วัดขนาดใน slicer ก่อนกดพิมพ์
3MF: ไฟล์เดียวครบทั้งงาน
3MF เป็นมาตรฐานเปิดจาก 3MF Consortium (เป็นมาตรฐาน ISO/IEC 25422:2025 แล้ว) ข้างในคือแพ็กเกจ ZIP ที่มี XML ตามหลัก Open Packaging Conventions สิ่งที่ได้เพิ่มจาก STL:
- หน่วยระบุในไฟล์ เลือกได้ตั้งแต่ micron ถึง meter ค่าเริ่มต้นมิลลิเมตร ปัญหาเล็ก 25.4 เท่าจึงหมดไป
- หลายชิ้นพร้อมตำแหน่ง เปิดแล้วจัดวางบนฐานพิมพ์เหมือนตอนบันทึก
- สีและวัสดุ ผ่านส่วนขยาย Materials and Properties ใช้กับงานหลายสี
- ค่าพิมพ์ PrusaSlicer ใช้ 3MF เป็นรูปแบบหลักและเก็บไฟล์โปรเจกต์ (ชิ้นงาน + การจัดวาง + ค่าพิมพ์) เป็น 3MF slicer รุ่นใหม่อื่น ๆ ก็ทำแบบเดียวกัน
ข้อควรรู้: ค่าพิมพ์ในโปรเจกต์ 3MF ของ slicer แต่ละค่ายเก็บในส่วนเฉพาะของโปรแกรมนั้น เปิดข้ามค่ายได้รูปทรง แต่ค่าพิมพ์อาจไม่ตามมาครบ
STEP: ส่งแบบ ไม่ใช่ส่งงานพิมพ์
STEP เป็นมาตรฐานแลกเปลี่ยนแบบระหว่างโปรแกรม CAD เก็บผิวโค้งจริง เปิดใน Fusion, Onshape, FreeCAD แล้วเจาะรูเพิ่ม ตัดมุม หรือวัดขนาดได้ถูกต้อง แต่ไม่มีประวัติขั้นตอน (history) ของคนออกแบบเดิมติดมาด้วย
PrusaSlicer เปิด STEP ได้ตั้งแต่เวอร์ชัน 2.5 และแปลงเป็น mesh ตอนนำเข้า สะดวกเมื่อมีแค่ไฟล์ STEP แต่ความละเอียดตอนแปลงขึ้นกับ slicer ไม่ใช่เรา
ผู้ผลิตชิ้นส่วนมักให้ STEP ของบอร์ด สวิตช์ หรือขั้วต่อ ดาวน์โหลดมาวางใน CAD เพื่อออกแบบกล่องรอบมันได้พอดี
OBJ: มาจากโลกกราฟิก
OBJ เป็น mesh ที่ใช้กันมากในงานกราฟิก 3 มิติและงานสแกน เก็บพิกัดพื้นผิวและอ้างไฟล์วัสดุแยก (.mtl) ได้ PrusaSlicer ระบุว่าข้อมูลวัสดุและพื้นผิวถูกข้ามตอน import ได้แค่รูปทรง ใช้เมื่อโมเดลมาจาก Blender หรือเครื่องสแกนเท่านั้น
ตั้งความละเอียดตอน export ให้รูไม่เป็นเหลี่ยม
ตอนแปลง solid เป็น mesh โปรแกรมต้องเลือกว่าใช้สามเหลี่ยมกี่อัน Fusion ให้ตั้ง surface deviation (ระยะที่ mesh ห่างจากผิวจริงได้), normal deviation (มุมเบี่ยง), maximum edge length และ aspect ratio หรือเลือกชุดสำเร็จ Low/Medium/High FreeCAD และ OpenSCAD ก็มีค่าคล้ายกัน (OpenSCAD ใช้ $fn กำหนดจำนวนเหลี่ยมของวงกลม)
ตัวอย่างคำนวณ: ทรงกระบอกรัศมี 10 mm ระยะที่ด้านแบนของรูปหลายเหลี่ยมเข้าไปจากวงกลมจริง = r × (1 − cos(180° ÷ N)) เมื่อ N คือจำนวนเหลี่ยม
- N = 12: 10 × (1 − cos 15°) = 10 × (1 − 0.9659) ≈ 0.34 mm เห็นเหลี่ยมชัด รูน็อตจะแคบลงตรงกลางด้าน
- N = 36: 10 × (1 − cos 5°) = 10 × (1 − 0.9962) ≈ 0.04 mm เล็กกว่าความกว้างเส้น 0.4 mm มาก มองไม่เห็น
- N = 90: 10 × (1 − cos 2°) ≈ 0.006 mm ละเอียดเกินกว่าเครื่อง FDM พิมพ์ได้ ไฟล์ใหญ่ขึ้นเปล่า ๆ
สรุปจากตัวเลขข้างบน: ตั้ง surface deviation ราว 0.01–0.05 mm พอสำหรับเครื่อง FDM หัว 0.4 mm ละเอียดกว่านั้นได้แค่ไฟล์ใหญ่
ข้อผิดพลาดที่เจอบ่อย
- เก็บแค่ STL ทิ้งไฟล์ต้นฉบับ แก้แบบทีหลังไม่ได้ ต้องวาดใหม่
- export ด้วยความละเอียดต่ำ รู 3 mm กลายเป็นหกเหลี่ยม น็อตใส่ไม่ลง แล้วไปโทษเครื่องพิมพ์
- ไม่เช็กขนาดหลังโหลด STL จากเว็บ พิมพ์ออกมาเล็กเท่าเม็ดถั่ว หรือใหญ่เกินฐาน
- ส่ง STL ให้คนที่ต้องแก้แบบต่อ ส่ง STEP แทน
- คาดว่าค่าพิมพ์ใน 3MF จะตามไปทุกโปรแกรม ข้ามค่าย slicer แล้วตรวจค่าใหม่ทุกครั้ง
บทก่อน: เลือกโปรแกรม CAD สำหรับงานพิมพ์ 3 มิติ
แหล่งข้อมูล
คำถามที่พบบ่อย
โหลดไฟล์จากเว็บแล้วชิ้นงานเล็กนิดเดียวใน slicer
มักเป็นไฟล์ที่ออกแบบเป็นนิ้วแล้ว export เป็น STL ซึ่งไม่มีหน่วย slicer อ่านเป็นมิลลิเมตร ขยาย 2540% (×25.4) หรือใช้คำสั่งแปลงหน่วยนิ้วที่ slicer มีให้ เช่นใน PrusaSlicer
ควรส่งไฟล์อะไรให้เพื่อนเอาไปพิมพ์
ส่ง 3MF ถ้าอยากให้ได้การจัดวางและค่าพิมพ์แบบเดียวกับเรา ส่ง STEP ถ้าเพื่อนต้องแก้แบบต่อ และแนบ STL ไว้ด้วยสำหรับโปรแกรมที่อ่านอย่างอื่นไม่ได้
STL แบบ ASCII กับ binary ต่างกันไหม
ข้อมูลรูปทรงเหมือนกัน แต่ binary เล็กกว่ามากและเป็นแบบที่ใช้กันทั่วไป slicer อ่านได้ทั้งสองแบบ ไม่มีเหตุผลต้องใช้ ASCII เว้นแต่อยากเปิดอ่านด้วยตา
วงจรและโค้ดในบทความทดสอบกับบอร์ดตัวอย่าง บอร์ดต่างรุ่นอาจใช้ขาต่างกัน ตรวจ pinout ของบอร์ดที่ใช้ก่อนต่อไฟเสมอ