Présentation
- Fidget est une bibliothèque destinée à représenter, compiler et évaluer des expressions mathématiques à grande échelle, conçue principalement comme backend pour des surfaces implicites.
- C’est une bibliothèque souple, utilisable pour divers usages.
Qu’est-ce qu’une surface implicite ?
- Une surface implicite se décrit sous la forme d’une expression f(x, y, z) → d, où un d positif indique une position à l’extérieur du modèle et un d négatif une position à l’intérieur.
- Par exemple, une sphère de rayon 1 peut être exprimée par f(x,y,z)=x²+y²+z²−1.
- Fidget met l’accent sur les surfaces implicites fermées exprimées via des opérations arithmétiques de base.
Avantages des surfaces implicites
- Les surfaces implicites sont concises et adaptées à une évaluation parallèle à grande échelle.
- Les opérations CSG (union, intersection, etc.) sont gérées simplement.
- Les équations fermées sont favorables à l’optimisation et permettent de tracer quelle branche est choisie pendant l’évaluation.
Origines
- J’ai travaillé sur le rendu et l’évaluation des surfaces implicites pendant les 10 dernières années.
- Fidget est un projet de recherche personnel, écrit en Rust, ce qui le rend plus facile à utiliser que des kernels existants comme libfive.
Structure de la bibliothèque
- Fidget est composé de trois couches principales séparées et d’une application de démonstration.
Frontend : construction d’expressions mathématiques
- Fidget utilise le langage de script Rhai pour construire des expressions mathématiques.
- L’arbre mathématique est dédoublonné dans un graphe acyclique orienté.
- La forme SSA aplatit le graphe en un code linéaire.
Backend : évaluation rapide et flexible
- Le backend de Fidget est séparé du frontend et prend en charge plusieurs modes d’évaluation.
- Le compilateur JIT transforme le bytecode en instructions machine pour maximiser les performances.
Algorithmes
- Fidget implémente plusieurs algorithmes de rendu et de maillage basés sur une évaluation rapide.
- Le maillage utilise Manifold Dual Contouring pour garantir l’étanchéité, la manifoldité et la préservation des détails nets.
Démonstration
- Fidget inclut plusieurs démos, dont la GUI web est la partie la plus intéressante.
- Il est utilisé comme une opportunité d’explorer les technologies web les plus récentes.
Perspectives
- L’ajout d’un backend GPU, l’amélioration du maillage, la création d’une bibliothèque standard et des liaisons avec des langages de haut niveau sont à l’étude.
Conclusion
- Fidget est désormais disponible publiquement et peut être intégré facilement à un projet Rust.
- Il est proposé avec une licence adaptée aux usages open source et commerciaux.
1 commentaires
Commentaires Hacker News
Ce projet couvre de nombreux domaines de l’informatique, notamment les structures de données, les algorithmes, l’optimisation de performance de bas niveau, les compilateurs, le rendu/les graphismes, les outils de design UI/UX et la programmation GPGPU
L’auteur lisait un autre excellent article
Je pense que ce projet m’aurait été très utile en écrivant mon outil de création de surface implicite
libfive compte environ 40K lignes en grande partie en C++, et il est difficile à modifier même pour l’auteur initial
Je recherche le meilleur logiciel CAD basé sur du code, j’ai essayé cad query mais rencontré quelques problèmes
À l’université, j’ai réalisé des travaux sur des simulateurs de physique nucléaire basés sur des surfaces implicites
Je veux faire un travail d’arbre abstrait pour la génération de surface avec des SDF
J’ai vu des papiers et des démos sur les surfaces implicites et, avec un peu d’imagination, on peut construire des modèles
Cela me rappelle le projet d’Ian Henry
Pour quelqu’un qui n’a jamais fait de travail graphique, ce projet est vraiment intéressant