# Pli — pakiet transferu Blender, wersja 1.0.0

Oryginalne opracowanie RenderParcel: flakon z fioletowej ceramiki, satynowa pomarańczowa kryza, etykieta z chevronami na papierze i gliniana podstawa. Kadr zaplanowano pod zdjęcie produktowe z wolną strefą po lewej stronie. Nie jest to ani obiekt klienta, ani model odtworzony ze zdjęcia.

## Co faktycznie zawiera pobrany plik

Ten pakiet dostarcza **generator sceny**, oryginalną teksturę, recepturę i mechanizmy kontrolne. W środowisku przygotowania nie powstał żaden plik `.blend` ani render z Blendera: Blender nie został w nim znaleziony. Przeprowadzona walidacja obejmuje pliki, ścieżki, PNG, składnię Pythona i błędy zależności. Przeczytaj `VALIDATION.md`.

Celem rekonstrukcji jest **Blender 4.5.x LTS** z wbudowanym Pythonem i Cycles. Skrypt odrzuca inną gałąź, aby nie przedstawiać domniemanej zgodności jako przetestowanej. Nie są wymagane żadne zewnętrzne moduły Pythona, rozszerzenia Blendera, czcionki, HDRI ani modele. Do kontroli pakietu wystarczy samodzielny Python 3.10+; dołączone testy wykonano z Pythonem 3.14.6 pod Windows.

## Struktura katalogów i punkt wejścia

```text
blender-v1/
  README.md, LICENSE.txt, VALIDATION.md
  scene.json                    receptura, wersje, zależności i wyniki
  manifest.sha256.json           rozmiar i SHA-256 dystrybuowanych plików
  generate_scene.py              punkt wejścia do uruchomienia W Blenderze
  inspect_scene.py               otwarcie kontrolne w drugim Blenderze
  validate_pack.py               kontrola plików BEZ Blendera
  01_sources/make_texture.py     oryginalna receptura PNG
  02_projet/                    odbiera zrekonstruowany .blend
  03_ressources/pli-chevron.png  tekstura sRGB do zachowania
  04_caches/                    brak pamięci podręcznej dla tej stałej sceny
  05_rendus/                    odbiera podgląd CPU, jeśli zostanie zażądany
  06_livraison/                 karta odbioru i raporty po wykonaniu
```

Manifest obejmuje dystrybuowane pliki, z wyjątkiem samego siebie, aby uniknąć cyklicznego odcisku. Wyniki utworzone później nie wchodzą w skład tego manifestu. Odcisk wykrywa różnicę między plikami; nie poświadcza ani ich pochodzenia, ani wyglądu. Na potrzeby własnej dostawy utwórz nowy, opatrzony datą inwentarz obejmujący zatwierdzone wyniki.

## 1. Rozpakuj i zweryfikuj przed otwarciem Blendera

Rozpakuj ZIP do nowego folderu, a następnie otwórz terminal w katalogu głównym `blender-v1`. Nie uruchamiaj żadnego polecenia z wnętrza wciąż skompresowanego archiwum.

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

Wynik musi zawierać `"ok": true`, a kod wyjścia musi wynosić 0. Brakujący plik, zmieniony plik, plik spoza folderu lub nieprawidłowy PNG powoduje błąd (kod 1). Zatrzymaj się tutaj, jeśli kontrola się nie powiedzie. Nie przepisuj manifestu tylko po to, by ukryć błąd.

W systemie Windows `py -3` może zastąpić `python`. Poniższe `blender` musi wskazywać Twój plik wykonywalny Blender 4.5.x; jeśli jego folder nie znajduje się w PATH, użyj pełnej ścieżki w cudzysłowie (z `&` przed tą ścieżką w PowerShell).

## 2. Zrekonstruuj w dedykowanym procesie Blendera

Skrypt odtwarza pustą scenę w pamięci; nie uruchamiaj go w niezapisanym projekcie. Z rozpakowanego folderu:

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

To polecenie powinno utworzyć:

- `02_projet/renderparcel_pli_v1.blend`: stała scena, obraz 1, kamera `Pli_Camera`, Cycles CPU, 1 200 × 750 pikseli i 64 próbki;
- `05_rendus/pli_controle_cpu.png`: **jeśli render się powiedzie**, podgląd CPU o rozmiarze 480 × 300 pikseli, 16 próbek, bez odszumiania;
- `06_livraison/reconstruction.json`: faktycznie użyta wersja Blendera, obiekty, wybrane urządzenie i rzeczywisty stan renderu.

Usuń `-- --render-preview`, aby zbudować wyłącznie `.blend`. Raport wskaże wtedy `renderExecuted: false`. Skrypt zapisuje scenę w jej definicji roboczej przed obliczeniem zredukowanym; `.blend` nie zostaje więc zastąpiony ustawieniami podglądu. Polecenia nigdy nie uruchamiają GPU.

Istniejące wyniki są odrzucane. W celu ponownej próby rozpakuj pakiet do innego folderu, zamiast nadpisywać zatrzymany wynik. Wyjątek jest zgłaszany systemowi przez `--python-exit-code 1`; w razie niepowodzenia zachowaj komunikaty z terminala.

## 3. Ponowne otwarcie sceny w drugim procesie

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

Kontrola otwiera plik `.blend` bez uruchamiania jego wewnętrznych skryptów, sprawdza dziesięć obiektów, kamerę, Cycles CPU, ustawienia, zakres jednej klatki, AgX, wbudowaną teksturę i jej ścieżkę względną. Wynik trafia do `06_livraison/inspection-blender.json`. Ta kontrola nie ocenia piękna obrazu i nie zastępuje jego obejrzenia.

Następnie otwórz plik PNG w przeglądarce obrazów. **Skopiuj** `06_livraison/modele-reception.csv` do nowego pliku `06_livraison/reception-executee.csv`, a potem wypełnij tę kopię: cały flakon w kadrze, wzór kremowy/fioletowy/pomarańczowy na przedniej ściance, kontakt z podstawą, brak magenta tekstury, czytelne odbicia. Wzorzec pozostaje niezmieniony, aby zachować swój odcisk; wypełniona kopia jest wynikiem do zinwentaryzowania w Twojej własnej dostawie. Te kryteria to intencje do sprawdzenia po rekonstrukcji; żaden render kontrolny z Blendera nie jest dołączony do wersji dystrybuowanej.

## 4. Sprawdzenie transferu bez starych zasobów

Skopiuj **cały zrekonstruowany folder** na maszynę docelową lub do środowiska, w którym ścieżki z komputera twórczego nie są dostępne. Uruchom kontrolę plików, a następnie otwórz kopię pliku `.blend`. Samo przeniesienie na tym samym komputerze nie wystarczy, jeśli stare ścieżki absolutne pozostają użyteczne.

Tekstura zewnętrzna jest zachowana w `03_ressources`. W pliku `.blend` przewidziana ścieżka to `//../03_ressources/pli-chevron.png`, ponieważ `//` jest względne wobec pliku Blendera umieszczonego w `02_projet`. Generator wczytuje teksturę, a następnie wbudowuje ją przez `Image.pack()` przed zapisem. Te dwie formy pozwalają modyfikować źródło przy jednoczesnej kontroli wbudowania; po modyfikacji wczytaj ponownie/wbuduj i zapisz wybraną wersję.

W przypadku istniejącego projektu: zapisz w folderze docelowym; użyj File → External Data → Make Paths Relative; uruchom Report Missing Files. Find Missing Files może naprawić odnośniki, ale uczynić je absolutnymi: sprawdź je ponownie. Pack Resources nie zawiera wszystkich danych zewnętrznych, w szczególności wideo. Biblioteki podłączone wymagają własnej procedury; ten pakiet nie używa żadnej.

## 5. Dostosowanie receptury do Twojego projektu

Zacznij od osobnej kopii, ponieważ każda modyfikacja źródeł unieważnia pierwotny manifest. Zachowaj oprogramowanie/wersję, kamerę, scenę, silnik, rozdzielczość, próbki, transformację wyświetlania, tekstury, rozszerzenia i miejsce docelowe wyników w osobnej inwentaryzacji. PNG z pakietu to bazowy kolor sRGB, nie mapa normalnych ani przesunięcia.

Ta scena nie używa **żadnej animacji, żadnego cache symulacji, żadnego dźwięku, żadnej czcionki ani biblioteki podłączonej**. Jeśli dodasz dym, tkaninę lub animowaną geometrię, zinwentaryzuj typ cache, jego lokalizację, pełny zakres i procedurę wstępnego obliczania. Zamroź cache przed ich skopiowaniem. Sprawdź klatki pośrednie i każdy plik sekwencji: poprawna klatka 1 nie zatwierdza animacji.

Rozmiar ZIP nie mierzy VRAM renderu. Zredukowany podgląd CPU nie pozwala oszacować czasu GPU. Aby zwymiarować swoją produkcję, zmierz pełną scenę w finalnej rozdzielczości i sprawdź szczyt pamięci z marginesem na jej wymagające etapy. Zachowaj niezależną kopię zapasową aż do odbioru.

## Rekonstrukcja tekstury, opcjonalna

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

Obliczenie wzoru jest deterministyczne i wykorzystuje wyłącznie operacje na liczbach całkowitych. W opublikowanych testach zrekonstruowane bajty PNG odpowiadają plikowi dostarczonemu z tą samą biblioteką zlib. Między wersjami kompresji porównuj także piksele, zamiast zakładać identyczne bajty skompresowane.

## Źródła procedury

- [Podręcznik Blender 4.5, dane wbudowane](https://docs.blender.org/manual/sr/4.5/files/blend/packed_data.html): zakres Pack Resources, zapisywanie i biblioteki powiązane.
- [Podręcznik Blender 4.5, External Data](https://docs.blender.org/manual/ja/4.5/interface/window_system/topbar.html): ścieżki względne i wyszukiwanie brakujących plików.
- [API Blender 4.5, Wm Operators](https://docs.blender.org/api/4.5/bpy.ops.wm.html): zapisywanie i otwieranie z wyłączonymi skryptami wewnętrznymi.
- [API Blender 4.0, Image](https://docs.blender.org/api/4.0/bpy.types.Image.html): obraz zewnętrzny/wbudowany i operacja `pack`; dostępne źródło sprawdzone, strona 4.5 nie była dostępna podczas tych przygotowań.
- [Podręcznik Blender 4.5, wiersz poleceń](https://docs.blender.org/manual/es/4.5/advanced/command_line/arguments.html): uruchamianie skryptu i kod wyjścia Pythona.
- [Podręcznik Blender 4.5, zarządzanie kolorami](https://docs.blender.org/manual/sr/4.5/render/color_management.html): interpretacja tekstur i transformacja wyświetlania.
- [Podręcznik Blender 4.5, prekalkulacja](https://docs.blender.org/manual/fr/4.5/physics/baking.html): odrębne przetwarzanie pamięci podręcznych i zakresów symulacji.

Użyto oficjalnych tłumaczeń, gdy strona angielska nie odpowiadała. Dokumentują one operacje, nie zastępując próby w Blenderze, którą wciąż trzeba przeprowadzić. Linki komercyjne i wybór GPU znajdują się w przewodniku RenderParcel, a nie w przepisie technicznym.

## Zgodność wcześniejszych folderów

Nowe rekonstrukcje zapisują `02_projet/renderparcel_pli_v1.blend`. Żaden już utworzony plik nie jest przenoszony ani zmieniany nazwy. Jeśli brakuje tego nowego wyniku, `inspect_scene.py` może nadal otworzyć `02_projet/prismora_pli_v1.blend`, historyczną nazwę wyniku. Jeśli oba pliki istnieją, inspekcja wybiera nowy wynik.

Identyfikatory schematu `prismora.blender-transfer.v1` i `prismora.integrity.v1`, właściwości techniczne `prismora_pack_version` i `prismora_purpose` oraz nazwa modułu wewnętrznego `prismora_validator` pozostają stałe na potrzeby odczytu folderów v1. To klucze zgodności, a nie wyświetlana marka folderu.
