# Pli — paquete de transferencia de Blender, versión 1.0.0

Un estudio original de RenderParcel: frasco de cerámica violeta, cuello naranja satinado, etiqueta de chevrones sobre papel y base de arcilla. El encuadre está pensado para una imagen de producto con una zona libre a la izquierda. No se trata ni de un objeto de cliente ni de un modelo reproducido a partir de una fotografía.

## Qué contiene realmente la descarga

Este paquete proporciona un **generador de escena**, una textura original, una receta y controles. No se ha producido ningún archivo `.blend` ni render de Blender en el entorno de preparación: no se encontró Blender allí. La validación realizada abarca los archivos, las rutas, el PNG, la sintaxis de Python y los errores de dependencias. Lee `VALIDATION.md`.

El objetivo de reconstrucción es **Blender 4.5.x LTS**, con su Python integrado y Cycles. El script rechaza otra rama para evitar hacer pasar una compatibilidad supuesta por una prueba. No se requiere ningún módulo Python externo, extensión de Blender, fuente, HDRI ni modelo. Un Python 3.10+ independiente basta para el control del paquete; las pruebas incluidas se ejecutaron con Python 3.14.6 en Windows.

## Estructura de directorios y punto de entrada

```text
blender-v1/
  README.md, LICENSE.txt, VALIDATION.md
  scene.json                    receta, versiones, dependencias y salidas
  manifest.sha256.json           tamaño y SHA-256 de los archivos distribuidos
  generate_scene.py              punto de entrada que se debe ejecutar DENTRO de Blender
  inspect_scene.py               apertura de control en un segundo Blender
  validate_pack.py               control de archivos SIN Blender
  01_sources/make_texture.py     receta original del PNG
  02_projet/                    recibe el .blend reconstruido
  03_ressources/pli-chevron.png  textura sRGB que se debe conservar
  04_caches/                    ninguna caché para esta escena fija
  05_rendus/                    recibe la vista previa CPU si se solicita
  06_livraison/                 ficha de recepción e informes tras la ejecución
```

El manifiesto cubre los archivos distribuidos, excepto a sí mismo para evitar una huella circular. Las salidas creadas después no forman parte de este manifiesto. Una huella detecta una diferencia de archivo; no certifica ni su procedencia ni su apariencia. Para tu propia entrega, crea un nuevo inventario con fecha que incluya las salidas aprobadas.

## 1. Extraer y verificar antes de abrir Blender

Extrae el ZIP en una carpeta nueva y luego abre un terminal en la raíz `blender-v1`. No ejecutes ningún comando desde el interior de un archivo aún comprimido.

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

El resultado debe contener `"ok": true` y el código de salida debe ser 0. Un archivo ausente, alterado, fuera de la carpeta o un PNG no válido produce un fallo (código 1). Detente aquí si el control falla. No reescribas el manifiesto simplemente para ocultar un error.

En Windows, `py -3` puede sustituir a `python`. `blender` a continuación debe designar tu ejecutable de Blender 4.5.x; si su carpeta no está en el PATH, usa su ruta completa entre comillas (con `&` antes de esa ruta en PowerShell).

## 2. Reconstruir en un proceso de Blender dedicado

El script vuelve a crear una escena vacía en memoria; no lo ejecutes en un proyecto sin guardar. Desde la carpeta extraída:

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

Este comando debe crear:

- `02_projet/renderparcel_pli_v1.blend`: escena fija, imagen 1, cámara `Pli_Camera`, Cycles CPU, 1200 × 750 píxeles y 64 muestras;
- `05_rendus/pli_controle_cpu.png`: **si el render se realiza correctamente**, vista previa CPU de 480 × 300 píxeles, 16 muestras, sin reducción de ruido;
- `06_livraison/reconstruction.json`: versión de Blender realmente utilizada, objetos, dispositivo elegido y estado real del render.

Quita `-- --render-preview` para construir únicamente el `.blend`. El informe indicará entonces `renderExecuted: false`. El script guarda la escena con su definición de trabajo antes del cálculo reducido; por lo tanto, el `.blend` no se sustituye por los ajustes de vista previa. Los comandos nunca lanzan una GPU.

Las salidas existentes se rechazan. Para un nuevo intento, extrae de nuevo el paquete en otra carpeta, en lugar de sobrescribir un resultado conservado. Una excepción se comunica al sistema mediante `--python-exit-code 1`; conserva los mensajes del terminal en caso de fallo.

## 3. Reabrir la escena en un segundo proceso

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

La comprobación abre el `.blend` sin ejecutar sus scripts internos, verifica los diez objetos, la cámara, Cycles CPU, los ajustes, el rango de un fotograma, AgX, la textura incorporada y su ruta relativa. El resultado va a `06_livraison/inspection-blender.json`. Esta comprobación no evalúa la belleza de la imagen ni sustituye su lectura.

A continuación, abre el PNG con un visor de imágenes. **Copia** `06_livraison/modele-reception.csv` a un archivo nuevo `06_livraison/reception-executee.csv` y rellena esa copia: frasco entero dentro del encuadre, motivo crema/violeta/naranja en la cara frontal, contacto con la base, ausencia de textura magenta, reflejos legibles. La plantilla permanece sin cambios para preservar su huella; la copia rellenada es una salida que debes inventariar en tu propia entrega. Estos criterios son intenciones que hay que verificar tras la reconstrucción; en la versión distribuida no se incluye ningún render de referencia de Blender.

## 4. Verificar la transferencia sin los recursos antiguos

Copia **toda la carpeta reconstruida** en la máquina de destino o en un entorno donde las rutas del equipo de creación no sean accesibles. Ejecuta la comprobación de archivos y luego abre la copia del `.blend`. Un simple movimiento en el mismo equipo no basta si las antiguas rutas absolutas siguen siendo utilizables.

La textura externa se conserva en `03_ressources`. En el `.blend`, la ruta prevista es `//../03_ressources/pli-chevron.png`, ya que `//` es relativo al archivo Blender situado en `02_projet`. El generador carga la textura y luego la incorpora mediante `Image.pack()` antes de guardar. Estas dos formas permiten modificar la fuente a la vez que se controla la incorporación; tras la modificación, vuelve a cargar/incorporar y guarda la versión elegida.

Para un proyecto existente: guarda en la carpeta de destino; usa File → External Data → Make Paths Relative; ejecuta Report Missing Files. Find Missing Files puede reparar los enlaces, pero volverlos absolutos: vuelve a comprobarlos. Pack Resources no contiene todos los datos externos, en particular los vídeos. Las bibliotecas vinculadas requieren su propio procedimiento; este pack no usa ninguna.

## 5. Adaptar la receta a tu proyecto

Empieza por una copia distinta, ya que cualquier modificación de las fuentes invalida el manifiesto original. Conserva software/versión, cámara, escena, motor, definición, muestras, transformación de visualización, texturas, extensiones y destino de las salidas en un inventario propio. El PNG del pack es un color base sRGB, no un mapa de normales ni de desplazamiento.

Esta escena no usa **ninguna animación, ninguna caché de simulación, ningún sonido, ninguna fuente ni biblioteca vinculada**. Si añades humo, tela o geometría animada, inventaría el tipo de caché, su ubicación, el rango completo y el procedimiento de precálculo. Congela las cachés antes de copiarlas. Comprueba las imágenes intermedias y cada archivo de la secuencia: un fotograma 1 correcto no valida una animación.

El volumen del ZIP no mide la VRAM del render. Una vista previa CPU reducida no permite estimar un tiempo de GPU. Para dimensionar tu producción, mide tu escena completa con la definición final y verifica el pico de memoria con un margen para sus etapas exigentes. Mantén una copia de seguridad independiente hasta la recepción.

## Reconstrucción de la textura, opcional

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

El cálculo del motivo es determinista y solo utiliza operaciones con enteros. En las pruebas publicadas, los bytes PNG reconstruidos coinciden con el archivo entregado usando la misma biblioteca zlib. Entre versiones de compresión, compara también los píxeles en lugar de suponer que los bytes comprimidos son idénticos.

## Fuentes del procedimiento

- [Manual de Blender 4.5, datos incorporados](https://docs.blender.org/manual/sr/4.5/files/blend/packed_data.html): alcance de Pack Resources, guardado y bibliotecas vinculadas.
- [Manual de Blender 4.5, External Data](https://docs.blender.org/manual/ja/4.5/interface/window_system/topbar.html): rutas relativas y búsqueda de archivos ausentes.
- [API de Blender 4.5, Wm Operators](https://docs.blender.org/api/4.5/bpy.ops.wm.html): guardado y apertura con scripts internos desactivados.
- [API de Blender 4.0, Image](https://docs.blender.org/api/4.0/bpy.types.Image.html): imagen externa/incorporada y operación `pack`; referencia accesible consultada, la página 4.5 no estaba accesible durante esta preparación.
- [Manual de Blender 4.5, línea de comandos](https://docs.blender.org/manual/es/4.5/advanced/command_line/arguments.html): ejecución del script y código de salida de Python.
- [Manual de Blender 4.5, gestión del color](https://docs.blender.org/manual/sr/4.5/render/color_management.html): interpretación de las texturas y transformación de visualización.
- [Manual de Blender 4.5, precálculo](https://docs.blender.org/manual/fr/4.5/physics/baking.html): procesamiento distinto de las cachés y rangos de simulación.

Se utilizan las traducciones oficiales cuando la página en inglés no respondía. Documentan las operaciones, sin sustituir la prueba en Blender que queda por hacer. Los enlaces comerciales y la elección de GPU figuran en la guía de RenderParcel, no en la receta técnica.

## Compatibilidad de las carpetas anteriores

Las nuevas reconstrucciones guardan `02_projet/renderparcel_pli_v1.blend`. Ningún archivo ya creado se mueve ni se renombra. Si esta nueva salida no está, `inspect_scene.py` puede seguir abriendo `02_projet/prismora_pli_v1.blend`, el nombre de salida histórico. Si ambos archivos existen, la inspección elige la nueva salida.

Los identificadores de esquema `prismora.blender-transfer.v1` y `prismora.integrity.v1`, las propiedades técnicas `prismora_pack_version` y `prismora_purpose`, así como el nombre de módulo interno `prismora_validator`, permanecen estables para la lectura de las carpetas v1. Son claves de compatibilidad, no la marca mostrada de la carpeta.
