Image en Sculpture (Image 2 Sculpt)
Une image en entrée, une sculpture en sortie que vous pouvez prouver : chaque surface visible sur l'image est ajustée aux normales, au contour et à la profondeur de cette image dans sa propre caméra. Chaque surface cachée provient de vues générées qui ont d'abord dû s'accorder entre elles. Chaque étape de la construction est enregistrée et rejouée dans Blender.
Routage des entrées
Toute entrée aboutit à la même structure de cas (i2s.py new CASE --input ...). Détails : references/inputs.md.
| Entrée | Action | Remarques |
|---|---|---|
| Rendu d'un personnage/créature/objet ou image IA | new → run | le chemin principal |
| Photo d'un objet réel (figurine, jouet, produit, statue) | new --kind photo → run | MoGe donne la focale et la profondeur réelles |
| PNG détouré avec transparence | new → run | le canal alpha sert de masque ; pas d'appel de masque |
| Image chargée avec plusieurs éléments | prep --select "le dragon rouge" | SAM-3 sélectionne le sujet |
| Dessin, croquis ou illustration simple | prep --restyle | nano banana le transforme d'abord en rendu 3D, en conservant la pose |
| Plusieurs photos du même objet | views --import DOSSIER | vos photos remplacent les vues générées ; angles trouvés par recalage |
| Seulement une idée | imagine OUT.png "idée" → new | un rendu complet et net pour commencer |
| Pas de clé API | un PNG détouré (+ vos propres vues) | le travail en face avant fonctionne aussi : la silhouette est gonflée, la profondeur derrière est une estimation |
Workflow
À chaque point de contrôle, affichez une image étiquetée (checks/sheet_*.png, la feuille de vues, une image du tourne-disque) : les images d'abord, les chiffres ensuite. Les corrections ajoutent des étapes ; rien de ce qui est enregistré n'est jamais modifié.
- Structure du dossier.
i2s.py new CASE --input IMG --subject "courte phrase nominale". Regardez l'image et écrivez vous-même la phrase de sujet ("troll cartoon trapu", "figurine de hibou en céramique") : elle sera utilisée dans chaque prompt de vue. L'entrée est copiée avec son sha256 et remplie au rapport d'aspect du générateur le plus proche, de sorte que toutes les vues partagent le même objectif. - Cartes avant.
i2s.py prep CASE(masque, profondeur MoGe-3 + focale, normales Marigold ; unités normalisées par rapport au sujet). Vérifiezref/front_mask.pngetref/front_normales.pngavant de continuer. Mauvais sujet sélectionné →--select. Dessin →--restyle. - Vues.
i2s.py views CASE(9 vues + 1 mise de côté, ~2$ estimés ;--set minimalpour 5). Examinez chaque image générée : une pose modifiée, un membre supplémentaire ou un sujet coupé est une mauvaise vue. Le recalage rejettera les vues qui ne s'accordent pas (IoU < 0,80 par rapport à la coque des autres), mais dites ce que vous avez vu. Les régions qu'aucune vue ne voit nécessitent de nouvelles vues sous des angles qui les regardent (--angles "-30:25"), pas plus de lissage (references/views.md). - Coque.
i2s.py hull CASE: recalage de chaque vue (l'angle demandé n'est qu'un a priori : les inversions gauche/droite sont détectées, l'avant/arrière est conservé), recentrage, filtrage, le carvage enregistré, détection de symétrie. Lisez les angles recalés danscase.json;i2s.py symmetry CASE on|offannule le plan de symétrie détecté. - Ajustement.
i2s.py fit CASE --stage all(formes → surface → détail, 38 passes enregistrées), puiscut(ouvre les espaces entre les doigts, les jambes, le bras et le corps que la photo montre),smooth(supprime les toiles et les taches),fit --stage polish.i2s.py run CASEexécute les étapes 2 à 8 dans l'ordre avec ce plan par défaut (references/fitting.md). - Vérification et itération.
i2s.py check CASEécrit une feuille par vue : référence, normales de référence, sculpture, erreur de normales, différence de silhouette. Cherchez les bosses, les toiles, les espaces manquants, les caractéristiques aplaties. Ciblez-les :parts CASE --prompt "mains"puisfit --stage focus --region mains,cut --region mains,smooth --region box:...(references/checking.md). Ne prétendez jamais avoir corrigé sans la feuille avant/après. - Fin, Blender, films.
finish(lissage des facettes, OBJ/STL),blender(chaque étape rejouée depuis la caméra de la photo, tourne-disque 360°, chaque vue,sculpt.blend, GLB),film(timelapse à deux panneaux qui se termine par le tour 360°, tourne-disque, feuille de vues, image hero) (references/blender-and-delivery.md). - Rapport et arrêt.
reportécritout/REPORT.md,out/index.htmlet le graphique par étape. Présentez le timelapse, la feuille de vues et le tableau mesuré, dites ce qui est faible, et arrêtez-vous. L'utilisateur décide de la suite.
Règles impératives
- La photo régit ce qu'elle voit. Les vues générées ne remplissent que là où la photo ne voit pas ; leur profondeur n'est jamais utilisée (elle diffère de plusieurs centimètres entre les vues). Ne faites jamais la moyenne des normales d'une vue générée sur celles de la photo.
- Recalez chaque vue ; ne faites jamais confiance à l'angle demandé. Les vues générées étaient décalées de 20 à 155° sur le troll, principalement des inversions gauche/droite. La recherche autorise ces inversions mais garde les vues avant devant et les vues arrière derrière (le dos d'un sujet symétrique a la même silhouette que son avant). Lisez les angles recalés dans
case.json. - Filtrez avant de carver. Une vue qui ne s'accorde pas avec les autres montre un sujet ou une pose différents : rejetez-la (et dites-le) plutôt que de couper la sculpture avec elle.
- Gardez une vue de côté. Elle ne déplace jamais la surface ; sa caméra est figée avant l'ajustement. Faites-en un rapport séparé des vues utilisées pour l'ajustement. Elle aussi est générée, donc elle mesure la cohérence, pas la vérité.
- Mesurez, ne vous fiez pas qu'à l'œil. IoU, distance de contour, angle des normales, rugosité par rapport à la rugosité de la référence, profondeur de la photo. Un seul nombre ne représente jamais la "qualité" : rapportez-les côte à côte.
- Les champs de distance restent exacts. Chaque opération re-distance la grille (distances exactes aux triangles dans une bande, EDT au-delà). Décaler un champ inexact, refléter le champ lui-même ou flouter les cibles de normales a créé des marches, des anneaux de moiré et des nez aplatis dans le cas sur lequel cela a été construit (
references/lessons.md). - Enregistrez tout. Chaque carvage, passe, coupe et lissage est une étape dans
build/steps/etbuild/log.jsonl, rejouée dans Blender et montrée dans le timelapse. Ne modifiez jamais une étape enregistrée ; ajoutez-en une nouvelle. - Appels payants : chaque appel fal passe par le budget du cas (
settings.budget_usd), son identifiant de requête est sauvegardé danscase.jsonavant d'attendre, et rien n'est soumis aveuglément.FAL_KEYn'est jamais imprimé ni écrit. - Retour visuel à chaque point de contrôle, et l'image 0 de chaque film est une vignette terminée.
- Dites ce qui est inventé. Le dos d'un sujet vu seulement de face est une estimation du générateur.
Références
| Fichier | Lire quand |
|---|---|
references/inputs.md | routage d'une entrée inhabituelle ; masques, restyle, sélection, photos importées, idée seule |
references/views.md | génération, évaluation, recalage, filtrage et ajout de vues |
references/fitting.md | ce que fait une passe, étapes, paramètres, cut / smooth / focus, le plan par défaut |
references/checking.md | lecture des feuilles de cartes et des métriques, la vue mise de côté, quoi corriger ensuite |
references/blender-and-delivery.md | rejeu Blender, films, exports, le rapport, la page de révision |
references/conventions.md | repère monde, caméras, unités, formats de fichiers (pour écrire de nouveaux outils) |
references/lessons.md | ce qui a mal fonctionné sur les premiers cas et pourquoi les règles ci-dessus existent |
Modèles : templates/CONTRACT.md (copié dans chaque cas), templates/acceptance.json (cibles).