Aller au contenu
Table des matières

MistubaVideo

MistubaVideo effectue le rendu de sorties de simulation avec Mitsuba 3, sous ETSim. La commande par lots traite des séquences OBJ ; le module mitsuba-video lit les poses et champs de surface enregistrés grâce aux adaptateurs de manifeste et de TextureFriction. Les faits ci-dessous viennent de la documentation du dépôt, lue pour la présentation du projet.

  • Mis à jour

1. Aperçu

Pourquoi il existe. Une simulation calcule le mouvement et les changements de surface ; rendre un enregistrement montre où les corps ont bougé et comment l’apparence des matériaux a évolué, et permet de changer caméra ou éclairage sans relancer la simulation.

Cas d’usage. Transformer poses et champs d’usure enregistrés en images, cartes de chaleur, panneaux d’atlas et vidéos pour rapports et présentations.

2. Cas d’utilisation

Outils Mitsuba 3 d'ETSim qui rendent par lancer de rayons des suites OBJ et des enregistrements d'usure en images, MP4 et GIF.

Diagramme de cas d’utilisation de MistubaVideo : Rendre une suite d'OBJ; Rendre plusieurs vues; Débruiter et extraire les AOV; Produire une vidéo de champ; Rendre un essai d'usure; Écrire et valider un manifesteMistubaVideoRendre une suite d'OBJRendre plusieurs vuesDébruiter et extraire les AOVProduire une vidéo de champRendre un essai d'usureÉcrire et valider un manifesteChercheur (simulation)«système»Mitsuba 3 et FFmpeg«système»Essais TextureFriction
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
Rendre une suite d'OBJ
Chercheur (simulation)Mitsuba 3 et FFmpeg

python main.py multi --folder exports --regex "\d+\.obj" crée une scène XML par OBJ trouvé, la rend sur CPU ou CUDA avec le spp et la résolution voulus, puis encode MP4 et GIF avec FFmpeg.

Rendre plusieurs vues
Chercheur (simulation)

--view front --view top ou --all-views rend chaque image depuis les caméras avant, arrière, gauche, droite, dessus, dessous ou perspective de src/mitsuba/camera.py, avec le nom de la vue dans le fichier.

Débruiter et extraire les AOV
Chercheur (simulation)Mitsuba 3 et FFmpeg

python main.py denoise <chemin> applique le débruiteur OptiX de src/mitsuba/denoising.py aux images rendues, et python main.py aov <fichier.exr> extrait les couches AOV d'un EXR dans des fichiers séparés.

Produire une vidéo de champ
Chercheur (simulation)Mitsuba 3 et FFmpeg

mitsuba-video render <manifest.json> -q paper rend les corps rigides à leurs poses enregistrées avec un mélange de matériaux piloté par le champ et une carte de chaleur, ajoute l'atlas UV et un graphique d'aire couverte, puis encode un MP4.

Rendre un essai d'usure
Chercheur (simulation)Essais TextureFriction

python main.py wear render simulation_<ts> ou tf-render lit un dossier --record ou un fichier .h5 de TextureFriction via la source texturefriction.

Écrire et valider un manifeste
Chercheur (simulation)

Tout projet peut produire un manifest.json versionné avec ManifestWriter ; mitsuba-video validate le vérifie avec manifest-v1.schema.json, et mitsuba-video fixture crée un petit exemple synthétique.

2.1. Scénario : Rendre la vidéo de champ de démonstration

  1. Installer FFmpeg et Mitsuba 3, puis lancer pip install -e "packages/mitsuba_video[texturefriction]" pour obtenir mitsuba-video et tf-render.
  2. Créer une entrée synthétique avec mitsuba-video fixture demo.
  3. Vérifier rapidement le cadrage avec mitsuba-video preview demo.
  4. Lancer mitsuba-video render demo -q preview pour rendre les images et encoder le MP4.
  5. Pour des données réelles, lancer python main.py wear render sur un dossier simulation_<ts> de TextureFriction avec -q paper.

Fichiers consultésREADME.mdmain.pyconfig.jsonrequirements.txtpackages/mitsuba_video/README.mdpackages/mitsuba_video/src/mitsuba_video/cli.pysrc/mitsuba/camera.py.github/workflows/mitsuba-video.yml

3. Démarrage

python main.py multi --folder exports          # rendu par lots d'une séquence OBJ
mitsuba-video inspect path/to/manifest.json    # vérifier les données d'entrée
mitsuba-video preview path/to/manifest.json    # vérifier caméra et cadrage
mitsuba-video render path/to/manifest.json -q preview

Préréglages de qualité : preview, draft, paper. encode réassemble des images existantes en vidéo ; FFmpeg fait l’encodage.

4. Fonctions et composants

ÉtapeDonnées
EntréeMaillages, matériaux, poses et champs de surface enregistrés ; un manifeste versionné (corps, maillages, matériaux, poses, images de champ) ou un enregistrement TextureFriction via un adaptateur ; ManifestWriter permet à un autre simulateur d’exporter ce format
TraitementApplication des poses, mélange des matériaux de base et affectés selon le champ, lancer de chemins Mitsuba 3 ; carte de chaleur, panneau d’atlas UV et courbe de surface couverte en option
SortieImages beauty et composites, CSV de surface du champ, render_config.json avec paramètres et temps, MP4 ; images EXR linéaires en option

5. Architecture

flowchart TD
  subgraph Inputs[Sortie de simulation]
    R[Enregistrement TextureFriction]
    M[Manifeste : maillages, poses et champs]
  end
  subgraph Helper[Module mitsuba-video]
    A[Adaptateur de source]
    B[Appliquer les poses et mélanger les matériaux]
    C[Lancer de chemins Mitsuba 3]
    D[Panneau d'atlas et courbe de surface]
  end
  R --> A
  M --> A
  A --> B --> C --> D
  D --> E[Images et MP4]

6. Limites et points à vérifier

  • La courbe de surface mesure la surface couverte du champ enregistré, pas la surface visible de l’objet rendu.
  • Conservez les réglages d’affichage avec le rendu : changer l’échelle de la carte de chaleur fait paraître différent le même champ.
  • Le module documente des tests pytest pour les transformations, le mélange des matériaux, les lecteurs OBJ/MTL et le schéma de manifeste ; aucun pourcentage de couverture mesuré n’est cité ici.

7. Liens

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["mitsuba-video"]
    direction LR
    wf0_linux[["linux<br/>ubuntu-latest"]]
    wf0_windows["windows<br/>windows-latest"]
  end
  t0(["push · demande de fusion · lancement manuel"])
  t0 --> wf0_linux
  t0 --> wf0_windows
Workflows, déclencheurs, tâches et cibles
WorkflowDéclencheursTâchesPublie vers
mitsuba-video
.github/workflows/mitsuba-video.yml
push, demande de fusion, lancement manuel
  • linux ubuntu-latest
    actions/checkout · actions/setup-python · System packages · Install · Tests · Smoke renders
  • windows windows-latest
    actions/checkout · actions/setup-python · Install · Tests · Scalar smoke render
—

Généré à partir du code au commit 87b180b.

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"]]
  image["Image Docker<br/>FROM nvidia/cuda:12.0.1-cudnn8-devel-ubuntu22.04"]
  subgraph compose["Docker Compose"]
    svc_mitsuba_renderer["mitsuba-renderer"]
  end
  repo -->|"push ou demande de fusion"| ci
  ci -->|"docker build"| image
  image -->|"docker compose up"| compose

10. Dépendances externes

16 paquets déclarés (14 à l’exécution, 2 pour le développement) dans pyproject.toml, requirements.txt, packages/mitsuba_video/pyproject.toml.

Tableau des paquets 16
Dépendances externes
PaquetVersionUsageRôleRegistre
typer—exécutionLigne de commandepypi.org
rich—exécutionLigne de commandepypi.org
python-dotenv—exécutionConfigurationpypi.org
jsonschema—exécutionValidation des donnéespypi.org
mitsuba—exécutionGraphisme, image et 3Dpypi.org
rpds—exécution—pypi.org
xmltodict—exécutionMakes working with XML feel like you are working with JSONpypi.org
xmlschema—exécutionAn XML Schema validator and decoderpypi.org
numpy—exécutionAnalyse de donnéespypi.org
tqdm—exécutionLigne de commandepypi.org
gradio—exécutionInterface utilisateurpypi.org
imageio>=2.30.0exécutionGraphisme, image et 3Dpypi.org
pillow>=10.0.0exécutionGraphisme, image et 3Dpypi.org
coverage—exécutionTestspypi.org
h5py>=3développementRead and write HDF5 files from Pythonpypi.org
pytest>=7développementTestspypi.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.

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.

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.

Mermaid

Un langage de diagrammes textuel. Les nœuds et liens décrivent un modèle ; le diagramme n’exécute pas le projet.

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.

Décodeur vidéo

Un composant qui reconstruit des images à partir d’un flux vidéo compressé. Le décodage et l’affichage sont des étapes distinctes.

12. Références

  1. ETSim. (2026, 5 novembre). [Web page] github.com.
  2. ETSim. (2026, 5 novembre). MistubaVideo. [Software repository] github.com.
  3. ETSim. (2026, 5 novembre). Module de rendu. [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.