Giới thiệu
- Fidget là một thư viện để biểu diễn, biên dịch và đánh giá các biểu thức toán học quy mô lớn, được thiết kế chủ yếu như một backend cho bề mặt ngầm.
- Đây là thư viện có thể linh hoạt sử dụng cho nhiều mục đích.
Bề mặt ngầm là gì?
- Bề mặt ngầm là biểu thức dạng f(x,y,z)→d, trong đó d dương nghĩa là ở bên ngoài mô hình, d âm nghĩa là ở bên trong.
- Ví dụ, mặt cầu bán kính 1 được biểu diễn bằng f(x,y,z)=x²+y²+z²−1.
- Fidget tập trung vào các bề mặt ngầm dạng đóng được tạo thành từ các phép toán số học cơ bản.
Ưu điểm của bề mặt ngầm
- Bề mặt ngầm gọn nhẹ và phù hợp cho việc đánh giá song song quy mô lớn.
- Các phép toán CSG (hợp, giao, ... ) có thể được xử lý đơn giản.
- Dạng phương trình đóng của chúng tối ưu cho quá trình tối ưu hóa và cho phép theo dõi nhánh nào được chọn trong quá trình đánh giá.
Nguồn gốc
- Trong 10 năm qua, đã có các nghiên cứu về render và đánh giá bề mặt ngầm.
- Fidget là dự án nghiên cứu cá nhân, viết bằng Rust để dễ sử dụng hơn thay vì các nhân lõi đã có như libfive.
Cấu trúc thư viện
- Fidget gồm ba lớp chính được tách biệt và ứng dụng demo.
Frontend: xây dựng biểu thức toán học
- Fidget dùng ngôn ngữ kịch bản Rhai để xây dựng biểu thức toán học.
- Cây toán học được tối giản bằng đồ thị có hướng không chu trình để loại bỏ trùng lặp.
- Băng SSA làm phẳng đồ thị thành mã tuyến tính.
Backend: đánh giá nhanh và linh hoạt
- Backend của Fidget tách riêng khỏi frontend và hỗ trợ nhiều chế độ đánh giá khác nhau.
- Trình biên dịch JIT chuyển đổi bytecode thành lệnh máy để tối đa hóa hiệu năng.
Thuật toán
- Fidget triển khai các thuật toán render và meshing khác nhau dựa trên đánh giá nhanh.
- Meshing dùng Manifold Dual Contouring để đảm bảo tính kín, tính manifold và bảo toàn các đặc trưng sắc nét.
Demo
- Fidget chứa nhiều demo, và GUI web là phần thú vị nhất.
- Được sử dụng như một cơ hội để khám phá các công nghệ web mới nhất.
Tiềm năng trong tương lai
- Dự kiến bổ sung backend GPU, cải thiện meshing, xây dựng thư viện chuẩn và binding cho ngôn ngữ cấp cao.
Kết luận
- Fidget giờ đã có thể được dùng công khai và dễ dàng thêm vào dự án Rust.
- Nó được cung cấp với giấy phép thân thiện với cả mã nguồn mở và thương mại.
1 bình luận
Bình luận Hacker News
Dự án này bao gồm nhiều lĩnh vực trong khoa học máy tính, như cấu trúc dữ liệu, giải thuật, tối ưu hiệu năng cấp thấp, trình biên dịch, đồ họa/đồ họa máy tính, công cụ thiết kế UI/UX và lập trình GPGPU.
Tác giả đã đang đọc một bài viết hay khác.
Khi viết trình vẽ bề mặt ngầm định của mình, tôi nghĩ dự án này đã thực sự hữu ích.
libfive phần lớn viết bằng C++ với khoảng 40K dòng, nên ngay cả tác giả gốc cũng khó để hack.
Tôi đang tìm phần mềm CAD dựa trên mã nguồn tốt nhất, đã thử cad query nhưng có một số vấn đề.
Khi còn ở đại học, tôi đã làm việc với bề mặt ngầm định trong một bộ mô phỏng vật lý hạt nhân.
Muốn thực hiện công việc cây trừu tượng cho tạo bề mặt bằng SDF.
Tôi đã thấy các bài báo và demo về bề mặt ngầm định, và có thể dựng mô hình bằng cách vận dụng trí tưởng tượng.
Nhắc tôi nhớ tới dự án của Ian Henry.
Với tư cách chưa từng làm công việc đồ họa, tôi thấy dự án này rất thú vị.