Aller au contenu
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.

Extension BlenderDocker
PythonBlender 4.2PolyFEMTetWildmeshioGitHub Actions
  • Mis à jour

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.py dessine 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.py exporte chaque maillage (STL, OBJ, ou MSH avec TetWild) et écrit le JSON PolyFEM avec les blocs geometry, materials, contact, time, boundary_conditions, solver et output.
  • polyfem/operators/run_polyfem.py lance PolyFEM dans un fil d’arrière-plan, soit docker 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ésultats step_*.vtu, ajoute le déplacement solution, convertit chaque pas en OBJ avec meshio et anime la visibilité de chaque maillage importé.
  • polyfem/properties/polyfem.py regroupe 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.

Diagramme de cas d’utilisation de PolyFEMBlenderPlugin : Assigner un matériau MEF; Créer le JSON PolyFEM; Tétraédriser avec TetWild; Lancer la simulation; Importer l'animation; Télécharger les imagesPolyFEMBlenderPluginAssigner un matériau MEFCréer le JSON PolyFEMTétraédriser avec TetWildLancer la simulationImporter l'animationTélécharger les imagesUtilisateur Blender«système»Images Docker«système»Solveur PolyFEM
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
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

  1. Installer le dossier polyfem zippé par Edit > Preferences > Add-ons et activer PolyFem.
  2. Dans Properties > Physics > PolyFEM, choisir l'exécution Docker et télécharger antoinebou12/polyfem et yixinhu/tetwild.
  3. Sélectionner les maillages, appliquer un matériau prédéfini et régler contact, pas de temps et temps final.
  4. Cliquer sur Create JSON Configuration pour écrire les maillages et le JSON dans le dossier d'export.
  5. 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.py gère l’export des maillages, TetWild, les matériaux, le téléchargement des images Docker et le fichier JSON.
  • polyfem/operators/run_polyfem.py lance PolyFEM, importe les résultats, ouvre la documentation PolyFEM et vide le cache.
  • polyfem/properties/polyfem.py définit chaque champ du panneau et les préréglages.
  • .github/workflows/build.yml construit le zip et un index de dépôt d’extensions (docs/index.json), puis déploie docs/ sur la branche gh-pages.
  • docs/ contient les paquets polyfem-1.0.10.zip et polyfem-1.0.11.zip avec leur index.
  • zip-plugin.py et download-wheels.py sont 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.toml ne déclare que la plateforme windows-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 LICENSE et 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.py absent.
  • Aucun test : le workflow se contente de construire et de publier le paquet.

7. Sources

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
Workflows, déclencheurs, tâches et cibles
WorkflowDéclencheursTâchesPublie vers
Build and Deploy Add-on
.github/workflows/build.yml
push, lancement manuel
  • Generate_Matrix ubuntu-latest
    Checkout Repository · Generate Tests Matrix
  • build ← Generate_Matrix ubuntu-latest
    Checkout Repository · Cache Blender Binary · Download Blender · Add Blender to PATH · Build Addon and Move to Docs · Upload Blender Add-on ZIP
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
Dépendances externes
PaquetVersionUsageRôleRegistre
tetgen^0.6.5exécutionPython interface to tetgenpypi.org
meshio^5.3.5exécutionGraphisme, image et 3Dpypi.org
trimesh^4.4.9exécutionGraphisme, image et 3Dpypi.org
rich^13.9.1exécutionLigne de commandepypi.org
sympy==1.13.3exécutionComputer algebra system (CAS) in Pythonpypi.org
noise==1.2.2exécutionPerlin noise for Pythonpypi.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

  1. PolyFEM. (2026, 5 novembre). [Web page] polyfem.github.io.
  2. ETSim. (2026, 5 novembre). [Web page] github.com.
  3. ETSim. (2026, 5 novembre). PolyFEMBlenderPlugin. [Software repository] github.com.
  4. ETSim. (2026, 5 novembre). README. [Source file or documentation] github.com.
  5. ETSim. (2026, 5 novembre). polyfem/blender_manifest.toml. [Source file or documentation] github.com.
  6. ETSim. (2026, 5 novembre). polyfem/operators/create_polyfem_json.py. [Source file or documentation] github.com.
  7. ETSim. (2026, 5 novembre). polyfem/operators/run_polyfem.py. [Source file or documentation] github.com.
  8. 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.