บทความ › เครื่องมือและความปลอดภัย
OpenSCAD กับ Manifold เรนเดอร์ของเล่นแบบ พาราเมตริก ได้เร็วขึ้นแค่ไหนจริง
Manifold คือเอนจินเรขาคณิตใหม่ของ OpenSCAD ทำให้เรนเดอร์เร็วขึ้นมาก แต่ตัวเลขกี่เท่าส่วนใหญ่มาจากผู้ใช้ บทนี้แยกว่าอะไรยืนยันได้ อะไรเป็นเรื่องเล่า และวัดเองยังไง
- Manifold เป็นเอนจินค่าตั้งต้นใน development snapshot ของ OpenSCAD ตั้งแต่สิงหาคม 2025 ส่วนรุ่น stable บนหน้าดาวน์โหลดยังเป็น 2021.01
- ฝั่งทางการบอกแค่ว่าเร็วขึ้นมาก ไม่ให้ตัวเลข ตัวเลขกี่เท่าที่เห็นกันมาจากผู้พัฒนา Manifold และผู้ใช้แต่ละคน ต่างกันตามโมเดล
- วัดเองได้ง่าย คอนโซลพิมพ์ Total rendering time ให้ทุกครั้งที่กด F6 เทียบสองเอนจินด้วยไฟล์เดียวกัน
- ความละเอียดวงกลมมีผลกับความพอดี ค่าตั้งต้นทำให้รูเล็กแคบลงได้หลายทศนิยมมิลลิเมตร ตั้ง $fn หรือ $fs เอง
OpenSCAD คือ CAD แบบเขียนโค้ด เหมาะกับของเล่นที่อยากปรับขนาดได้ เช่น ล้อรถ กล่อง หรือชิ้นต่อ แต่จุดอ่อนเดิมคือการเรนเดอร์ (F6) ช้ามากเมื่อมีรูปทรงซ้อนกันเยอะ เอนจินเรขาคณิตตัวใหม่ชื่อ Manifold แก้ตรงนี้ได้มาก บทนี้บอกว่าตอนนี้อยู่ในรุ่นไหน เปิดยังไง และตัวเลข “เร็วกว่ากี่เท่า” ที่เห็นกันนั้น อันไหนยืนยันได้ อันไหนเป็นประสบการณ์ของคนคนเดียว
ถ้ายังเลือกไม่ได้ว่าจะใช้ CAD ตัวไหน อ่านเลือก CAD ให้งานพิมพ์ 3 มิติ ก่อน บทนี้ต่อจากส่วน OpenSCAD ในบทนั้น
Manifold อยู่ในรุ่นไหน
- 17 สิงหาคม 2025: ผู้ดูแลหลักของ OpenSCAD ประกาศในเมลลิงลิสต์ว่า Manifold เป็นเอนจินค่าตั้งต้นของ development snapshot ตั้งแต่ nightly ถัดไป
- หน้าดาวน์โหลดทางการ: รุ่น stable ยังเป็น 2021.01 ซึ่งไม่มี Manifold ส่วน nightly มีข้อความชวนเปิด Manifold ใน Preferences
- ตุลาคม 2026: มี release candidate ชื่อ 2026.10-TEST4 ให้ทดลอง
อยากกลับไปใช้เอนจินเดิม (CGAL) เลือกใน Preferences หรือสั่ง openscad --backend=cgal
เร็วขึ้นกี่เท่า: แยกให้ชัดว่าใครวัด
| ที่มา | ตัวเลข | น้ำหนักของหลักฐาน |
|---|---|---|
| ประกาศของ OpenSCAD (2025) | “เร็วขึ้นอย่างมีนัยสำคัญ” ไม่มีตัวเลข | ทางการ แต่ไม่มีข้อมูลวัด |
| หน้าดาวน์โหลด OpenSCAD | “huge performance boost” ไม่มีตัวเลข | ทางการ แต่ไม่มีข้อมูลวัด |
| ผู้พัฒนา Manifold (GitHub) | 100–1,000 เท่า เทียบ OpenSCAD เดิม | วัดโดยผู้สร้างเอง ไม่ระบุโมเดล |
| ผู้ใช้ใน GitHub discussion | 5–30 เท่า เทียบโหมด fast-csg | วัดโดยผู้ใช้ ไม่ระบุโมเดลในหน้านั้น |
| ผู้ใช้ในเมลลิงลิสต์ (2025) | 12 นาที 25 วินาที → 51 วินาที | โมเดลเดียว เครื่องเดียว |
สรุปที่ตรงที่สุดคือ เร็วขึ้นมากจริง และยืนยันตรงกันหลายแหล่ง แต่ตัวเลขกี่เท่าเป็นเรื่องเฉพาะโมเดล ไม่มีชุดทดสอบมาตรฐานจากโปรเจกต์ ตัวเลขสูงสุดมาจากคนสร้าง Manifold เอง ควรอ่านแบบนั้น
อย่าเชื่อตัวเลขกี่เท่าจากที่ไหนจนกว่าจะวัดกับโมเดลของเราเอง ใช้เวลาไม่ถึงสิบนาที
ตัวอย่างคำนวณ: เวลาที่ได้คืนตอนทำหลายขนาด
ใช้ตัวเลขจากเมลลิงลิสต์ (ผนังสถานีรถไฟจำลอง มีหิน ประตู หน้าต่าง เครื่อง 12 คอร์ RAM 16 GB, OpenSCAD 2025.07.17) เป็นตัวอย่าง ไม่ใช่ค่าที่โมเดลเราจะได้
- CGAL: 12 นาที 25 วินาที = 745 วินาที
- Manifold: 51 วินาที
- อัตราส่วน = 745 ÷ 51 ≈ 14.6 เท่า
- ถ้าต้อง export 10 ขนาด: CGAL = 10 × 745 ÷ 60 ≈ 124 นาที Manifold = 10 × 51 ÷ 60 = 8.5 นาที
ต่างกันระหว่าง “ตั้งไว้ข้ามคืน” กับ “ไปชงกาแฟ” นี่คือเหตุผลที่ Manifold สำคัญกับงานพาราเมตริก เพราะงานพาราเมตริกคือการเรนเดอร์ซ้ำหลายรอบ
วัดเองกับโมเดลของเรา
คอนโซลของ OpenSCAD พิมพ์บรรทัด Total rendering time หลังกด F6 ทุกครั้ง วิธีเทียบที่ยุติธรรม
- ใช้ไฟล์ .scad เดียวกัน ค่า
$fnเดียวกัน - เรนเดอร์ด้วยเอนจินหนึ่ง จดเวลา แล้วล้างแคช (Design → Flush Caches) หรือเปิดโปรแกรมใหม่ก่อนลองอีกเอนจิน เพราะ OpenSCAD เก็บแคชผลเรนเดอร์
- ทำซ้ำ 3 รอบ ใช้ค่ากลาง
หรือสั่งจากบรรทัดคำสั่ง ซึ่งสะดวกกับการทำหลายขนาด
# เรนเดอร์ล้อขนาด 30 mm ด้วยเอนจิน CGAL เพื่อเทียบ
openscad --backend=cgal -o wheel_30_cgal.stl -D d=30 wheel.scad
# snapshot ปัจจุบันใช้ Manifold เป็นค่าตั้งต้น
openscad -o wheel_30.stl -D d=30 wheel.scad
ความละเอียดวงกลม: เรื่องที่กระทบความพอดีมากกว่าความเร็ว
เร็วขึ้นแล้ว หลายคนเพิ่ม $fn สูง ๆ ได้สบายใจขึ้น ซึ่งเกี่ยวกับความพอดีจริง เพราะ OpenSCAD วาดวงกลมเป็นรูปหลายเหลี่ยมที่อยู่ “ด้านใน” วงกลม รูจึงแคบกว่าที่ตั้งไว้
ค่าตั้งต้น $fa = 12 และ $fs = 2 จำนวนด้าน = ปัดขึ้นของ max(min(360 ÷ $fa, 2πr ÷ $fs), 5)
ตัวอย่าง: รูเพลาล้อ เพลา 5.0 mm เผื่อ 0.3 mm → รู 5.3 mm (r = 2.65)
- ค่าตั้งต้น: min(30, 2π × 2.65 ÷ 2 ≈ 8.33) = 8.33 → ปัดขึ้น 9 ด้าน
- ระยะที่ขอบแบนเว้าเข้าจากวงกลม = r × (1 − cos(180° ÷ 9)) = 2.65 × 0.060 ≈ 0.16 mm
- ตรงขอบแบน รูแคบลงสูงสุด 2 × 0.16 = 0.32 mm ระยะเผื่อ 0.3 mm แทบหายหมด
- ตั้ง
$fn = 64: 2.65 × (1 − cos(2.81°)) ≈ 0.003 mm แทบไม่มีผล
ระยะเผื่อที่เหมาะกับเครื่องเรา ดูขนาดแม่นและการสวมพอดี
โค้ดตัวอย่าง: ล้อของเล่นพาราเมตริก
// ล้อของเล่น ปรับ 4 บรรทัดแรก
d = 30; // เส้นผ่านศูนย์กลางล้อ mm
w = 10; // ความกว้างล้อ
axle = 5.0; // เพลา
clear = 0.3; // ระยะเผื่อ
$fn = 64;
difference() {
cylinder(h = w, d = d);
translate([0, 0, -1]) cylinder(h = w + 2, d = axle + clear);
}
เปิดแผง Customizer จะเห็นตัวแปรด้านบนเป็นช่องปรับค่า ส่งให้คนอื่นปรับเองได้โดยไม่ต้องอ่านโค้ด
ข้อผิดพลาดที่เจอบ่อย
- ใช้รุ่น stable 2021.01 แล้วสงสัยว่าทำไมไม่เร็ว ต้องเป็น snapshot หรือ release candidate
- อ้างตัวเลข 100 เท่าเป็นข้อเท็จจริงทั่วไป ตัวเลขนี้ขึ้นกับโมเดล และวัดโดยผู้สร้างเอนจิน
- เทียบเวลาโดยไม่ล้างแคช รอบสองเร็วเพราะแคช ไม่ใช่เพราะเอนจิน
- ปล่อย
$fnเป็นค่าตั้งต้นกับรูเล็ก รูแคบกว่าที่ตั้ง ชิ้นงานสวมไม่ลง - ไม่เทียบผลกับ CGAL เมื่อรูปทรงดูผิด เอนจินใหม่ยังมีบั๊กได้ ผู้ดูแลเองก็บอกไว้
แหล่งข้อมูล
คำถามที่พบบ่อย
ต้องเปลี่ยนโค้ด .scad เดิมไหม
ส่วนใหญ่ไม่ต้อง โค้ดเดิมเรนเดอร์ด้วย Manifold ได้ ผู้ดูแลโปรเจกต์บอกเองว่าคาดว่าจะมีคนเจอบั๊กใหม่ ถ้าผลผิดแปลก ลองเรนเดอร์ด้วย --backend=cgal เทียบ แล้วรายงานปัญหา
ใช้รุ่น stable 2021.01 จะได้ Manifold ไหม
ไม่ได้ ต้องใช้ development snapshot (nightly) หรือ release candidate ที่ใหม่กว่า snapshot รุ่นเก่ากว่าสิงหาคม 2025 ต้องเปิด Manifold ใน Preferences เอง
Preview (F5) เร็วขึ้นด้วยไหม
สิ่งที่เปลี่ยนชัดคือ Render (F6) ที่สร้างรูปทรงจริงสำหรับ export ในเมลลิงลิสต์มีนักพัฒนาให้ความเห็นว่า preview ยังเร็วกว่า Manifold เล็กน้อยกับโมเดลส่วนใหญ่ และการแสดงสีกับความโปร่งใสใน Manifold ยังไม่ครบ
วงจรและโค้ดในบทความทดสอบกับบอร์ดตัวอย่าง บอร์ดต่างรุ่นอาจใช้ขาต่างกัน ตรวจ pinout ของบอร์ดที่ใช้ก่อนต่อไฟเสมอ