# Pli — пакет передачі Blender, версія 1.0.0

Оригінальний етюд RenderParcel: флакон із фіолетової кераміки, атласний оранжевий комірець, етикетка із шевронами на папері та глиняна підставка. Кадрування розраховане на продуктове зображення з вільною зоною ліворуч. Це не клієнтський об'єкт і не модель, відтворена з фотографії.

## Що насправді містить завантаження

Цей пакет надає **генератор сцени**, оригінальну текстуру, рецепт і засоби контролю. У середовищі підготовки не було створено жодного файлу `.blend` чи рендера Blender: Blender там не знайдено. Виконана перевірка охоплює файли, шляхи, PNG, синтаксис Python і помилки залежностей. Читайте `VALIDATION.md`.

Цільова платформа для відтворення — **Blender 4.5.x LTS** з його вбудованим Python і Cycles. Скрипт відхиляє іншу гілку, щоб не видавати гадану сумісність за перевірку. Жодних зовнішніх модулів Python, розширень Blender, шрифтів, HDRI чи моделей не потрібно. Для перевірки пакета достатньо окремого Python 3.10+; надані тести виконувалися з Python 3.14.6 під Windows.

## Структура каталогів і точка входу

```text
blender-v1/
  README.md, LICENSE.txt, VALIDATION.md
  scene.json                    рецепт, версії, залежності та виводи
  manifest.sha256.json           розмір і SHA-256 розповсюджуваних файлів
  generate_scene.py              точка входу для запуску ВСЕРЕДИНІ Blender
  inspect_scene.py               контрольне відкриття в другому Blender
  validate_pack.py               перевірка файлів БЕЗ Blender
  01_sources/make_texture.py     оригінальний рецепт PNG
  02_projet/                    отримує відтворений .blend
  03_ressources/pli-chevron.png  текстура sRGB, яку слід зберегти
  04_caches/                    жодного кешу для цієї фіксованої сцени
  05_rendus/                    отримує попередній перегляд CPU за запитом
  06_livraison/                 акт приймання та звіти після виконання
```

Маніфест охоплює розповсюджувані файли, за винятком самого себе, щоб уникнути циклічного відбитка. Виводи, створені згодом, до цього маніфесту не входять. Відбиток виявляє різницю у файлі; він не засвідчує ні його походження, ні його вигляд. Для вашої власної поставки створіть новий датований перелік, що включає затверджені виводи.

## 1. Розпакувати та перевірити перед відкриттям Blender

Розпакуйте ZIP у нову теку, потім відкрийте термінал у корені `blender-v1`. Не запускайте жодних команд із середини ще стиснутого архіву.

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

Результат має містити `"ok": true`, а код виходу має бути 0. Відсутній, змінений, розташований поза текою файл або недійсний PNG призводить до збою (код 1). Зупиніться тут, якщо перевірка не пройшла. Не переписуйте маніфест лише для того, щоб приховати помилку.

Під Windows `py -3` може замінити `python`. `blender` нижче має вказувати на ваш виконуваний файл Blender 4.5.x; якщо його теки немає в PATH, використайте повний шлях у лапках (з `&` перед цим шляхом у PowerShell).

## 2. Відтворити в окремому процесі Blender

Скрипт створює порожню сцену в пам'яті; не запускайте його в незбереженому проєкті. З розпакованої теки:

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

Ця команда має створити:

- `02_projet/renderparcel_pli_v1.blend`: фіксована сцена, зображення 1, камера `Pli_Camera`, Cycles CPU, 1 200 × 750 пікселів і 64 семпли;
- `05_rendus/pli_controle_cpu.png`: **якщо рендер успішний**, попередній перегляд CPU 480 × 300 пікселів, 16 семплів, без шумозаглушення;
- `06_livraison/reconstruction.json`: версія Blender, фактично використана, об'єкти, обраний пристрій і фактичний стан рендера.

Приберіть `-- --render-preview`, щоб побудувати лише `.blend`. Тоді звіт вкаже `renderExecuted: false`. Скрипт зберігає сцену з її робочим визначенням перед зменшеним обчисленням; тому `.blend` не замінюється налаштуваннями попереднього перегляду. Команди ніколи не запускають GPU.

Наявні виводи відхиляються. Для нової спроби розпакуйте пакет знову в іншу теку, а не перезаписуйте збережений результат. Виняток повідомляється системі через `--python-exit-code 1`; зберігайте повідомлення термінала в разі збою.

## 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

- [Посібник Blender 4.5, вбудовані дані](https://docs.blender.org/manual/sr/4.5/files/blend/packed_data.html) : область застосування Pack Resources, збереження та пов'язані бібліотеки.
- [Посібник Blender 4.5, External Data](https://docs.blender.org/manual/ja/4.5/interface/window_system/topbar.html) : відносні шляхи та пошук відсутніх файлів.
- [API Blender 4.5, Wm Operators](https://docs.blender.org/api/4.5/bpy.ops.wm.html) : збереження та відкриття з вимкненими внутрішніми скриптами.
- [API Blender 4.0, Image](https://docs.blender.org/api/4.0/bpy.types.Image.html) : зовнішнє/вбудоване зображення та операція `pack` ; використано доступне довідкове джерело, сторінка 4.5 була недоступною під час цієї підготовки.
- [Посібник Blender 4.5, командний рядок](https://docs.blender.org/manual/es/4.5/advanced/command_line/arguments.html) : виконання скрипту та код виходу Python.
- [Посібник Blender 4.5, керування кольором](https://docs.blender.org/manual/sr/4.5/render/color_management.html) : інтерпретація текстур і перетворення відображення.
- [Посібник Blender 4.5, попередній розрахунок](https://docs.blender.org/manual/fr/4.5/physics/baking.html) : окрема обробка кешів і діапазонів симуляції.

Офіційні переклади використовуються, коли англійська сторінка не відповідала. Вони документують операції, не замінюючи випробування Blender, яке ще належить виконати. Комерційні посилання та вибір GPU наведено в посібнику RenderParcel, а не в технічному рецепті.

## Сумісність попередніх каталогів

Нові реконструкції зберігають `02_projet/renderparcel_pli_v1.blend`. Жоден уже створений файл не переміщується й не перейменовується. Якщо цей новий вихідний файл відсутній, `inspect_scene.py` все ще може відкрити `02_projet/prismora_pli_v1.blend`, історичну назву вихідного файлу. Якщо існують обидва файли, інспекція вибирає новий вихідний файл.

Ідентифікатори схеми `prismora.blender-transfer.v1` та `prismora.integrity.v1`, технічні властивості `prismora_pack_version` і `prismora_purpose`, а також назва внутрішнього модуля `prismora_validator` залишаються незмінними для читання каталогів v1. Це ключі сумісності, а не відображувана назва каталогу.
