Table des matières
PolyFEMBlenderPlugin
PolyFEMBlenderPlugin est une extension Blender expérimentale qui transforme les objets sélectionnés, leurs matériaux et les réglages de contact en configuration JSON PolyFEM, puis lance la simulation par éléments finis sans quitter Blender. Elle a été écrite pour les travaux de simulation du laboratoire de l’ÉTS et est publiée sous ETSim, pour qui prépare ses scènes dans Blender et les résout avec PolyFEM.
1. Aperçu
polyfem/__init__.py enregistre un panneau, les groupes de propriétés et les opérateurs. À l’enregistrement, il installe aussi meshio avec pip dans le dossier de modules utilisateur de Blender.
polyfem/panels/polyfem_json.pydessine le panneau PolyFEM dans l’onglet Physics de l’éditeur Properties : mode d’exécution (Docker ou exécutable) pour PolyFEM et TetWild, objets sélectionnés avec leur matériau et leur format d’export, puis sections repliables pour l’export, le contact, le temps, l’espace, les conditions aux limites, les matériaux, le solveur et les sorties.polyfem/operators/create_polyfem_json.pyexporte chaque maillage (STL, OBJ, ou MSH avec TetWild) et écrit le JSON PolyFEM avec les blocsgeometry,materials,contact,time,boundary_conditions,solveretoutput.polyfem/operators/run_polyfem.pylance PolyFEM dans un fil d’arrière-plan, soitdocker run antoinebou12/polyfem --json /data/<fichier>avec le dossier du projet monté sur/data, soit un exécutable local. Son opérateur Render Animation lit les résultatsstep_*.vtu, ajoute le déplacementsolution, convertit chaque pas en OBJ avec meshio et anime la visibilité de chaque maillage importé.polyfem/properties/polyfem.pyregroupe les réglages, dont des matériaux prédéfinis (acier, cuivre, aluminium, etc.), les intégrateurs (Euler implicite, Euler explicite, Newmark implicite) et les solveurs linéaires Eigen.
2. Cas d’utilisation
Extension Blender qui transforme une scène en configuration JSON PolyFEM et lance la simulation depuis Blender.
- Assigner un matériau MEF
- Utilisateur Blender
L'opérateur Apply Material enregistre module de Young, coefficient de Poisson et densité sur les objets sélectionnés à partir de préréglages comme Steel ou Aluminum.
- Créer le JSON PolyFEM
- Utilisateur Blender
Create PolyFEM JSON exporte chaque maillage et écrit géométrie, matériaux, contact, temps, conditions aux limites, solveur et sorties dans un fichier JSON.
- Tétraédriser avec TetWild
- Utilisateur BlenderImages Docker
Avec le type MSH, l'objet est écrit en STL puis converti en .msh par l'image yixinhu/tetwild ou un exécutable TetWild local.
- Lancer la simulation
- Utilisateur BlenderImages DockerSolveur PolyFEM
Run PolyFem Simulation appelle docker run antoinebou12/polyfem --json avec le dossier du projet monté sur /data, ou un exécutable PolyFEM local, dans un fil d'arrière-plan.
- Importer l'animation
- Utilisateur BlenderSolveur PolyFEM
Render Animation lit les fichiers step_*.vtu, ajoute le déplacement solution, convertit chaque pas en OBJ avec meshio et anime sa visibilité.
- Télécharger les images
- Utilisateur BlenderImages Docker
Les boutons Pull Docker Image vérifient que Docker est installé et exécutent docker pull pour l'image TetWild ou PolyFEM configurée.
2.1. Scénario : Simuler une scène de contact et la rejouer dans Blender
- Installer le dossier polyfem zippé par Edit > Preferences > Add-ons et activer PolyFem.
- Dans Properties > Physics > PolyFEM, choisir l'exécution Docker et télécharger antoinebou12/polyfem et yixinhu/tetwild.
- Sélectionner les maillages, appliquer un matériau prédéfini et régler contact, pas de temps et temps final.
- Cliquer sur Create JSON Configuration pour écrire les maillages et le JSON dans le dossier d'export.
- Cliquer sur Run PolyFem Simulation, puis Render Animation pour importer les résultats step_*.vtu en maillages animés.
Fichiers consultésREADME.mdpolyfem/__init__.pypolyfem/blender_manifest.tomlpolyfem/operators/create_polyfem_json.pypolyfem/operators/run_polyfem.pypolyfem/panels/polyfem_json.pypolyfem/properties/polyfem.py.github/workflows/build.ymlLICENSE
3. Démarrage
Le README installe l’extension à partir d’un zip du dossier polyfem/ : Edit > Preferences > Add-ons > Install, puis activer PolyFem. blender_manifest.toml exige Blender 4.2 ou plus récent. Le mode d’exécution par défaut passe par Docker :
docker pull yixinhu/tetwild:latest
docker pull antoinebou12/polyfem:latest
Le workflow de CI construit le paquet avec la commande de Blender :
blender --command extension build --source-dir polyfem --output-dir docs
blender --command extension server-generate --repo-dir=docs --html
4. Guide du dépôt
polyfem/contient l’extension elle-même (blender_manifest.toml,__init__.py,operators/,panels/,properties/).polyfem/operators/create_polyfem_json.pygère l’export des maillages, TetWild, les matériaux, le téléchargement des images Docker et le fichier JSON.polyfem/operators/run_polyfem.pylance PolyFEM, importe les résultats, ouvre la documentation PolyFEM et vide le cache.polyfem/properties/polyfem.pydéfinit chaque champ du panneau et les préréglages..github/workflows/build.ymlconstruit le zip et un index de dépôt d’extensions (docs/index.json), puis déploiedocs/sur la branchegh-pages.docs/contient les paquetspolyfem-1.0.10.zipetpolyfem-1.0.11.zipavec leur index.zip-plugin.pyetdownload-wheels.pysont des scripts d’appoint pour zipper l’extension et télécharger les wheels de meshio, trimesh et tetgen.
5. Fonctionnalités
- Assigner des propriétés élastiques (E, ν, ρ) aux objets à partir de préréglages ou de valeurs saisies.
- Exporter les maillages en STL ou OBJ, ou les tétraédriser en MSH avec TetWild, en Docker ou en exécutable local.
- Régler le contact (
dhat, coefficient de frottement,epsv), l’intégration temporelle, la méthode et le second membre des conditions aux limites, le solveur linéaire et les sorties ParaView. - Écrire un fichier JSON PolyFEM complet, avec option d’export des objets sélectionnés seulement.
- Lancer PolyFEM par Docker ou par un exécutable local sans bloquer l’interface de Blender.
- Réimporter les pas de temps VTU sous forme de séquence de maillages animée.
6. Limites
- Le README qualifie l’extension d’expérimentale et signale des plantages avec des géométries complexes ainsi que des cas limites d’export.
- Le panneau est enregistré dans l’onglet Physics de l’éditeur Properties, alors que le README décrit un onglet dans la barre latérale du 3D Viewport.
- FBX et glTF figurent dans le menu d’export, mais l’opérateur les refuse.
blender_manifest.tomlne déclare que la plateformewindows-x64, et l’extension a besoin de Docker ou de builds locaux de PolyFEM et TetWild.- Le README annonce la GPL-3.0, alors que
LICENSEet le manifeste indiquent MIT. - Les badges et l’arborescence du README renvoient à un ancien nom de dépôt et à un fichier
panels/poly_fem.pyabsent. - Aucun test : le workflow se contente de construire et de publier le paquet.
7. Sources
- Dépôt GitHub
- README
polyfem/blender_manifest.tomlpolyfem/operators/create_polyfem_json.pypolyfem/operators/run_polyfem.py.github/workflows/build.yml
8. Pipeline CI/CD
1 workflow GitHub Actions, 2 tâches. Chaque boîte est une tâche ; les boîtes à double bord publient ou déploient, et les flèches suivent les dépendances needs.
Mermaid Déroulement du pipeline
flowchart LR
subgraph wf0["Build and Deploy Add-on"]
direction LR
wf0_Generate_Matrix["Generate_Matrix<br/>ubuntu-latest"]
wf0_build[["build<br/>ubuntu-latest"]]
end
t0(["push · lancement manuel"])
d0[("GitHub Pages")]
t0 --> wf0_Generate_Matrix
wf0_Generate_Matrix --> wf0_build
wf0_build -.-> d0
| Workflow | Déclencheurs | Tâches | Publie vers |
|---|---|---|---|
Build and Deploy Add-on.github/workflows/build.yml | push, lancement manuel |
| GitHub Pages |
Généré à partir du code au commit 70794d3.
9. Schéma de déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
ci[["GitHub Actions<br/>1 workflow"]]
pub_GitHub_Pages[("GitHub Pages")]
repo -->|"push ou demande de fusion"| ci
ci -->|"publie"| pub_GitHub_Pages
10. Dépendances externes
6 paquets déclarés (6 à l’exécution, 0 pour le développement) dans polyfem/pyproject.toml, polyfem/requirements.txt.
Tableau des paquets 6
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
tetgen | ^0.6.5 | exécution | Python interface to tetgen | pypi.org |
meshio | ^5.3.5 | exécution | Graphisme, image et 3D | pypi.org |
trimesh | ^4.4.9 | exécution | Graphisme, image et 3D | pypi.org |
rich | ^13.9.1 | exécution | Ligne de commande | pypi.org |
sympy | ==1.13.3 | exécution | Computer algebra system (CAS) in Python | pypi.org |
noise | ==1.2.2 | exécution | Perlin noise for Python | pypi.org |
11. Glossaire
Dépôt
Les fichiers source, la configuration et l’historique versionné d’un projet.
README
Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.
Dépendance
Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.
HTTP
Un protocole de requête et réponse utilisé par les navigateurs et services web. Une requête comprend une méthode, un chemin, des en-têtes et parfois un corps.
Conteneur
Un environnement de processus isolé créé à partir d’une image. Les données persistantes nécessitent un stockage hors de son système de fichiers temporaire.
Port publié
Un port de l’hôte associé au port d’un service dans un conteneur. Sa publication peut rendre le service accessible hors du réseau des conteneurs.
Interface en ligne de commande
Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.
Compilation
Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.
Intégration continue
Des vérifications automatiques lors des changements de source, comme la compilation, les tests et l’analyse statique. Elles ne couvrent que ce qu’elles vérifient.
GPU
Un processeur conçu pour les calculs parallèles, dont le rendu graphique et de nombreuses opérations numériques.
Maillage
Une surface représentée par des sommets et des éléments reliés, souvent des triangles. Sa géométrie est distincte de son matériau ou de sa texture.
12. Références
- PolyFEM. (2026, 5 novembre). [Web page] polyfem.github.io.
- ETSim. (2026, 5 novembre). [Web page] github.com.
- ETSim. (2026, 5 novembre). PolyFEMBlenderPlugin. [Software repository] github.com.
- ETSim. (2026, 5 novembre). README. [Source file or documentation] github.com.
- ETSim. (2026, 5 novembre). polyfem/blender_manifest.toml. [Source file or documentation] github.com.
- ETSim. (2026, 5 novembre). polyfem/operators/create_polyfem_json.py. [Source file or documentation] github.com.
- ETSim. (2026, 5 novembre). polyfem/operators/run_polyfem.py. [Source file or documentation] github.com.
- ETSim. (2026, 5 novembre). .github/workflows/build.yml. [Source file or documentation] github.com.
Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.