3 คะแนน โดย GN⁺ 2025-01-09 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

แนะนำ

  • 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 ความคิดเห็น

 
GN⁺ 2025-01-09
ความคิดเห็นจาก Hacker News
  • โครงการนี้ครอบคลุมหลายสาขาของวิทยาการคอมพิวเตอร์ รวมถึงโครงสร้างข้อมูล อัลกอริทึม งานปรับแต่งประสิทธิภาพระดับล่าง คอมไพเลอร์ การเรนเดอร์/คอมพิวเตอร์กราฟิก เครื่องมือออกแบบ UI/UX และการเขียนโปรแกรม GPGPU

    • สามารถรับการอัปเดตเพิ่มเติมได้ผ่าน RSS ฟีดของสื่อสังคมออนไลน์หรือบล็อก
  • ผู้เขียนกำลังอ่านบทความดีๆ อื่นอยู่

  • ผู้เขียนคิดว่าหากมีโครงการนี้คงมีประโยชน์มากตอนที่กำลังเขียนตัววาดพื้นผิวแบบ implicit ของตัวเอง

    • แนวทางของเขาเองมีความคล้ายกันบางส่วน แต่การปรับแต่งยังน้อยกว่าและสร้าง GLSL โดยตรง
    • รู้สึกเหมือนอยากแทนที่ด้วยโครงการนี้
  • libfive ส่วนใหญ่เขียนด้วย C++ กว่า 40K บรรทัด จึงยากแก่การแก้ไขแม้แต่สำหรับผู้เขียนเดิม

    • หากไม่คอมไพล์เป็นเวลาหลายเดือน บ่อยครั้งการ build จะพังจึงต้องแก้ CMake
    • แปลกใจมากที่ปัญหาเรื่องการ build จึงเป็นเรื่องใหญ่ขนาดนั้น
  • กำลังมองหา CAD ที่ใช้โค้ดเป็นฐานที่ดีที่สุด และได้ลอง CadQuery แต่ก็มีปัญหาหลายจุด

    • กำลังหาโปรแกรมที่แนะนำสำหรับการพิมพ์สามมิติ
  • ตอนเรียนมหาวิทยาลัยเคยทำงานกับตัวจำลองฟิสิกส์นิวเคลียร์ซึ่งอิงพื้นผิวแบบ implicit

    • ฟังก์ชัน R มีคุณสมบัติเป็น differentiable ทุกที่
    • สงสัยว่ายังมีการใช้โค้ด Fortran แบบเก่าปริมาณมากอยู่
  • อยากทำงานกับแอบสตรักต์ทรีสำหรับสร้างพื้นผิวด้วย SDF

    • แนวคิดคือต้องการใช้เป้าหมาย mesh/point cloud เพื่อหา tree ที่ให้รูปร่างตามที่ต้องการ
  • เคยเห็นงานวิจัยและเดโมเกี่ยวกับ implicit surface มาก่อน และคิดว่าสามารถสร้างแบบจำลองได้ด้วยจินตนาการ

    • สงสัยว่าพวกที่ทำได้ในเคอร์เนล b-rep บ้าง
    • อยากเห็นเคอร์เนลที่เร็ว เป็นโอเพนซอร์ส และรองรับการประมวลผลขนาน
  • ทำให้นึกถึงโปรเจกต์ของ Ian Henry

  • สำหรับคนที่ไม่เคยทำงานด้านกราฟิกมาก่อน โครงการนี้ดูน่าตื่นเต้นมาก

    • คิดว่าควรมีเดโมเพิ่มเติมอีก
    • เสนอว่าถ้ามีเมนูแบบดรอปดาวน์ในเว็บเอดิเตอร์ให้ลองโปรแกรมต่างๆ ได้ก็คงดี