GenCAD
(gencad.github.io)- GenCAD ist ein Modell, das allein aus einer Bildeingabe 3D-CAD, die vollständige parametrisierte CAD-Befehlshistorie und CAD-Programme erzeugt
- B-rep ist für das AI-Training komplex, und Meshes, Voxel und Punktwolken erleichtern zwar die Datenbeschaffung, opfern dafür jedoch Genauigkeit und Änderbarkeit
- Aus einem Bild kann eine parametrische CAD-Befehlssequenz erzeugt und anschließend über einen Geometrie-Kernel in ein 3D-Solid-Modell umgewandelt werden
- Durch die Kombination aus autoregressivem Transformer, Contrastive Learning, latentem Diffusionsmodell und Decoder werden latente Repräsentationen von Bildern und CAD-Befehlen erzeugt und rekonstruiert
- Aus demselben Bild lassen sich mehrere CAD-Samples erzeugen, außerdem wird eine bildkonditionierte Suche unterstützt, die unter rund 7.000 CAD-Programmen die Top 3 findet
Überblick
- GenCAD ist ein bildkonditioniertes CAD-Generierungsmodell, das nicht nur 3D-CAD, sondern auch die vollständige parametrisierte CAD-Befehlshistorie und CAD-Programme ausgibt
- CAD-Datenstrukturen wie B-rep sind komplex und erschweren ein effizientes Training von AI-Modellen; Darstellungen wie Meshes, Voxel und Punktwolken erleichtern zwar die Datenbeschaffung, opfern jedoch die Genauigkeit und Änderbarkeit echter CAD-Modelle
- GenCAD erzeugt aus Bildern parametrische CAD-Befehlssequenzen und wandelt diese mit einem Geometrie-Kernel in 3D-Solid-Modelle um
- Ziel ist es, präzise und bearbeitbare 3D-Modellierung, wie sie für Engineering-Arbeiten, Fertigung und die Erkundung von Designräumen benötigt wird, bildbasiert zu automatisieren
Modellaufbau und Funktionen
-
Architektur
- Ein autoregressiver Transformer-Encoder lernt die latente Repräsentation von CAD-Befehlssequenzen
- Ein auf Contrastive Learning basierendes Modell lernt eine gemeinsame latente Repräsentation von CAD-Befehlssequenzen und CAD-Bildern
- Ein latentes Diffusionsmodell erzeugt, bedingt auf CAD-Bilder, die latente Repräsentation von CAD-Befehlssequenzen
- Ein Decoder-Modell wandelt die latente CAD-Repräsentation in parametrische CAD-Befehlssequenzen um
-
CAD-Generierung
- GenCAD kann aus Bild-Renderings CAD-Modelle erzeugen
- Auch bei derselben Bildeingabe können mehrere CAD-Samples erzeugt werden, was Sample-Diversität ermöglicht
-
CAD-Suche
- Unterstützt bildkonditionierte CAD-Suche und findet aus einer Sammlung von rund 7.000 CAD-Programmen die Top 3 CAD-Programme
-
Materialien
1 Kommentare
Hacker-News-Kommentare
Ich habe es ein paar Stunden lang ausprobiert, aber bei Eingaben, die nicht aus den Trainingsdaten stammen, konnte es nicht einmal für sehr einfache Zeichnungen brauchbare Ergebnisse erzeugen.
Auf GitHub steht, dass die Zuverlässigkeit selbst bei den eigenen Trainingsdaten nur bei etwa 60 % liegt, daher wirkt das Bild auf der Startseite ziemlich irreführend.
Ich habe 10 Bilder mit einer den Beispielen ähnlichen Komplexität erstellt und jedes davon etwa 50-mal laufen lassen, aber kein einziges Mal hat es korrekt funktioniert; und selbst wenn es selten einmal etwas ausgegeben hat, war es völlig falsch.
Im aktuellen Zustand ist das ziemlich misleading, und es scheint noch viel Arbeit nötig zu sein.
Wenn es aus handgezeichneten Skizzen parametrisierte CAD-Modelle machen würde, wäre das wirklich großartig.
Interessant ist es schon, aber ich bin mir über den praktischen Nutzen nicht sicher. Der zeitaufwendige Teil bei CAD-Zeichnungen besteht darin, für jedes Feature die exakten Maße, Abstände, Größen und Toleranzen festzulegen und Zwangsbedingungen so zu setzen, dass sich das Ganze später leicht ändern lässt — genau das übernimmt dieses Tool überhaupt nicht.
Man kann zwar zeichnen, was man haben will, als 2D-Skizze eingeben und dann generieren lassen, aber den schwierigen Teil muss man am Ende weiterhin selbst erledigen.
Mit OpenSCAD bin ich ziemlich vertraut, aber sobald es etwas komplexer wird, komme ich schnell an Grenzen. Kürzlich habe ich zum Beispiel für mein Kind einen Wasserhahn für eine Lego-Duplo-Küchenspüle gebaut.
Wenn es ein gutes AI-/LLM-Tool gäbe, bei dem ich die Skizze und Parameter eingebe und das mir die Zeit erspart, im Web nachzuschlagen, wie man einen Kreis entlang einer Kurve extrudiert, und Tutorials dazu anzuschauen, wäre ich wirklich dankbar.
Nebenbei: Bestehende AI-Tools funktionieren mit OpenSCAD schon ziemlich gut; wenn man also ein parametrisiertes Modell braucht, das sich aus einfachen Formen bauen lässt, kann ich diesen Workflow sehr empfehlen.
In meiner früheren Firma war es ziemlich logisch, warum wir dafür viel Zeit aufgewendet haben. Punktwolken, die von qualitativ schlechten kopfmontierten Kameras erzeugt werden, machen Modelle sehr komplex.
Wenn man sich zum Beispiel eine Punktwolke eines Ikea-LACK ansieht (https://www.ikea.com/gb/en/p/lack-nest-of-tables-set-of-2-wh...), wäre die extrem komplex. Deshalb wird schon für ein Mindestmaß an Interaktion der Rechenaufwand hoch (https://www.researchgate.net/publication/221064696/figure/fi...).
Darum gibt es viel Forschung dazu, Punktwolken in vereinfachte „CAD“-Modelle umzuwandeln. Ein LACK-Tisch wird dann nicht mehr durch 400.000 Dreiecke dargestellt, sondern eher durch ungefähr 40.
Ein Ansatz ist: „Diese Punktwolke sieht wie ein Tisch aus, also erzeugen wir viele mögliche Tische und prüfen, welcher passt.“ Dafür braucht man ein Verständnis von parametrischem CAD sowie ein Modell, das viele Tische mit anpassbaren Parametern erzeugen kann, bis einer passt.
Ein möglicherweise einfacherer Weg wäre, die Punktwolke zu nehmen, ein auf CAD-Modellen trainiertes Bildmodell daraus ein 2D-Bild erzeugen zu lassen und dann mit einem solchen Tool das eigentliche Modell zu erhalten.
Effizient ist das nicht, aber es könnte funktionieren. Es gibt allerdings auch viele weniger wünschenswerte Anwendungen, etwa automatisches Plagiieren.
Als ich mir ähnliche Ansätze[0] angesehen habe, um mein CAD-AI zu verbessern, bin ich auf Dinge wie dieses hier gestoßen. Das sind Lösungen mit großem Potenzial, aber ich glaube, dass den aktuellen Projekten oder Gewichten schlicht Trainingsdaten und Trainingszeit fehlen, um bei beliebigen Modellen gut zu funktionieren.
MeshCoder funktioniert im Wesentlichen nur bei modellenahen Trainingsdaten. GenCAD habe ich nicht ausprobiert, aber die anderen Kommentare bestätigen meinen Verdacht.
[0]: https://daibingquan.github.io/MeshCoder/
[1]: https://grandpacad.com
So etwas war mit OpenSCAD schon vor langer Zeit leicht möglich. Ich habe damit viele coole und komplexe Modelle gebaut und sogar ein Prompt-Repository erstellt, das LLMs zeigt, wie sie das machen sollen, einschließlich vieler von mir gebauter Modelle.
https://github.com/cjtrowbridge/vibe-modeling
Zum Vergleich: Einer meiner jüngeren Entwürfe sieht ungefähr so aus, und selbst den würde ich noch als sehr einfachen Fall bezeichnen[4].
Ich bin kein ausgebildeter Maschinenbauingenieur, der das beruflich macht, sondern als Programmierer nur jemand, der in seiner Freizeit konstruiert.
[1] - https://github.com/cjtrowbridge/vibe-modeling/blob/main/outp...
[2] - https://github.com/cjtrowbridge/vibe-modeling/blob/main/outp...
[3] - https://github.com/cjtrowbridge/vibe-modeling/blob/main/outp...
[4] - https://object.ceph-eu.hswaw.net/q3k-personal/fe3e54e6df604a...
Ich wollte sehen, wie gut das mit Fotos realer Teile oder handgezeichneten Entwürfen funktioniert, aber sobald ich versucht habe, das Docker-Image einzurichten, sind mir auf alle möglichen Arten nicht installierte Abhängigkeiten um die Ohren geflogen.
Wenn ich mir die Beispiele ansehe, vermute ich ohnehin, dass es bei Bildern, die nicht ursprünglich aus CAD erzeugt wurden, nicht gut funktioniert.
Wer so etwas interessant findet, mag wahrscheinlich auch OpenSCAD. Damit kann man 3D-CAD-Modelle per Code erzeugen.
https://openscad.org/
Falls der Autor mitliest: Bitte entfernt die automatisch abspielenden Videos. Auf dem Handy reißen sie mir immer den Ton weg, wenn ich gerade etwas anderes höre.
Mein Open-Source-Rust-BRep-CAD-Kernel könnte ebenfalls interessant sein: https://github.com/ecto/vcad
Eine gehostete Version gibt es unter https://vcad.io
Ich habe auch etwas darüber geschrieben, was in einer CAD-App steckt: https://campedersen.com/tessellation
Dass eine Person in vier Monaten allein für die Rust-Crates etwa 115.000 Zeilen geschrieben hat, erscheint mir fragwürdig, und dazu kommen noch einmal 100.000 Zeilen fürs Frontend.
Ich frage mich auch, warum „sofortige“ Tessellation gewählt wurde. Sobald man einen Kreis erzeugt, besteht er ja gleich aus vielen Liniensegmenten, und bei tangentialen Constraints scheint das schnell zu scheitern. Ich frage mich, ob das eine aktuelle Einschränkung ist oder Teil der Kernel-Strategie.
Über den ersten Versuch habe ich ebenfalls geschrieben: https://campedersen.com/cad0
Ich verstehe diese Art von Projekt nicht so recht. Der schwierige Teil ist nicht das Zeichnen und Modellieren, sondern die CAM-Programmierung.
Ich habe nicht einmal ein Open-Source-Programm gefunden, das 3D-Modelle importiert und in einer UI Werkzeugpfade festlegen lässt; dass ein LLM aus einem Modell Werkzeugpfade generiert, erscheint mir noch schwieriger.
Vielleicht übersehe ich etwas, aber wenn es von Anfang an ein gerendertes Bild gibt, hat man das CAD wahrscheinlich sowieso schon. Tolle Demo, aber ich verstehe den Anwendungsfall nicht.