# 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. Повторное открытие сцены во втором процессе

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

Проверка открывает `.blend` без выполнения его внутренних скриптов, проверяет десять объектов, камеру, Cycles CPU, настройки, диапазон одного кадра, AgX, встроенную текстуру и её относительный путь. Результат сохраняется в `06_livraison/inspection-blender.json`. Эта проверка не оценивает красоту изображения и не заменяет его просмотр.

Затем откройте PNG в программе для просмотра изображений. **Скопируйте** `06_livraison/modele-reception.csv` в новый файл `06_livraison/reception-executee.csv`, после чего заполните эту копию: весь флакон в кадре, кремово-фиолетово-оранжевый узор на лицевой стороне, контакт с основанием, отсутствие пурпурной текстуры, читаемые отражения. Шаблон остаётся неизменным, чтобы сохранить его отпечаток; заполненная копия — это результат, который нужно внести в опись в вашей собственной поставке. Эти критерии — намерения, которые следует проверить после реконструкции; ни один эталонный рендер Blender не включён в распространяемую версию.

## 4. Проверка переноса без старых ресурсов

Скопируйте **всю реконструированную папку** на целевую машину или в среду, где пути с рабочей станции недоступны. Запустите проверку файлов, затем откройте копию `.blend`. Простого перемещения на той же машине недостаточно, если старые абсолютные пути остаются доступными.

Внешняя текстура хранится в `03_ressources`. В `.blend` предусмотрен путь `//../03_ressources/pli-chevron.png`, поскольку `//` задаётся относительно файла Blender, расположенного в `02_projet`. Генератор загружает текстуру, а затем встраивает её через `Image.pack()` перед сохранением. Эти две формы позволяют изменять источник, контролируя встраивание; после изменения перезагрузите/встройте и сохраните выбранную версию.

Для существующего проекта: сохраните в целевую папку; используйте File → External Data → Make Paths Relative; запустите Report Missing Files. Find Missing Files может восстановить связи, но сделать их абсолютными: проверьте их снова. Pack Resources содержит не все внешние данные, в частности видео. Связанные библиотеки требуют собственной процедуры; этот пакет не использует ни одной из них.

## 5. Адаптация рецепта под ваш проект

Начните с отдельной копии, поскольку любое изменение источников делает исходный манифест недействительным. Сохраните программное обеспечение/версию, камеру, сцену, движок, разрешение, сэмплы, преобразование отображения, текстуры, расширения и назначение выходных данных в отдельной описи. PNG из пакета — это базовый цвет sRGB, а не карта нормалей или смещения.

Эта сцена не использует **ни анимации, ни кэша симуляции, ни звука, ни шрифтов, ни связанных библиотек**. Если вы добавляете дым, ткань или анимированную геометрию, внесите в опись тип кэша, его расположение, полный диапазон и процедуру предварительного расчёта. Зафиксируйте кэши перед копированием. Проверяйте промежуточные изображения и каждый файл последовательности: один корректный кадр 1 не подтверждает корректность анимации.

Объём ZIP не отражает объём VRAM, необходимый для рендера. Уменьшенный предпросмотр на CPU не позволяет оценить время на GPU. Чтобы рассчитать масштаб вашего производства, измерьте вашу полную сцену в итоговом разрешении и проверьте пиковое потребление памяти с запасом на её требовательные этапы. Сохраняйте независимую резервную копию до приёмки.

## Реконструкция текстуры, необязательная

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

Расчёт узора детерминирован и использует только целочисленные операции. В опубликованных тестах восстановленные байты PNG совпадают с поставляемым файлом при той же библиотеке zlib. При разных версиях сжатия также сравнивайте пиксели, а не предполагайте идентичность сжатых байтов.

## Источники процедуры

- [Руководство 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. Это ключи совместимости, а не отображаемый бренд папки.
