1 points par GN⁺ 2024-05-22 | Aucun commentaire pour le moment. | Partager sur WhatsApp

CADmium : un programme de CAO local-first qui fonctionne dans le navigateur

21 mai 2024

Nous développons un nouveau programme de CAO open source. Le projet a déjà bien avancé, mais nous avons besoin de votre aide. Si vous souhaitez y participer, rejoignez le Discord !

De quoi a-t-on besoin ?

Ce qu’il faut pour créer un programme de CAO paramétrique 3D :

  • solveur de contraintes 2D
  • noyau B-rep
  • suivi de l’historique
  • interface utilisateur 3D
  • format de fichier

Parlons de chacun de ces éléments.

Solveur de contraintes 2D

Le solveur de contraintes 2D sert à faire en sorte que des lignes restent parallèles ou perpendiculaires, ou que deux cercles aient le même rayon, par exemple.

  • L’approche classique consiste à regrouper toutes les inconnues dans un grand vecteur x, à exprimer toutes les contraintes sous forme d’équations linéaires, puis à assembler le tout en une grande équation matricielle Mx = b.
  • En théorie, il suffit d’inverser M. x = M^-1 b
  • En pratique, cela demande beaucoup d’optimisations. Mais cette approche présente des inconvénients.
    • On ne peut inverser M que si c’est une matrice carrée.
    • S’il y a trop de contraintes, M devient trop grand et l’approche échoue.
    • S’il n’y a pas assez de contraintes, on peut s’en sortir en insérant des hypothèses, mais cela peut ne pas correspondre aux attentes du modeleur.
    • Résoudre cette équation matricielle devient très lent lorsqu’il y a beaucoup d’inconnues.

Approche alternative :

  • Formaliser le problème comme un simulateur physique 2D :
    • chaque point a une masse m et une vitesse v
    • chaque contrainte est un ressort qui applique une force F aux points connectés
    • la force de frottement est proportionnelle à la vitesse
    • on fait avancer la simulation par petits pas dt jusqu’à convergence
  • Cette approche produit beaucoup de petits changements pour ramener l’énergie potentielle des ressorts à 0.
  • À chaque pas de temps, le temps d’exécution est linéairement proportionnel au nombre de ressorts et au nombre d’inconnues.
  • Cette approche se prête bien à la parallélisation et peut donc être très rapide en pratique.
  • Les problèmes surcontraints ne se plaignent pas d’être surcontraints : les systèmes cohérents se résolvent normalement, et dans les systèmes incohérents les ressorts trouvent un compromis.
  • Les problèmes sous-contraints ne partent pas à l’infini : ils convergent vers la configuration valide la plus proche.
  • Cette approche peut prendre en charge les contraintes d’inégalité.

Noyau B-rep

En CAO mécanique, l’utilisateur doit pouvoir interagir directement avec les arêtes et les faces d’une pièce.

  • Tous les programmes de CAO paramétrique représentent directement la frontière de la pièce dans une structure de données.
  • Un cube est représenté comme un solide composé de 6 faces, chaque face ayant 4 arêtes, et chaque arête 2 points. Cette approche s’appelle la représentation par frontières (B-rep).
  • Pour les surfaces courbes, on peut utiliser des surfaces NURBS, une généralisation des splines, afin d’obtenir un contrôle artistique sur les formes libres et une représentation exacte des coniques.
  • Représenter des formes de cette manière est difficile, et cela l’est encore plus lorsqu’on veut implémenter des opérations booléennes comme l’union, l’intersection et la différence.
  • La bibliothèque qui manipule ces données et exécute ces opérations booléennes s’appelle un noyau B-rep, et c’est extrêmement difficile à construire.

Le marché actuel de la CAO :

  • Les principales entreprises du secteur ont chacune développé leur propre noyau B-rep, ce qui leur a pris des décennies.
  • Le noyau B-rep le plus important est Parasolid, qui alimente de nombreux produits industriels.
  • Dans l’univers open source de la CAO, OpenCascade est le seul noyau B-rep populaire.

Un nouveau noyau B-rep open source :

  • Un nouveau noyau B-rep open source appelé Truck est en cours de développement.
  • Il est écrit en Rust, ce qui apporte des avantages comme la garantie de sûreté mémoire, la facilité de parallélisation et la possibilité de compilation en WebAssembly.
  • Truck est petit et léger, et prend en charge la lecture/écriture de fichiers .step, la triangulation de surfaces, le support des NURBS, ainsi que les opérations d’intersection/union/différence sur les solides.

Suivi de l’historique

Les programmes de CAO paramétrique stockent l’historique des fonctions d’un design.

  • Une pièce est finalisée au moyen d’opérations comme l’esquisse, l’extrusion ou la révolution.
  • « Paramétrique » signifie qu’on peut revenir à une étape précédente, la modifier, puis rejouer les fonctions pour obtenir une pièce légèrement différente.
  • On peut paramétrer un modèle en y injectant des variables.

Approches pour résoudre la fragilité de la CAO paramétrique :

  • stratégie de modélisation résiliente (RMS) : un ensemble de règles pour concevoir une pièce
  • ajout de l’historique des fonctions à l’esquisse : on peut enregistrer et afficher des fonctions d’esquisse dans l’arbre des fonctions afin d’appliquer les idées de RMS à une seule esquisse
  • enregistrement de tous les événements utilisateur dans un journal append-only pour offrir une annulation/rétablissement illimités

Interface utilisateur 3D

J’aime l’idée d’exécuter la CAO dans le navigateur.

  • Onshape fonctionne dans le navigateur, mais en réalité il s’exécute sur des instances cloud AWS avec GPU.
  • CADmium utilise Truck compilé en WebAssembly pour pouvoir tout exécuter dans le navigateur. C’est une application local-first.

Pile technique :

  • Three.js : viewport 3D
  • Svelte : gestion d’état/réactivité
  • Threlte : pont entre Svelte et Three.js
  • transmission de messages entre l’UI et le noyau B-rep
  • Electron : exécution locale
  • autres technologies standard : Typescript, TailwindCSS, Vite, etc.

Format de fichier

CADmium utilise JSON pour tout.

  • Le journal des opérations est constitué de lignes JSON.
  • Prise en charge de l’export des pièces conçues vers des formats d’échange plus simples.
  • Exemple : { "steps": [ { "type": "sketch", "id": "Sketch-01", "data": { ... } }, { "type": "extrude", "id": "Extrude-01", "data": { "distance": "10mm", "sketch": "Sketch-01", "faces": [0], "type": "new" } } ] }
  • Il est possible de convertir en .step ou .stl avec l’interface en ligne de commande (CLI) de CADmium : $ CADmium export my_part.cadmium --format stl

Conclusion

Je ne sais pas lesquelles des idées mentionnées ici réussiront et lesquelles échoueront, mais quelque part dans cet espace, il existe une opportunité pour une petite équipe d’avoir un grand impact sur l’industrie manufacturière.

Aide recherchée :

  1. programmation Rust (améliorations générales)
  2. géométrie computationnelle (patchs pour Truck)
  3. aide sur Three.js (nouveau contrôleur de caméra, meilleur éclairage, post-traitement)
  4. recherche d’opportunités de subvention ou de mécènes fortunés

Sujets que je n’aborde pas maintenant mais sur lesquels je veux revenir plus tard :

  1. capital-risque
  2. génération de parcours d’outil (CAM)
  3. analyse par éléments finis (FEA)

Si cette idée vous intéresse, rejoignez le serveur Discord de CADmium pour en discuter !

L’avis de GN⁺

  1. Les avantages de Rust : Rust convient très bien aux projets open source grâce à sa sûreté mémoire et à sa facilité de parallélisation. Cela devrait grandement aider à améliorer la stabilité et les performances de CADmium.
  2. L’usage de WebAssembly : Utiliser WebAssembly pour exécuter directement des tâches de CAO dans le navigateur est très innovant. Cela permet de continuer à travailler même dans des environnements où la connexion Internet est instable.
  3. La simplification du format de fichier : Un format de fichier fondé sur JSON est facile à comprendre et très pratique, car il peut être modifié directement dans un éditeur de texte. Cela facilite la collaboration et la gestion de versions.
  4. L’importance de l’historique des fonctions : Offrir une annulation/rétablissement illimités grâce à l’historique des fonctions peut nettement améliorer l’expérience utilisateur. Cela permet de corriger facilement les erreurs commises pendant le processus de conception.
  5. La force de la communauté open source : Un projet open source peut progresser rapidement grâce à la participation et aux contributions de la communauté. CADmium aussi pourrait beaucoup évoluer grâce à l’implication de nombreux développeurs et utilisateurs.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.