แนะนำ
- Fidget เป็นไลบรารีที่ใช้ในการกำหนดคอมไพล์ และประเมินนิพจน์คณิตศาสตร์ขนาดใหญ่ โดยได้รับการออกแบบหลักเพื่อทำหน้าที่เป็น backend สำหรับ implicit surface
- ไลบรารีนี้สามารถใช้งานได้อย่างยืดหยุ่นในหลายกรณีการใช้งาน
implicit surface คืออะไร?
- implicit surface มีรูปแบบนิพจน์เป็น f(x, y, z)→d ซึ่งบ่งชี้ว่าเมื่อ d เป็นบวกจะแสดงตำแหน่งอยู่ภายนอกโมเดล และเมื่อ d เป็นลบจะแสดงตำแหน่งอยู่ภายในโมเดล
- ตัวอย่างเช่น ลูกกลมรัศมี 1 เขียนได้เป็น f(x, y, z)=x²+y²+z²−1
- Fidget มุ่งเน้น implicit surface แบบ closed-form ที่สร้างด้วยการดำเนินการคณิตศาสตร์พื้นฐาน
ข้อดีของ implicit surface
- implicit surface มีความกระชับและเหมาะสมกับการประเมินแบบขนานในขนาดใหญ่
- การดำเนินการ CSG (union, intersection ฯลฯ) สามารถจัดการได้อย่างง่ายดาย
- สมการรูปแบบปิดเหมาะกับการปรับแต่ง และสามารถติดตามได้ว่าในระหว่างการประเมินมี branch ใดถูกเลือก
ต้นกำเนิด
- เราศึกษาการเรนเดอร์และการประเมิน implicit surface มาเป็นเวลา 10 ปี
- Fidget เป็นโปรเจกต์วิจัยส่วนตัว และถูกเขียนด้วย Rust เพื่อให้ใช้งานง่ายขึ้นเมื่อเทียบกับ kernel เดิมอย่าง libfive
โครงสร้างไลบรารี
- Fidget มี 3 เลเยอร์หลักที่แยกกันอย่างชัดเจน และแอปพลิเคชันเดโม
Frontend: สร้างนิพจน์คณิตศาสตร์
- Fidget ใช้ภาษา Rhai ในการสร้างนิพจน์คณิตศาสตร์
- ต้นไม้คณิตศาสตร์ถูก deduplicate เป็น DAG
- SSA tape ทำให้กราฟถูกแปลงเป็นโค้ดเชิงเส้น
Backend: ประมวลผลที่รวดเร็วและยืดหยุ่น
- Backend ของ Fidget ถูกแยกออกจาก frontend และรองรับโหมดการประมวลผลหลากหลายแบบ
- JIT compiler จะแปลง bytecode เป็น machine instruction เพื่อประสิทธิภาพสูงสุด
อัลกอริทึม
- Fidget ใช้การประเมินที่รวดเร็วเป็นฐานในการสร้างอัลกอริทึมการเรนเดอร์และการทำ mesh ที่หลากหลาย
- การทำ mesh ใช้ Manifold Dual Contouring เพื่อรับประกันความเป็น manifold, watertight และการคงความคมของ feature
เดโม
- Fidget มีเดโมหลากหลาย โดยเฉพาะ web GUI เป็นส่วนที่น่าสนใจที่สุด
- ใช้เป็นโอกาสสำรวจเทคโนโลยีล่าสุดในการพัฒนาเว็บ
โอกาสในอนาคต
- การเพิ่ม backend ของ GPU, การปรับปรุงการทำ mesh, การสร้าง standard library และการเพิ่ม language bindings ระดับสูงอยู่ในแผนพิจารณา
สรุป
- Fidget เปิดใช้งานสาธารณะแล้ว และสามารถเพิ่มลงในโปรเจกต์ Rust ได้อย่างง่ายดาย
- นำเสนอด้วยไลเซนส์ที่เป็นมิตรต่อการใช้งานแบบโอเพนซอร์สและเชิงพาณิชย์
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
โครงการนี้ครอบคลุมหลายสาขาของวิทยาการคอมพิวเตอร์ รวมถึงโครงสร้างข้อมูล อัลกอริทึม งานปรับแต่งประสิทธิภาพระดับล่าง คอมไพเลอร์ การเรนเดอร์/คอมพิวเตอร์กราฟิก เครื่องมือออกแบบ UI/UX และการเขียนโปรแกรม GPGPU
ผู้เขียนกำลังอ่านบทความดีๆ อื่นอยู่
ผู้เขียนคิดว่าหากมีโครงการนี้คงมีประโยชน์มากตอนที่กำลังเขียนตัววาดพื้นผิวแบบ implicit ของตัวเอง
libfive ส่วนใหญ่เขียนด้วย C++ กว่า 40K บรรทัด จึงยากแก่การแก้ไขแม้แต่สำหรับผู้เขียนเดิม
กำลังมองหา CAD ที่ใช้โค้ดเป็นฐานที่ดีที่สุด และได้ลอง CadQuery แต่ก็มีปัญหาหลายจุด
ตอนเรียนมหาวิทยาลัยเคยทำงานกับตัวจำลองฟิสิกส์นิวเคลียร์ซึ่งอิงพื้นผิวแบบ implicit
อยากทำงานกับแอบสตรักต์ทรีสำหรับสร้างพื้นผิวด้วย SDF
เคยเห็นงานวิจัยและเดโมเกี่ยวกับ implicit surface มาก่อน และคิดว่าสามารถสร้างแบบจำลองได้ด้วยจินตนาการ
ทำให้นึกถึงโปรเจกต์ของ Ian Henry
สำหรับคนที่ไม่เคยทำงานด้านกราฟิกมาก่อน โครงการนี้ดูน่าตื่นเต้นมาก