# Pli — dossier de transfert Blender, version 1.0.0

Une étude originale RenderParcel : flacon en céramique violette, collerette orange satinée, étiquette à chevrons sur papier et socle en argile. Le cadrage est prévu pour une image produit avec une zone libre à gauche. Il ne s'agit ni d'un objet client ni d'un modèle reproduit depuis une photographie.

## Ce que contient réellement le téléchargement

Ce pack fournit un **générateur de scène**, une texture originale, une recette et des contrôles. Aucun fichier `.blend` ni rendu Blender n'a été produit dans l'environnement de préparation : Blender n'y a pas été trouvé. La validation effectuée porte sur les fichiers, les chemins, le PNG, la syntaxe Python et les erreurs de dépendances. Lire `VALIDATION.md`.

La cible de reconstruction est **Blender 4.5.x LTS**, avec son Python intégré et Cycles. Le script refuse une autre branche pour éviter de faire passer une compatibilité supposée pour un test. Aucun module Python externe, extension Blender, police, HDRI ou modèle n'est requis. Un Python 3.10+ indépendant suffit au contrôle du dossier ; les tests fournis ont été exécutés avec Python 3.14.6 sous Windows.

## Arborescence et point d'entrée

```text
blender-v1/
  README.md, LICENSE.txt, VALIDATION.md
  scene.json                    recette, versions, dépendances et sorties
  manifest.sha256.json           taille et SHA-256 des fichiers distribués
  generate_scene.py              point d'entrée à lancer DANS Blender
  inspect_scene.py               ouverture de contrôle dans un second Blender
  validate_pack.py               contrôle de fichiers SANS Blender
  01_sources/make_texture.py     recette originale du PNG
  02_projet/                    reçoit le .blend reconstruit
  03_ressources/pli-chevron.png  texture sRGB à conserver
  04_caches/                    aucun cache pour cette scène fixe
  05_rendus/                    reçoit l'aperçu CPU si demandé
  06_livraison/                 fiche de réception et rapports après exécution
```

Le manifeste couvre les fichiers distribués, à l'exception de lui-même pour éviter une empreinte circulaire. Les sorties créées ensuite ne font pas partie de ce manifeste. Une empreinte détecte une différence de fichier ; elle ne certifie ni sa provenance ni son apparence. Pour votre propre livraison, créez un nouvel inventaire daté incluant les sorties approuvées.

## 1. Extraire et vérifier avant d'ouvrir Blender

Extraire le ZIP dans un nouveau dossier, puis ouvrir un terminal à la racine `blender-v1`. Ne lancer aucune commande depuis l'intérieur d'une archive encore compressée.

```sh
python validate_pack.py --root . --json
```

Le résultat doit contenir `"ok": true` et le code de sortie doit être 0. Un fichier absent, altéré, hors du dossier ou un PNG invalide produit un échec (code 1). Arrêter ici si le contrôle échoue. Ne pas réécrire le manifeste simplement pour masquer une erreur.

Sous Windows, `py -3` peut remplacer `python`. `blender` ci-dessous doit désigner votre exécutable Blender 4.5.x ; si son dossier n'est pas dans le PATH, utiliser son chemin complet entre guillemets (avec `&` avant ce chemin dans PowerShell).

## 2. Reconstruire dans un processus Blender dédié

Le script recrée une scène vide en mémoire ; ne l'exécutez pas dans un projet non enregistré. Depuis le dossier extrait :

```sh
blender --background --factory-startup --python-exit-code 1 --python generate_scene.py -- --render-preview
```

Cette commande doit créer :

- `02_projet/renderparcel_pli_v1.blend` : scène fixe, image 1, caméra `Pli_Camera`, Cycles CPU, 1 200 × 750 pixels et 64 échantillons ;
- `05_rendus/pli_controle_cpu.png` : **si le rendu réussit**, aperçu CPU de 480 × 300 pixels, 16 échantillons, sans débruitage ;
- `06_livraison/reconstruction.json` : version Blender réellement utilisée, objets, appareil choisi et état réel du rendu.

Retirer `-- --render-preview` pour construire uniquement le `.blend`. Le rapport indiquera alors `renderExecuted: false`. Le script sauvegarde la scène à sa définition de travail avant le calcul réduit ; le `.blend` n'est donc pas remplacé par les réglages d'aperçu. Les commandes ne lancent jamais un GPU.

Les sorties existantes sont refusées. Pour un nouvel essai, extraire à nouveau le pack dans un autre dossier, plutôt que d'écraser un résultat retenu. Une exception est signalée au système par `--python-exit-code 1` ; conserver les messages du terminal en cas d'échec.

## 3. Rouvrir la scène dans un second processus

```sh
blender --background --factory-startup --python-exit-code 1 --python inspect_scene.py
```

Le contrôle ouvre le `.blend` sans exécuter ses scripts internes, vérifie les dix objets, la caméra, Cycles CPU, les réglages, la plage d'une image, AgX, la texture incorporée et son chemin relatif. Le résultat va dans `06_livraison/inspection-blender.json`. Ce contrôle n'évalue pas la beauté de l'image et ne remplace pas sa lecture.

Ouvrir ensuite le PNG avec un lecteur d'images. **Copier** `06_livraison/modele-reception.csv` vers un nouveau fichier `06_livraison/reception-executee.csv`, puis remplir cette copie : flacon entier dans le cadre, motif crème/violet/orange sur la face avant, contact avec le socle, absence de texture magenta, reflets lisibles. Le modèle reste inchangé pour préserver son empreinte ; la copie remplie est une sortie à inventorier dans votre propre livraison. Ces critères sont des intentions à vérifier après reconstruction ; aucun rendu témoin Blender n'est inclus dans la version distribuée.

## 4. Vérifier le transfert sans les anciennes ressources

Copier **tout le dossier reconstruit** sur la machine de destination ou dans un environnement où les chemins du poste de création ne sont pas accessibles. Exécuter le contrôle des fichiers puis ouvrir la copie du `.blend`. Un simple déplacement sur le même poste ne suffit pas si les anciens chemins absolus restent utilisables.

La texture externe est conservée dans `03_ressources`. Dans le `.blend`, le chemin prévu est `//../03_ressources/pli-chevron.png`, car `//` est relatif au fichier Blender placé dans `02_projet`. Le générateur charge la texture puis l'incorpore via `Image.pack()` avant l'enregistrement. Ces deux formes permettent de modifier la source tout en contrôlant l'incorporation ; après modification, recharger/incorporer et enregistrer la version retenue.

Pour un projet existant : enregistrer dans le dossier cible ; utiliser File → External Data → Make Paths Relative ; lancer Report Missing Files. Find Missing Files peut réparer les liens mais les rendre absolus : les contrôler à nouveau. Pack Resources ne contient pas toutes les données externes, notamment les vidéos. Les bibliothèques liées nécessitent leur propre procédure ; ce pack n'en utilise aucune.

## 5. Adapter la recette à votre projet

Commencer par une copie distincte, car toute modification des sources invalide le manifeste d'origine. Conserver logiciel/version, caméra, scène, moteur, définition, échantillons, transformation d'affichage, textures, extensions et destination des sorties dans un inventaire propre. Le PNG du pack est une couleur de base sRGB, pas une carte de normales ou de déplacement.

Cette scène n'utilise **aucune animation, aucun cache de simulation, aucun son, aucune police ni bibliothèque liée**. Si vous ajoutez fumée, tissu ou géométrie animée, inventorier le type de cache, son emplacement, la plage complète et la procédure de précalcul. Figer les caches avant de les copier. Contrôler les images intermédiaires et chaque fichier de la séquence : une image 1 correcte ne valide pas une animation.

Le volume du ZIP ne mesure pas la VRAM du rendu. Un aperçu CPU réduit ne permet pas d'estimer un temps GPU. Pour dimensionner votre production, mesurer votre scène complète à la définition finale et vérifier le pic mémoire avec une marge pour ses étapes exigeantes. Garder une sauvegarde indépendante jusqu'à la réception.

## Reconstruction de la texture, facultative

```sh
python 01_sources/make_texture.py --output 05_rendus/motif-reconstruit.png
```

Le calcul du motif est déterministe et n'utilise que des opérations entières. Dans les tests publiés, les octets PNG reconstruits correspondent au fichier livré avec la même bibliothèque zlib. Entre versions de compression, comparer aussi les pixels plutôt que supposer des octets comprimés identiques.

## Sources de la procédure

- [Manuel Blender 4.5, données incorporées](https://docs.blender.org/manual/sr/4.5/files/blend/packed_data.html) : portée de Pack Resources, sauvegarde et bibliothèques liées.
- [Manuel Blender 4.5, External Data](https://docs.blender.org/manual/ja/4.5/interface/window_system/topbar.html) : chemins relatifs et recherche de fichiers absents.
- [API Blender 4.5, Wm Operators](https://docs.blender.org/api/4.5/bpy.ops.wm.html) : enregistrement et ouverture avec scripts internes désactivés.
- [API Blender 4.0, Image](https://docs.blender.org/api/4.0/bpy.types.Image.html) : image externe/incorporée et opération `pack` ; référence accessible consultée, la page 4.5 n'était pas accessible pendant cette préparation.
- [Manuel Blender 4.5, ligne de commande](https://docs.blender.org/manual/es/4.5/advanced/command_line/arguments.html) : exécution du script et code de sortie Python.
- [Manuel Blender 4.5, gestion des couleurs](https://docs.blender.org/manual/sr/4.5/render/color_management.html) : interprétation des textures et transformation d'affichage.
- [Manuel Blender 4.5, précalcul](https://docs.blender.org/manual/fr/4.5/physics/baking.html) : traitement distinct des caches et plages de simulation.

Les traductions officielles sont utilisées lorsque la page anglaise ne répondait pas. Elles documentent les opérations, sans remplacer l'essai Blender qui reste à effectuer. Les liens commerciaux et le choix de GPU figurent dans le guide RenderParcel, pas dans la recette technique.

## Compatibilité des dossiers antérieurs

Les nouvelles reconstructions enregistrent `02_projet/renderparcel_pli_v1.blend`. Aucun fichier déjà créé n'est déplacé ni renommé. Si cette nouvelle sortie est absente, `inspect_scene.py` peut encore ouvrir `02_projet/prismora_pli_v1.blend`, le nom de sortie historique. Si les deux fichiers existent, l'inspection choisit la nouvelle sortie.

Les identifiants de schéma `prismora.blender-transfer.v1` et `prismora.integrity.v1`, les propriétés techniques `prismora_pack_version` et `prismora_purpose`, ainsi que le nom de module interne `prismora_validator`, restent stables pour la lecture des dossiers v1. Ce sont des clés de compatibilité, pas la marque affichée du dossier.
