- CADmium từng hướng tới mục tiêu trở thành CAD tham số 3D mã nguồn mở chạy trong trình duyệt, nhưng hiện đã dừng phát triển và kho GitHub chỉ còn ở dạng lưu trữ
- Trọng tâm thiết kế là kết hợp mới bộ giải ràng buộc 2D, nhân b-rep, theo dõi lịch sử, UI 3D và định dạng tệp, đồng thời vẫn giữ trải nghiệm quen thuộc với người dùng CAD hiện tại
- Với việc giải ràng buộc 2D, dự án hình dung cách lặp để hội tụ giống mô phỏng vật lý lò xo-khối lượng-bộ giảm chấn, thay vì giải một ma trận khổng lồ cùng lúc
- Với nhân b-rep, dự án định tận dụng Truck, một công cụ mã nguồn mở dựa trên Rust, và cho rằng nó phù hợp để chạy trong trình duyệt nhờ WebAssembly cùng binding JavaScript
- Định dạng tệp hướng tới dạng thiên về văn bản dựa trên JSON và JSON Lines, với CLI, git-diff, chỉnh sửa bằng script, cũng như hệ sinh thái cộng tác và công cụ hỗ trợ trong tâm trí
Trạng thái và mục tiêu của dự án
- CADmium là một dự án từng muốn tạo ra một chương trình CAD mã nguồn mở mới
- Hiện dự án đã dừng phát triển, và kho GitHub được cung cấp ở dạng lưu trữ
- Bản phân phối không còn được duy trì
- Không nhận PR
- Discord vẫn còn nhưng không hoạt động sôi nổi
- Các thành phần CAD tham số 3D được nhắm tới gồm 5 phần
- Bộ giải ràng buộc 2D
- Nhân b-rep
- Bộ theo dõi lịch sử
- Giao diện người dùng 3D
- Định dạng tệp
Cách tiếp cận bộ giải ràng buộc 2D
- Cách truyền thống gom tất cả ẩn số vào một vector lớn, biểu diễn từng ràng buộc dưới dạng phương trình tuyến tính và giải như một phương trình ma trận khổng lồ
- Cách này có ràng buộc rằng ma trận phải là ma trận vuông nếu muốn tìm ma trận nghịch đảo
- Nếu có quá nhiều ràng buộc, ma trận có thể trở nên dài và thất bại
- Ngay cả khi các ràng buộc trùng lặp tương thích với nhau, việc quá ràng buộc vẫn có thể gây vấn đề
- Nếu có quá ít ràng buộc, hệ sẽ chèn giả định để tìm nghiệm, nhưng trái với kỳ vọng của người dựng mô hình, các phần tử sketch có thể bay đi rất xa
- Khi số ẩn tăng lên, phương trình ma trận lớn sẽ chậm đi, từ đó hình thành thói quen giữ từng sketch nhỏ và đơn giản
- Phương án thay thế của CADmium là xử lý bài toán ràng buộc 2D như một mô phỏng vật lý
- Mỗi điểm có khối lượng và vận tốc
- Mỗi ràng buộc hoạt động như một lò xo tác dụng lực lên các điểm được nối
- Có lực ma sát tỉ lệ với vận tốc
- Mô phỏng được chạy theo các khoảng thời gian nhỏ để hội tụ
- Thay vì giải toàn bộ bài toán trong một lần, hệ lặp lại các thay đổi nhỏ để đẩy thế năng của lò xo về 0
- Thời gian chạy của mỗi bước thời gian tỉ lệ tuyến tính với số lò xo và số ẩn, nên có khả năng xử lý các sketch phức tạp hơn
- Phương pháp mô phỏng phù hợp với song song hóa và cũng có khả năng chạy trên compute shader
- Trong bài toán quá ràng buộc, nếu hệ tự nhất quán thì vẫn giải bình thường; nếu không nhất quán, các lò xo sẽ tìm một điểm thỏa hiệp
- Bài toán thiếu ràng buộc sẽ tìm cấu hình hợp lệ gần nhất thay vì bay ra vô hạn
- Cách này cũng có thể hỗ trợ ràng buộc bất đẳng thức
- Giới hạn chiều dài lớn hơn 1cm và nhỏ hơn 2cm
- Giới hạn góc sketch trong khoảng từ 10 độ đến 30 độ
- Có thể mở rộng sang các lực khác, chẳng hạn xem diện tích nhất định của một đa giác kín như lực áp suất
- Mục tiêu cơ bản là mang lại trải nghiệm mà phần lớn người dùng CAD cảm thấy quen thuộc, nhưng dự án cho rằng vẫn có chỗ để áp dụng ý tưởng mới trong giải ràng buộc 2D
Nhân b-rep và Truck
- Trong CAD cơ khí, người dùng phải trực tiếp thao tác với cạnh và mặt của chi tiết
- CAD tham số sử dụng phương pháp Boundary Representation, tức b-rep, biểu diễn trực tiếp biên của chi tiết bằng cấu trúc dữ liệu
- Một khối lập phương được biểu diễn như một Solid có 6 Face
- Mỗi Face có 4 Edge
- Mỗi Edge có 2 Point
- Với bề mặt cong, bề mặt NURBS thường được dùng, cho phép kiểm soát hình dạng tự do và biểu diễn chính xác các đường conic
- Chỉ riêng việc biểu diễn hình dạng bằng b-rep đã khó, và độ khó tăng mạnh khi triển khai các boolean operations như Union, Intersection, Subtraction
- Thư viện xử lý các dữ liệu và phép toán boolean như vậy được gọi là nhân b-rep
- Các công ty CAD độc quyền lớn đã xây dựng nhân riêng trong hàng chục năm, và các nhân độc quyền được đánh giá là tốt nhưng đắt
- Trong mảng CAD mã nguồn mở, OpenCascade được xem là nhân b-rep mã nguồn mở phổ biến duy nhất
- Miễn phí nhưng được đánh giá là có thể thô và không ổn định
- Có nhận xét rằng màn hình hướng dẫn build chính thức trông như môi trường Windows cũ
- Truck là một nhân b-rep Rust mã nguồn mở mới đang được phát triển
- Có kho GitHub công khai
- Được viết bằng Rust và hỗ trợ biên dịch WebAssembly rất tốt
- Có thể chạy trên hệ điều hành và trong trình duyệt
- Cung cấp binding JavaScript và ví dụ
- Điều này không có nghĩa Rust về mặt phạm trù tốt hơn C++, nhưng với dự án mã nguồn mở, Rust có nhiều lợi thế quan trọng
- Công cụ build mạnh, tiện lợi và được tài liệu hóa tốt
- Có quản lý gói tập trung
- Có nhiều đảm bảo hơn về an toàn bộ nhớ, giúp việc song song hóa dễ và an toàn hơn
- Lỗi trình biên dịch thân thiện, giúp refactor dễ hơn
- Truck là dự án khoảng 4 năm tuổi và được đánh giá là đã có các chức năng cơ bản
- Đọc và ghi tệp
.step
- Tam giác hóa bề mặt theo dung sai cố định
- Hỗ trợ NURBS
- Intersection hoặc Union của hai Solid, và phép Not trên một Solid
- Truck nhỏ và nhẹ, đang được một công ty tên Ricos phát triển
- Cũng có khả năng hỗ trợ T-Splines thay vì B-Splines, chữ B trong NURBS
- Bằng sáng chế T-Splines do Autodesk nắm giữ nhưng được nói là đã hết hạn vài tuần trước
- Về lý thuyết, có thể thêm hỗ trợ này vào Truck
Theo dõi lịch sử và ý tưởng quản lý phiên bản
- CAD tham số lưu Feature History của thiết kế
- Tạo chi tiết bằng cách xếp chồng các thao tác như sketch, extrude, revolve
- Có thể quay lại bước trước, đổi giá trị và chạy lại feature để thu được chi tiết khác
- Khi đưa biến vào mô hình dưới dạng đầu vào và thay đổi giá trị, chi tiết sẽ cập nhật, nhờ đó mô hình được tham số hóa
- Cách tiếp cận này đã thành công, nhưng có các điểm yếu như Topological naming problem, và cũng có phê phán đối với chính mô hình CAD tham số
- Một cách tiếp cận để giảm độ mong manh là Resilient Modeling Strategy
- chamfer và fillet tiêu thụ edge, nên đặt ở cuối
- Detail feature có thể tham chiếu Core feature nhưng không tham chiếu lẫn nhau
- Nếu chương trình CAD cưỡng chế các mẫu như vậy, ban đầu có thể cảm giác như bị hạn chế, nhưng có thể giúp tái sử dụng và chuyển giao thiết kế dễ hơn
- Có ý tưởng thêm feature history cả cho sketch
- Trong CAD hiện nay, người dùng vẽ các feature cơ bản như hình tròn, hình chữ nhật rồi sao chép hoặc chỉnh sửa bằng mirror, linear pattern, sketch fillet, v.v.
- Đồ thị phụ thuộc kiểu này khó hiểu nếu không phải người tạo ra nó, nên nhiều khi xóa sketch và bắt đầu lại còn nhanh hơn
- Nếu sketch feature cũng được lưu và hiển thị trong feature tree, có thể áp dụng ý tưởng RMS cho cả một sketch đơn lẻ
- Cũng có ý tưởng ghi lại mọi sự kiện người dùng bằng append-only log
- Nếu log là nguồn sự thật duy nhất của tệp, có thể tái dựng một Feature History cụ thể bằng thanh trượt thời gian
- Có thể Undo/Redo không giới hạn ngay cả sau khi đóng rồi mở lại tệp
- Có thể rẽ nhánh theo hướng khác từ phiên bản cũ, tạo cây thử nghiệm thiết kế giống lịch sử git
- Mục tiêu là một ứng dụng CAD có thể dễ dàng khôi phục mọi trạng thái tài liệu hợp lệ
- Mọi lần thử và sai
- Mọi sản phẩm “cuối cùng”
- Các trạng thái quá khứ mà người dùng không biết là sẽ cần
- Với cấu trúc này, có thể duy trì nhiều biến thể của chi tiết và ghi lại cả trạng thái thiết kế khi chạy các quy trình downstream như toolpath generation hoặc FEA
- Ý tưởng này dẫn tới suy nghĩ rằng nếu có thể tạo git cho thiết kế cơ khí, thì chẳng phải cũng có thể tạo GitHub cho thiết kế cơ khí hay sao
Giao diện người dùng 3D dựa trên trình duyệt
- CADmium hướng tới cách làm CAD trong trình duyệt
- Onshape đã mở đường, nhưng trên thực tế được mô tả là chạy trên các instance đám mây AWS có bật GPU rồi stream kết quả về trình duyệt
- Nếu mất kết nối internet, thậm chí không thể xoay viewport
- Vì Truck có thể biên dịch sang WebAssembly, CADmium có thể trở thành ứng dụng Local-First xử lý mọi việc ngay bên trong trình duyệt
- Stack công nghệ đã dùng như sau
- Three.js: viewport 3D
- Svelte: quản lý trạng thái và tính phản ứng
- Threlte: kết nối Svelte và Three.js
- Truyền thông điệp giữa UI và nhân b-rep
- Electron: chạy cục bộ
- TypeScript, TailwindCSS, Vite, v.v.
- Stack này cho phép viết toàn bộ ứng dụng theo cách phản ứng và khai báo, nối các thay đổi dữ liệu tới cả việc cập nhật mesh
- Ứng dụng CAD 3D là một trong những loại UI phức tạp nhất, nên để một nhóm nhỏ tạo được sản phẩm tốt, framework phải đảm nhiệm rất nhiều việc
- Vì đã tạo được proof of concept hoạt động bằng stack này, dự án cho rằng phần này không phải yếu tố giới hạn của CADmium
Định dạng tệp JSON và hệ sinh thái CLI
- CADmium muốn dùng JSON cho mọi thứ
- Operation Log dự kiến dùng JSON Lines
- Sau khi thiết kế chi tiết, cần có khả năng xuất sang một định dạng trao đổi đơn giản hơn
- Định dạng ví dụ là cấu trúc JSON chứa các thao tác như
sketch, extrude trong mảng steps
- Có ví dụ sử dụng CADmium CLI để chuyển đổi tệp
.cadmium sang .step hoặc .stl
$ CADmium export my_part.cadmium --format stl
- Hai yếu tố cần thiết để tạo hệ sinh thái là
- Định dạng tệp đơn giản, dễ hiểu
- CLI mã nguồn mở có thể xử lý định dạng đó
- Có trường hợp sử dụng là thay đổi độ sâu extrude hoặc bán kính fillet bằng trình soạn thảo văn bản
- Cũng có thể có trường hợp sử dụng như đổi tất cả vít M5 thành vít M6 bằng script mà không cần đọc một đặc tả phức tạp như ISO 10303-21
- Nếu GitHub cho thiết kế cơ khí được tạo ra và thực sự được sử dụng, cũng có thể tưởng tượng tới GitHub Copilot cho thiết kế cơ khí
- Dự án cho rằng các mô hình ngôn ngữ lớn hoạt động tốt nhất với định dạng đơn giản, mở và dựa trên văn bản hơn là các định dạng nhị phân độc quyền phức tạp
Những hỗ trợ cần thiết và các lĩnh vực tạm gác lại
- Không thể biết ý tưởng nào sẽ thành công hay thất bại, nhưng dự án cho rằng trong lĩnh vực này có cơ hội để một nhóm nhỏ tạo ảnh hưởng lớn tới ngành sản xuất
- Các hỗ trợ cần thiết gồm
- Lập trình Rust và cải tiến chung
- Hình học tính toán cho các bản vá Truck
- Hỗ trợ Three.js
- Bộ điều khiển camera mới
- Ánh sáng tốt hơn
- Hậu xử lý
- Tìm cơ hội tài trợ hoặc nhà bảo trợ giàu có
- Những lĩnh vực hiện chưa xử lý nhưng muốn xem lại sau gồm
- Vốn đầu tư mạo hiểm
- toolpath generation, tức CAM
- Finite Element Analysis, tức FEA
- Máy chủ Discord của CADmium vẫn còn, nhưng theo thông báo trạng thái dự án thì không hoạt động sôi nổi
1 bình luận
Ý kiến trên Hacker News
Tôi rất kỳ vọng vào thứ Matt đang xây dựng. Thế giới đang rất cần một CAD tham số mã nguồn mở có UI/UX dễ dùng như SolidWorks
Lý do lớn nhất khiến đến nay vẫn chưa thành công là vì chưa có một kernel tham số đủ mạnh, và Truck mà Matt dùng trông đúng như dự án cần thiết. Trước đây, OpenCascade gần như là lựa chọn duy nhất tiệm cận, nhưng thiếu các tính năng quan trọng và có nhiều lỗi, độ ổn định kém
Nếu Truck và CADmium có được fillet ổn định, chúng có thể trở thành người kế nhiệm đúng nghĩa của OpenCascade và là nền tảng tạo nên tương lai của CAD tham số mã nguồn mở
Gần đây tôi đã chuyển sang Alibre Atom3D; nó không phải mã nguồn mở nhưng chỉ cần trả 200 đô la một lần. Miễn là host OS không thay đổi quá lớn, tôi vẫn có thể tiếp tục mở các thiết kế, và nó chạy trên kernel ACIS
Nhìn vào cụm “browser-first” và câu “kiếm tiền bằng phiên bản hosted trả phí” trong README, tôi đọc ra rằng dự án này có thể dần nhạt đi hoặc khi lớn lên sẽ trở thành sản phẩm open-core, bắt buộc thuê bao, với ngày càng nhiều phụ thuộc cài đặt và tính năng bảo mật, khiến việc chạy local thật sự ngày càng khó hơn
Tôi đã thử bản weekly cùng theme OpenDark và thấy khá bóng bẩy. Có vẻ đây là một giai đoạn thật sự thú vị cho CAD mã nguồn mở
Càng thử nhiều nền tảng CAD, tôi càng có cảm giác rằng các ứng dụng chuyên biệt cho một phạm vi vấn đề hẹp hữu ích hơn nhiều so với CAD đa dụng. Xuất SVG/DXF/DWG là một lợi thế, nhưng tôi nghĩ phần mềm bản vẽ cố xử lý đủ thứ từ linh kiện máy sản xuất hàng loạt, công trình kiến trúc một lần, đường cao tốc, đường ống 50 dặm, mạch điện, quy hoạch giao thông đô thị cho đến nghệ thuật là đi sai hướng
Dù dùng phần mềm thiết kế đường theo chuẩn ngành, trong object model của nó vẫn không hề có “đường”. Các thành phần bình đồ, trắc dọc và mặt cắt không thể tách rời nhau và có quy tắc tương tác rõ ràng, nhưng lại được định nghĩa độc lập. Nhà thiết kế nên dành ít thời gian hơn để chỉ cho máy tính cách hiển thị, và nghĩ nhiều hơn về chính kết quả đầu ra
Tôi tò mò vì sao QCAD hầu như không được nhắc đến trên HN mỗi khi nói về công cụ CAD hay mã nguồn mở
1 - https://www.qcad.org/
Với tư cách là một trong những maintainer của Solvespace, tôi xin bổ sung vài điểm: chỉ constraint 2D là chưa đủ, constraint 3D tốt hơn. Nếu viết bằng C++ thì tôi sẽ bảo hãy lấy constraint solver của Solvespace mà dùng như Dune3D đã làm, nhưng nếu bạn thích Rust thì có thể xem công việc Michael F Bryan đã viết bằng Rust và đăng trên blog
https://adventures.michaelfbryan.com/posts/constraints-part-...
Về kernel hình học, có 3 loại lỗi trong kernel của Solvespace mà tôi muốn sửa; nếu xử lý được chúng thì có lẽ có thể làm các phép toán boolean khá ổn định, nhưng tôi chưa có thời gian. Kernel của chúng tôi chưa đến 6.000 dòng nên chắc sẽ có nhiều thứ để học. Nếu muốn trao đổi về chủ đề này, có thể gửi mail tới gmail với cùng ID. Tôi đã không xem Truck một thời gian và từng nghĩ nó hơi bị chững lại. Đây là vấn đề thật sự khó, nên ngay cả trong thế giới thương mại cũng có ít lựa chọn. Chỉ riêng việc tam giác hóa các shell NURBS đã bị trim cũng đã khó rồi
History/feature tree liên quan chặt chẽ đến vấn đề topological naming của FreeCAD. Solvespace xử lý bằng cách tạo mỗi entity từ một tập những thứ đã biết. Nếu cố tạo lại, nó không tạo entity mới mà trả về handle của entity hiện có. Tức là mọi entity đều “đến từ một thứ gì đó” và ghi nhớ quan hệ đó. Ở phần chúng tôi xử lý topological naming thì cơ chế này hoạt động hoàn hảo, nhưng không bao phủ mọi phần của Solvespace. Đây là thứ phải đưa vào ngay từ đầu, chứ không dễ gắn thêm về sau
Và tôi tò mò có link nào để dùng thử CADmium không
[1] https://github.com/thekakkun/rust_slvs
Github:
https://github.com/MattFerraro/CADmium
Có link ở đây:
https://mattferraro.github.io/CADmium/
Tôi thấy đây là một công trình thật sự đáng kinh ngạc. Hy vọng CAD vật lý nguồn mở cũng đạt tới trình độ mà EDA nguồn mở đã đạt được
Có ý kiến cho rằng việc giải các phương trình ma trận như thế này sẽ trở nên quá chậm khi số ẩn tăng lên, nên mới hình thành quan niệm phổ biến rằng từng bản phác thảo phải nhỏ và đơn giản; nhưng khi đào khá sâu vào thì thực tế đây không phải vấn đề lớn
Vấn đề hiệu năng ràng buộc của FreeCAD chủ yếu đến từ các thuật toán bố trí GUI dư thừa và không cần thiết; chỉ vài trăm ràng buộc là đã sụp. Phân rã QR thưa của Eigen xử lý 2200 ràng buộc khoảng 18 giây, cũng không tệ. Cũng có thư viện phân rã QR thưa xử lý 500 nghìn~1 triệu ràng buộc trong khoảng 18 giây. Khó mà tưởng tượng có tình huống nào một bản phác thảo CAD lại có hơn vài nghìn ràng buộc
[1]: https://github.com/FreeCAD/FreeCAD/issues/11498#issuecomment...
Nó đang được dùng cho các ràng buộc lắp ráp trong FreeCAD và Ondsel ES
Tôi học CAD bằng Autodesk Inventor từ lâu rồi, và phần mềm mô hình hóa miễn phí duy nhất mà tôi có thể mày mò vài giờ là hiểu được là Onshape. Trong lĩnh vực này, tính dễ dùng thật sự có vẻ là một vấn đề lớn
Ví dụ FreeCAD dường như có hàng tỷ cách để làm cùng một việc, nhưng rốt cuộc cách đúng thật sự lại chỉ có một, và có tutorial còn để lại một mô hình không khớp
Đây là một công trình tuyệt vời, và có vẻ là một vấn đề khó
Repo: https://github.com/MattFerraro/CADmium
Tôi gần như chỉ dùng các workbench Part Design, Sketcher, Spreadsheet. Ba cái này nhìn chung phối hợp khá ổn. Khả năng tương tác giữa các workbench kém nên tôi ngại mở rộng sang chỗ khác. Thỉnh thoảng tôi cũng dùng Part workbench, nhưng để dùng trong Part Design thì phải chuyển đổi định dạng nội bộ hai lần, quá phiền phức
Hy vọng một trong nhiều dự án CAD nguồn mở sẽ một ngày nào đó thay thế được FreeCAD
Dù không thực dụng, mô hình vẫn chạy được cả trên điện thoại
Fusion360 cũng dùng được, nhưng so với các gói thương mại tôi từng dùng thì trải nghiệm người dùng khá kinh khủng
Điều tôi mong ở CAD miễn phí là ai đó mang được độ vững chắc và tốc độ của Creo rồi kết hợp với sự thân thiện của SolidWorks. Ban đầu chức năng có khá hạn chế cũng không sao
Quá trình là: làm theo tutorial đưa mình đi được 80%, rồi cố ghép phần còn lại bằng cách nào đó, sau đó nhận ra tutorial cơ bản đó đã cấu trúc dự án theo cách khiến 20% còn lại không thể hoàn thành, rồi khi cố sửa các bước trước thì toàn bộ dự án sụp đổ. Cứ lặp lại như vậy
Trong CAD, thường thì thứ tự thao tác quan trọng đến vậy sao? Tôi nghĩ vật thể đơn giản, FreeCAD thì khó đến đâu được, nên lao vào, nhưng thực tế là rất khó
Việc có người mới tham gia lĩnh vực này, đặc biệt là muốn tạo một kernel mới, là điều thú vị, nhưng khả năng thành công có vẻ thấp. Các kernel hàng đầu trong ngành đều là những thứ đã được các tiến sĩ CAGD và lập trình viên phát triển suốt nhiều thập kỷ, với sự tài trợ từ các công ty ô tô và hàng không vũ trụ. Ngay cả để đạt tới một tập hợp tính năng cơ bản đủ sức cạnh tranh cũng sẽ mất nhiều thời gian
Ngoài ra, cũng không rõ họ đang muốn giải quyết vấn đề nào của người dùng. Người dùng CAD không nhất thiết cần mã nguồn mở. Dĩ nhiên sẽ có ràng buộc về ngân sách, nhưng trong lĩnh vực này, mã nguồn mở có thể không phải là một tính năng trực tiếp hiện ra với người dùng như trong công cụ dành cho lập trình viên. Plasticity đã cho thấy rằng ngay cả khi cấp phép Parasolid vẫn có thể kiếm tiền ở mức giá thấp
Tôi đã dùng các công cụ CAD tham số hơn 30 năm, và Onshape là một giải pháp khá đáng kinh ngạc, giải quyết nhiều vấn đề có trong Creo hay SolidWorks. Một môi trường giống Google Docs cho CAD cộng tác, nơi dữ liệu không bị mất, không dựa trên hệ thống tệp mà ngay từ đầu được xây dựng trên cơ sở dữ liệu, có hoàn tác không giới hạn, đúng là có thể thay đổi cuộc sống. Tuy nhiên, chức năng mô hình hóa của nó vẫn đang trong quá trình bắt kịp các công cụ khác
Nhược điểm lớn của Onshape, Creo và SolidWorks là chúng có cấu trúc bắt đầu từ phác thảo 2D rồi đùn, xoay, loft thành đối tượng 3D. Các công cụ 3D gần như chỉ là tính năng bổ sung và ý nghĩ đến sau của cấu trúc cơ bản. Plasticity, Rhino, Alias thì ưu tiên 3D hơn nhiều
FeatureScript của Onshape rất hay và mạnh mẽ, nhưng để người dùng CAD tự tạo công cụ cho mình thì không tốt bằng Grasshopper của Rhino
CADmium cần tập trung vào việc trong thị trường nào nó sẽ trở thành công cụ CAD tốt hơn các lựa chọn trả phí và miễn phí, và vấn đề người dùng mà nó sẽ giải quyết. Dù đang ở giai đoạn đầu phát triển, không bao giờ là quá sớm để hiểu nhu cầu người dùng. Mã nguồn mở tự thân nó không phải là mục tiêu
Với công cụ hiện đại, những bài học rút ra từ các engine cũ, và việc không có nợ gia nhập, một nhóm nhỏ cũng có thể tạo ra thứ ngang bằng hoặc tốt hơn phần mềm đã 30 năm tuổi
Tôi nghĩ một nhóm nhỏ và tận tâm có thể tạo ra một kernel tham số và gói CAD mới. Đặc biệt nếu là mã nguồn mở thì càng có khả năng
Người dùng CAD có thể hưởng lợi lớn từ một lựa chọn mã nguồn mở tốt
Ngược lại, có nhiều lý do để tránh phần mềm độc quyền, và nếu là SaaS thì lý do còn mạnh hơn. Vì ngày nay mọi thứ ngày càng chuyển sang SaaS, và trường hợp này cũng vậy. Phần mềm CAD là lĩnh vực mà nhiều người dùng đã từng bị thiệt khi bỏ ra hàng trăm giờ để học và sử dụng, rồi hệ thống độc quyền thay đổi điều kiện cung cấp
Tôi biết mình thuộc thiểu số, nhưng với tôi mã nguồn mở tự thân nó là một mục tiêu tuyệt đối. Tôi đã chỉ dùng phần mềm mã nguồn mở từ rất lâu rồi
Dù vậy, tôi không chắc về phần nói rằng mã nguồn mở không thể là mục tiêu. Nó giống quan hệ giữa KiCAD và Altium. Nếu có thể cung cấp bằng mã nguồn mở 90% những gì Onshape mang lại, tôi nghĩ mọi người có thể dùng nó
Tôi hiểu góc nhìn về chi phí. Giấy phép SolidWorks khoảng 3.000–5.000 USD, nên hầu hết công ty sẽ trả tiền để dùng công cụ đã được kiểm chứng
Tham khảo thì Onshape được tạo ra với chưa tới 10 triệu USD để có MVP trong vòng 3 năm. Tôi không nghĩ ngày nay nhất thiết phải cần nhân lực tiến sĩ tính bằng nhiều thập kỷ để tạo một chương trình CAD mới
Tóm tắt hệ sinh thái kernel CAD rất xuất sắc
Tôi đặc biệt thích câu: “Kernel B-rep mã nguồn mở phổ biến duy nhất là OpenCascade, và nó là Pontiac Aztek của giới kernel B-rep. Xấu xí, chỉ có các tính năng cơ bản và có thể hỏng, nhưng nó vẫn chạy được và bạn có thể lấy miễn phí”
Quả thật là nói rất đúng
Nếu ưu tiên cục bộ thì tôi thắc mắc tại sao lại phải làm trong trình duyệt
Solvespace có lợi thế là chỉ cần một tệp tải xuống/thực thi duy nhất
Ngoài ra, bộ giải ràng buộc của nó đã được dùng trong các dự án như CADsketcher và Dune 3D: https://github.com/dune3d/dune3d
Tác giả nói rằng do mã wrapper không phơi bày tất cả các chức năng cần thiết, họ đã dùng trực tiếp bộ giải của Solvespace, và để làm cho nó đủ nhanh với các loại phương trình được tạo ra, họ phải vá bộ giải để giải phương trình theo ký hiệu ở những nơi có thể áp dụng
Tôi cũng tò mò liệu nó có liên quan đến https://github.com/jay3sh/cadmium hay không
Manifold cũng không được nhắc đến như một CAD kernel: https://github.com/elalish/manifold/wiki/Manifold-Library Tôi hiểu là nó có nhiều nhược điểm giống OpenCASCADE, nhưng vẫn có vẻ đáng được nhắc tới
Kernel này trước đây cũng từng được thảo luận ở đây: https://news.ycombinator.com/item?id=35071317
Toàn bộ lịch sử và khả năng chỉnh sửa trông đặc biệt thú vị và đầy hứa hẹn. Nếu có thể liệt kê lịch sử đó trong một panel có thể mở/đóng, rồi thêm các tam giác bung/thu để ẩn những phần tử đã hoàn thành nhằm tập trung vào công việc hiện tại, thì với tôi gần như là giấc mơ thành hiện thực. Dĩ nhiên với điều kiện là tôi có thể hiểu được phần 3D. Cho đến giờ tôi đều thất bại với BRL-CAD, FreeCAD, Solvespace, Alibre Atom, v.v.; thứ duy nhất tôi dùng thành công là các công cụ dựa trên mã tương tự OpenSCAD
Khi cần thiết kế một linh kiện ở nhà, chỉnh sửa ở chỗ làm, rồi chế tạo bằng thiết bị sẵn có ở makerspace, việc không phải cài đặt gì là một lợi thế lớn
Tôi từng cân nhắc thay mã mesh tam giác của Solvespace bằng Manifold, nhưng khối lượng công việc lớn; thứ thật sự cần là sửa các lỗi NURBS để bớt phụ thuộc vào mã mesh
Nhân tiện, bộ giải ràng buộc của Solvespace cũng được dùng trong workbench Assembly 3 của FreeCAD. Dạo này nó đang lan ra khá nhiều nơi
Tôi đồng ý rằng ứng dụng CAD 3D có một trong những UI phức tạp nhất
Tuy nhiên tôi hoài nghi với ý kiến rằng để một nhóm nhỏ tạo được CAD 3D tốt thì framework phải gánh phần lớn công việc. Tôi không chắc framework UI đa dụng có thể là lời giải lâu dài cho CAD 3D hay không
UX tốt đôi khi phải đồng thời xét đến mô hình 3D tham số, xấp xỉ mesh, phép chiếu thành đường và mảng bề mặt sau khi loại bỏ mặt khuất, các pixel trong framebuffer, và widget UI. Framework thường giả định quá nhiều rằng thông tin dễ tách rời và có quy mô giới hạn
Nó có thể hữu ích cho việc tạo prototype, nhưng khi dự án lớn lên, tôi nghĩ cuối cùng phần tương tác viewport 3D cốt lõi sẽ phải bỏ framework, và phần lớn khoảng giữa OpenGL hoặc thứ tương tự với sự kiện chuột/bàn phím sẽ được lấp bằng mã tự viết
Framework cho nút bấm hay danh sách thì ổn, nhưng ngay cả những thành phần đó trong CAD 3D cũng động hơn rất nhiều so với ứng dụng trung bình
Tôi thật sự hy vọng CADmium sẽ giúp thoát khỏi OpenSCAD. Trong OpenSCAD, ban đầu không cần suy nghĩ quá lớn; chỉ việc chồng module lên module bằng một ngôn ngữ đơn giản
Vấn đề là OpenSCAD không có bộ giải. Có biến, nhưng không có ràng buộc. Khi thay đổi, bạn đột nhiên phải vận dụng rất nhiều trí óc để tự giải các ràng buộc, và rất dễ đưa lỗi vào
Dù vậy vấn đề vẫn chưa nghiêm trọng đến mức khiến tôi chuyển sang công cụ khác, vì ở giai đoạn bắt đầu một mô hình, OpenSCAD dễ hơn rất nhiều so với bất kỳ thứ gì tôi từng dùng
https://github.com/Ondsel-Development/OndselSolver
Nó đang được dùng trong FreeCAD và Ondsel ES
Ban đầu tôi bắt đầu với OpenSCAD, nhưng khi tạo các đối tượng 3D thực sự thì FreeCAD năng suất hơn nhiều. Đôi khi bạn muốn bắt đầu từ một hình chữ nhật, xóa một đường rồi thêm một nửa đường tròn, nhưng trước khi bắt đầu sketch thì bạn chưa biết điều đó
Trong OpenSCAD, tôi có cảm giác phải biết trước các primitive hình học cần dùng và cách sửa chính xác; việc nó khuyến khích dùng primitive 3D hơn là áp dụng extrude/quay lên 2D cũng khiến cá nhân tôi khó chịu
Thật vui khi thấy những người khác đầu tư thời gian và tài năng vào CAD mã nguồn mở. Ở Ondsel, chúng tôi tin rằng CAD mã nguồn mở rất quan trọng, và rất vui khi thấy sự đổi mới trong lĩnh vực này