3 điểm bởi GN⁺ 2025-01-09 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2025-01-09
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.

    • Có thể nhận thêm cập nhật qua mạng xã hội hoặc RSS blog.
  • 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.

    • Cách tiếp cận của tôi có phần giống nhưng chưa được tối ưu bằng, và nó sinh mã GLSL trực tiếp.
    • Tôi đang bị cám dỗ muốn thay thế nó bằng dự án này.
  • 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.

    • Nếu không biên dịch trong vài tháng, build thường bị hỏng và phải chỉnh sửa CMake.
    • Ngạc nhiên vì vấn đề build lại trở thành vấn đề lớn đến vậy.
  • 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 đề.

    • Đang tìm phần mềm khuyên dùng cho in 3D.
  • 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.

    • Hàm R có tính chất khả vi ở mọi nơi.
    • Tôi đoán rằng vẫn còn khá nhiều mã Fortran di sản đang được dùng.
  • 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ưởng là dùng lưới đích/đám mây điểm để tìm một cây phù hợp với hình dạng mong muốn.
  • 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.

    • Tò mò không biết liệu có thể làm được những gì có thể làm được trên nhân b-rep không.
    • Muốn xem một nhân nhanh, mã nguồn mở và có thể xử lý song song.
  • 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ị.

    • Tôi nghĩ sẽ tuyệt hơn nếu có thêm nhiều demo.
    • Đề nghị thêm một menu thả xuống trong trình chỉnh sửa web để thử nghiệm nhiều chương trình khác nhau.