# Pli — pacote de transferência Blender, versão 1.0.0

Um estudo original da RenderParcel: frasco em cerâmica roxa, gola laranja acetinada, etiqueta em chevron sobre papel e base em argila. O enquadramento foi pensado para uma imagem de produto com uma área livre à esquerda. Não se trata nem de um objeto de cliente nem de um modelo reproduzido a partir de uma fotografia.

## O que o download contém de fato

Este pacote fornece um **gerador de cena**, uma textura original, uma receita e controles. Nenhum arquivo `.blend` nem render do Blender foi produzido no ambiente de preparação: o Blender não foi encontrado nele. A validação realizada abrange os arquivos, os caminhos, o PNG, a sintaxe Python e os erros de dependências. Leia `VALIDATION.md`.

O alvo de reconstrução é o **Blender 4.5.x LTS**, com seu Python integrado e o Cycles. O script recusa outro branch para evitar fazer passar uma compatibilidade suposta por um teste. Nenhum módulo Python externo, extensão do Blender, fonte, HDRI ou modelo é exigido. Um Python 3.10+ independente basta para a conferência da pasta; os testes fornecidos foram executados com Python 3.14.6 no Windows.

## Estrutura de pastas e ponto de entrada

```text
blender-v1/
  README.md, LICENSE.txt, VALIDATION.md
  scene.json                    receita, versões, dependências e saídas
  manifest.sha256.json           tamanho e SHA-256 dos arquivos distribuídos
  generate_scene.py              ponto de entrada a ser executado DENTRO do Blender
  inspect_scene.py               abertura de conferência em um segundo Blender
  validate_pack.py               verificação de arquivos SEM Blender
  01_sources/make_texture.py     receita original do PNG
  02_projet/                    recebe o .blend reconstruído
  03_ressources/pli-chevron.png  textura sRGB a ser mantida
  04_caches/                    nenhum cache para esta cena fixa
  05_rendus/                    recebe a prévia de CPU se solicitada
  06_livraison/                 ficha de recebimento e relatórios após a execução
```

O manifesto cobre os arquivos distribuídos, com exceção dele mesmo para evitar uma impressão digital circular. As saídas criadas depois não fazem parte deste manifesto. Uma impressão digital detecta uma diferença de arquivo; ela não certifica nem sua proveniência nem sua aparência. Para a sua própria entrega, crie um novo inventário datado incluindo as saídas aprovadas.

## 1. Extrair e verificar antes de abrir o Blender

Extraia o ZIP em uma nova pasta, depois abra um terminal na raiz `blender-v1`. Não execute nenhum comando de dentro de um arquivo ainda compactado.

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

O resultado deve conter `"ok": true` e o código de saída deve ser 0. Um arquivo ausente, alterado, fora da pasta ou um PNG inválido gera uma falha (código 1). Pare aqui se a verificação falhar. Não reescreva o manifesto apenas para mascarar um erro.

No Windows, `py -3` pode substituir `python`. O `blender` abaixo deve designar seu executável Blender 4.5.x; se a pasta dele não estiver no PATH, use o caminho completo entre aspas (com `&` antes desse caminho no PowerShell).

## 2. Reconstruir em um processo Blender dedicado

O script recria uma cena vazia na memória; não o execute em um projeto não salvo. A partir da pasta extraída:

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

Este comando deve criar:

- `02_projet/renderparcel_pli_v1.blend`: cena fixa, imagem 1, câmera `Pli_Camera`, Cycles CPU, 1.200 × 750 pixels e 64 amostras;
- `05_rendus/pli_controle_cpu.png`: **se o render for bem-sucedido**, prévia de CPU de 480 × 300 pixels, 16 amostras, sem desruído;
- `06_livraison/reconstruction.json`: versão do Blender realmente utilizada, objetos, dispositivo escolhido e estado real do render.

Remova `-- --render-preview` para construir apenas o `.blend`. O relatório indicará então `renderExecuted: false`. O script salva a cena em sua definição de trabalho antes do cálculo reduzido; o `.blend` portanto não é substituído pelos ajustes de prévia. Os comandos nunca acionam uma GPU.

As saídas existentes são recusadas. Para uma nova tentativa, extraia novamente o pacote em outra pasta, em vez de sobrescrever um resultado aprovado. Uma exceção é sinalizada ao sistema por `--python-exit-code 1`; conserve as mensagens do terminal em caso de falha.

## 3. Reabrir a cena em um segundo processo

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

A verificação abre o `.blend` sem executar seus scripts internos, confere os dez objetos, a câmera, o Cycles CPU, as configurações, a faixa de uma imagem, o AgX, a textura incorporada e seu caminho relativo. O resultado vai para `06_livraison/inspection-blender.json`. Essa verificação não avalia a beleza da imagem e não substitui a sua leitura.

Em seguida, abra o PNG com um visualizador de imagens. **Copie** `06_livraison/modele-reception.csv` para um novo arquivo `06_livraison/reception-executee.csv` e depois preencha essa cópia: frasco inteiro no enquadramento, padrão creme/violeta/laranja na face frontal, contato com a base, ausência de textura magenta, reflexos legíveis. O modelo permanece inalterado para preservar sua impressão digital; a cópia preenchida é uma saída a ser inventariada na sua própria entrega. Esses critérios são intenções a verificar após a reconstrução; nenhum render de referência do Blender está incluído na versão distribuída.

## 4. Verificar a transferência sem os recursos antigos

Copie **toda a pasta reconstruída** para a máquina de destino ou para um ambiente onde os caminhos da estação de criação não estejam acessíveis. Execute a verificação dos arquivos e depois abra a cópia do `.blend`. Um simples deslocamento na mesma estação não basta se os antigos caminhos absolutos continuarem utilizáveis.

A textura externa é mantida em `03_ressources`. No `.blend`, o caminho previsto é `//../03_ressources/pli-chevron.png`, pois `//` é relativo ao arquivo Blender colocado em `02_projet`. O gerador carrega a textura e depois a incorpora via `Image.pack()` antes de salvar. Essas duas formas permitem modificar a fonte enquanto se controla a incorporação; após a modificação, recarregue/incorpore e salve a versão escolhida.

Para um projeto existente: salve na pasta de destino; use File → External Data → Make Paths Relative; execute Report Missing Files. Find Missing Files pode reparar os links, mas torná-los absolutos: verifique-os novamente. Pack Resources não contém todos os dados externos, em especial os vídeos. As bibliotecas vinculadas exigem seu próprio procedimento; este pacote não usa nenhuma.

## 5. Adaptar a receita ao seu projeto

Comece por uma cópia separada, pois qualquer modificação das fontes invalida o manifesto original. Mantenha software/versão, câmera, cena, motor, definição, amostras, transformação de exibição, texturas, extensões e destino das saídas em um inventário próprio. O PNG do pacote é uma cor base sRGB, não um mapa de normais ou de deslocamento.

Esta cena não usa **nenhuma animação, nenhum cache de simulação, nenhum som, nenhuma fonte nem biblioteca vinculada**. Se você adicionar fumaça, tecido ou geometria animada, inventarie o tipo de cache, seu local, a faixa completa e o procedimento de pré-cálculo. Congele os caches antes de copiá-los. Verifique as imagens intermediárias e cada arquivo da sequência: uma imagem 1 correta não valida uma animação.

O volume do ZIP não mede a VRAM do render. Uma prévia CPU reduzida não permite estimar um tempo de GPU. Para dimensionar sua produção, meça sua cena completa na definição final e verifique o pico de memória com uma margem para suas etapas exigentes. Mantenha um backup independente até a recepção.

## Reconstrução da textura, opcional

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

O cálculo do padrão é determinístico e usa apenas operações com números inteiros. Nos testes publicados, os bytes PNG reconstruídos correspondem ao arquivo entregue com a mesma biblioteca zlib. Entre versões de compressão, compare também os pixels em vez de supor bytes comprimidos idênticos.

## Fontes do procedimento

- [Manual Blender 4.5, dados incorporados](https://docs.blender.org/manual/sr/4.5/files/blend/packed_data.html): escopo de Pack Resources, salvamento e bibliotecas vinculadas.
- [Manual Blender 4.5, External Data](https://docs.blender.org/manual/ja/4.5/interface/window_system/topbar.html): caminhos relativos e busca de arquivos ausentes.
- [API Blender 4.5, Wm Operators](https://docs.blender.org/api/4.5/bpy.ops.wm.html): salvamento e abertura com scripts internos desativados.
- [API Blender 4.0, Image](https://docs.blender.org/api/4.0/bpy.types.Image.html): imagem externa/incorporada e operação `pack`; referência acessível consultada, a página 4.5 não estava acessível durante esta preparação.
- [Manual Blender 4.5, linha de comando](https://docs.blender.org/manual/es/4.5/advanced/command_line/arguments.html): execução do script e código de saída Python.
- [Manual Blender 4.5, gerenciamento de cores](https://docs.blender.org/manual/sr/4.5/render/color_management.html): interpretação das texturas e transformação de exibição.
- [Manual Blender 4.5, pré-cálculo](https://docs.blender.org/manual/fr/4.5/physics/baking.html): processamento distinto dos caches e intervalos de simulação.

As traduções oficiais são usadas quando a página em inglês não respondia. Elas documentam as operações, sem substituir o teste no Blender que ainda precisa ser feito. Os links comerciais e a escolha de GPU estão no guia RenderParcel, não na receita técnica.

## Compatibilidade de pastas anteriores

As novas reconstruções salvam `02_projet/renderparcel_pli_v1.blend`. Nenhum arquivo já criado é movido ou renomeado. Se essa nova saída estiver ausente, `inspect_scene.py` ainda pode abrir `02_projet/prismora_pli_v1.blend`, o nome de saída histórico. Se os dois arquivos existirem, a inspeção escolhe a nova saída.

Os identificadores de esquema `prismora.blender-transfer.v1` e `prismora.integrity.v1`, as propriedades técnicas `prismora_pack_version` e `prismora_purpose`, assim como o nome de módulo interno `prismora_validator`, permanecem estáveis para a leitura das pastas v1. São chaves de compatibilidade, não a marca exibida da pasta.
