Banc d'essai de reconstruction 3D d'objet. Une vidéo d'orbite entre, un maillage et un fichier de métriques sortent.
L'objectif n'est pas de livrer un reconstructeur, mais de comparer objectivement plusieurs approches sur la même entrée, et de savoir laquelle se rapproche le plus de la géométrie réelle.
VIDEO
│
▼
extraction keyframes
nets et non flous
│
┌──────────────┼──────────────┐
▼ ▼ ▼
sparse 8-16 dense 30-100 holdout
│ │ │
▼ ▼ │
ReconViaGen v0.5 DA3 / │
ou Mix3R V2 MapAnything │
(cloud) (local 8 Go) │
│ │ │
│ ▼ │
│ fusion TSDF -> mesh │
│ │ │
└──────┬───────┘ │
▼ │
controle / fusion ◄───────────┘
│ (vues jamais vues par les backends)
▼
mesh final GLB + metrics.json
.\make.ps1 setup # env racine — aucune dependance GPU
.\make.ps1 check # ruff + pytest — doit passer sans GPU ni reseau
.\make.ps1 envs # envs backends GPU (long : telecharge torch)Pipeline complet :
uv run renderpoc checkerboard --out board.svg # damier, a imprimer a 100 %
uv run renderpoc run data\piece.mp4 --backends da3,mapanything --square-size-mm 25
uv run renderpoc runs
.\make.ps1 guiSans GPU, la chaîne complète se vérifie avec le backend de référence :
uv run renderpoc run video.mp4 --backends fakeLes modèles visés (Depth Anything 3, MapAnything, ReconViaGen, Mix3R) ont des piles CUDA
mutuellement incompatibles. Ils ne sont donc pas importés : chacun est un exécutable
isolé dans son propre environnement uv, piloté par un contrat de fichiers JSON
(docs/backend-contract.md).
Trois conséquences qui portent tout le projet :
- l'environnement racine s'installe et se teste sans GPU, sans CUDA, sans poids ;
- chaque étape est rejouable seule à partir des seuls fichiers sur disque ;
- un backend trop lourd pour la machine locale s'exécute ailleurs sans changer une ligne du pipeline — ce qui est exactement le cas de la branche générative.
Le poste local (RTX 4070, 8 Go) filme, trie les images, fusionne, mesure et affiche. L'inférence part sur un GPU loué à l'heure : 48 Go se louent 0,44 $/h, et un banc complet — cinq backends sur la même vidéo — revient à environ 0,37 $.
Ce basculement n'a demandé aucun changement au pipeline : le contrat de fichiers avait été
conçu pour ça. La carte se choisit au moment du run (renderpoc gpu), d'après la
disponibilité réelle dans le datacenter du volume réseau — figer un modèle dans le registre
serait faux dès le lendemain. Voir docs/remote-execution.md.
Il n'y a pas de maillage de référence. La justesse géométrique s'établit par triangulation
d'indices indépendants — échelle métrique par damier, vues held-out, accord entre
backends, qualité du maillage. Voir docs/metrics.md, et docs/acquisition-protocol.md
pour ce qu'il faut filmer.
| Document | Contenu |
|---|---|
AGENTS.md |
point d'entrée : commandes, contraintes globales, structure |
docs/pipeline-explique.md |
vulgarisation : ce que fait chaque étape et pourquoi |
docs/backend-contract.md |
le contrat d'échange — à lire avant de toucher un backend |
docs/acquisition-protocol.md |
prise de vue à trois anneaux, damier, tutoriel pas à pas |
docs/remote-execution.md |
louer un GPU, provisionner le volume, lancer un run distant |
docs/compute-budget.md |
besoins VRAM mesurés, prix des cartes, licences, accès aux poids |
docs/metrics.md |
définition et lecture de metrics.json |
docs/features.md |
état d'avancement, avec commande de vérification par feature |
depth-anything/DA3-* et facebook/map-anything sont en CC-BY-NC-4.0 (non
commercial). facebook/map-anything-apache (Apache-2.0) est le défaut du registre.
Aucun dépôt de la pile n'est gated.