sand3D : des ressources 3D que vous pouvez lire et modifier sous forme de code
sand3D permet aux modèles de langage de créer des ressources 3D modifiables à l’aide d’un vocabulaire Python compact, en s’appuyant sur bpy de Blender pour la modélisation paramétrique.

Points forts et résultats
sand3D fournit aux modèles de langage un vocabulaire compact pour construire des objets 3D en Python. Développé par Thibault Neveu et Andréa Loy chez Sandflow, il transforme les programmes en pièces nommées, matériaux et assemblages articulés via le bpy de Blender. Modifier une dimension et réexécuter le programme reconstruit l’asset. La version publique associe une bibliothèque de modélisation à des jeux de données ; elle ne fournit pas de modèle texte-vers-3D entraîné autonome. Dépôt officiel.
Les cinq fiches de jeux de données répertorient 66 887 objets Objaverse, 24 495 objets CAD, 9 209 objets Articraft, 2 334 objets SimReady et 3 169 enregistrements AutoMate : 106 094 au total, dont 10 456 objets articulés. Le décompte d’AutoMate comprend 2 297 pièces individuelles et 872 assemblages. Chaque enregistrement associe du code exécutable à un rendu et à un asset OpenUSD exporté. Il s’agit d’une collection d’assets sources reconstruits, et non de 100 000 mécanismes nouvellement conçus. Jeux de données officiels.
La comparaison des tokens du dépôt utilise o200k_base et exclut les commentaires et les docstrings. Les ratios médians baseline/sand3D sont de 4,0× pour du Python Blender écrit par un LLM sur 30 pièces CAD, de 2,3× pour 17 programmes CadQuery, de 6,0× pour 13 programmes FeatureScript et de 2,0× pour 12 programmes Articraft. Il s’agit de petites comparaisons issues de sources différentes avec des programmes sand3D sélectionnés ; seuls 9/30 des baselines Blender construisent la bonne pièce, et Articraft représente également la dynamique. Elles étayent une affirmation de compacité, et non une amélioration universelle de la qualité de génération. Détails de l’évaluation.
Fonctionnement
Pour la création, le flux de travail consiste à : fournir l’API à un LLM ou écrire directement du Python ; décrire l’assemblage et ses paramètres ; construire et positionner les pièces individuelles ; déclarer les articulations et les matériaux ; exécuter le programme dans bpy ; inspecter, réviser et exporter. L’API d’environ 3 600 tokens tient dans un prompt. La structure de programme recommandée énonce d’abord le plan de l’assemblage, puis implémente chaque pièce séparément, en gardant les dimensions et les relations de positionnement lisibles. La représentation modifiable est du code de géométrie exécutable et une hiérarchie de scène ; la bibliothèque n’implémente ni encodage latent ni débruitage par diffusion. Consignes d’écriture ; API.
Le vocabulaire géométrique va des profils 2D aux solides : rect et circle définissent des sections ; extrude, revolve, sweep et loft construisent des volumes ; cut, pocket, shell et fillet les modifient. Les objets Frame décrivent la position et l’orientation, de sorte qu’un composant peut être placé sur une face nommée ou un ancrage local plutôt qu’avec une longue liste de coordonnées mondiales. group conserve les maillages et matériaux séparés sous un même parent ; join effectue une fusion ; assembly ajoute des ancrages nommés à une racine groupée. Ces distinctions préservent les pièces qui appartiennent au même ensemble et celles qui restent modifiables séparément. Implémentation des assemblages.
L’exemple de machine à laver rend la mécanique concrète : un caisson supporte un tambour, une porte contenant son anneau, sa vitre et sa poignée, un tiroir et une molette. Après avoir placé ces pièces au repos, joint enregistre le parent, le pivot, l’axe, le type et la plage autorisée. La porte tourne de 0 à 143°, le tiroir coulisse de 0 à 200 mm, et le tambour et la molette tournent continuellement. pose valide la valeur demandée et propage les transformations par cinématique directe ; elle ne régénère pas la géométrie. seat supprime le volume occupé par une pièce insérée au repos, plutôt que de calculer l’enveloppe complète de son mouvement. Exemple ; Implémentation des articulations.
La production des jeux de données ajoute une boucle de reconstruction agentique : écrire du code, l’exécuter, comparer la surface obtenue à un asset source existant, puis réviser. Les auteurs n’ont pas encore publié la méthode complète de ce pipeline. Les scores F des jeux de données utilisent une tolérance de 1 % de la diagonale de la boîte englobante. Les seuils d’acceptation sont de 0,70 pour Objaverse et SimReady statique, de 0,90 pour CAD et Articraft rigide, et de 0,90 par pièce mobile, avec des articulations correctes, pour les assets articulés. Il s’agit de filtres de qualité rapportés par le pipeline, et non de résultats de test mesurés indépendamment. Une exécution échouée ou des contrôles statiques infructueux excluent un programme. Méthodologie des jeux de données.
Applications, disponibilité et orientations futures
La représentation convient aux variantes d’assets modifiables, aux mécanismes interactifs et à la recherche sur la création 3D fondée sur les LLM. GLB exporte la pose actuelle, les matériaux et les métadonnées d’articulation dans les extras des nœuds ; les visionneuses génériques ont besoin d’une logique supplémentaire pour actionner ces articulations. URDF et USDA préservent le mécanisme au repos, USDA utilisant UsdGeom et UsdPhysics. OBJ/STL ne contiennent que les maillages. L’export met les longueurs à l’échelle en mètres. Les paramètres de masse, de friction et d’actionnement restent en dehors de la description de la dynamique de la bibliothèque, de sorte que l’intégration à la simulation nécessite encore du travail. Implémentation de l’export.
La bibliothèque est sous licence Apache-2.0 ; les versions des jeux de données utilisent CC BY 4.0 tout en conservant les licences et attributions des sources. La couverture actuelle se concentre sur les objets à surface dure, et la reconstruction peut omettre de petits détails. Les auteurs identifient les formes organiques comme un axe de travail futur, avec notamment comme ajouts possibles le blending implicite, la subdivision par cage de contrôle, les sweeps et lofts à section variable, les squelettes avec skinning et le déplacement procédural. Ils promettent également davantage de domaines et un préprint à venir ; ces éléments restent des projets. Cette revue a examiné la documentation officielle et le code source au commit 0d589a5, version 1.6.2, le 6 novembre 2026 ; elle n’a pas exécuté les benchmarks de manière indépendante. Version officielle et limites.
FAQ
L’installation de sand3D me fournit-elle un modèle texte-vers-3D ?
Elle installe une bibliothèque de modélisation Python. Un LLM ou une personne doit écrire des programmes utilisant son API ; bpy les exécute pour construire les assets. Les jeux de données fournissent des exemples de code, et non un générateur entraîné autonome. Source.
Comment créer un asset d’une autre taille ?
Modifiez les dimensions exposées par son programme, puis réexécutez-le. Les relations de positionnement et les pièces nommées rendent ces changements inspectables. Seules les relations effectivement encodées dans le programme sont mises à jour automatiquement ; vérifiez donc le résultat reconstruit. Source.
Les mécanismes exportés sont-ils immédiatement prêts pour une simulation physique ?
URDF et USDA transportent la structure des articulations, mais la simulation nécessite encore des paramètres de dynamique tels que la masse, la friction et l’actionnement. GLB stocke les métadonnées d’articulation dans les extras ; une application doit les interpréter pour animer le mécanisme. Source.




