# 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+만 있으면 폴더 검사에 충분하며, 제공된 테스트는 Windows에서 Python 3.14.6으로 실행되었습니다.

## 디렉터리 구조와 진입점

```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`: **렌더가 성공한 경우**, 480 × 300 픽셀, 16 샘플, 디노이즈 없는 CPU 미리보기;
- `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`이며, `//`는 `02_projet`에 위치한 Blender 파일을 기준으로 한 상대 경로이기 때문입니다. 생성기는 텍스처를 로드한 다음 저장 전에 `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): 상대 경로 및 누락된 파일 검색.
- [Blender 4.5 API, Wm Operators](https://docs.blender.org/api/4.5/bpy.ops.wm.html): 내부 스크립트를 비활성화한 상태에서 저장 및 열기.
- [Blender 4.0 API, 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 폴더를 읽기 위해 안정적으로 유지됩니다. 이들은 호환성 키이며, 폴더의 표시 브랜드가 아닙니다.
