---
title: Pixel Tooler 독립 식생 도구와 확인용 예제 구현
date: 2026-11-03T11:47:55.800Z
version: v1.0.0
status: 검증 대기
state: verification
project: pixelfoliage
type: 작업 결과
report_kind: result
category: 작업 결과
summary: 잔디·꽃·관목·나무 구조와 독립 예제10개, Camera 연동 예제, 개별·묶음 검토 패키지를 구현했습니다. 실제 화면·설치·로고는 보류입니다.
format: tracefolio-v2
priority: normal
severity: normal
reporter: 미기록
assignee: 미지정
payload: ../assets/submissions/2026-11-03-result-20261103114755800-v1.0.0.json
---

## 작업 결과

식생 미리보기 구현과 정적 검증, 검토용 패키지 생성을 마쳤습니다. 사용자께서 화면을 건드리지 말고 구현부터 진행하도록 지정하셔서 Unity 신규 실행·화면 전환·실제 Play·스크린샷 캡처는 하지 않았습니다. 전체 제품 출시 완료 상태는 아닙니다.

Tools → TurnRoom → Pixel Tooler → Overview에서 설치된 세 제품을 확인하고, Foliage에서 예제를 찾도록 구성했습니다. 대표 예제는 Assets/TurnRoom/PixelFoliage/Samples/Scenes/09-MixedGarden.unity입니다.

신규 기능으로 작업 전 실행 화면이 없으며 화면 조작 보류로 변경 후 실제 실행 화면도 미확보입니다. 설명 이미지나 생성 이미지로 대체하지 않았습니다. 외형·성능·전후 화면 비교 통과를 주장하지 않습니다.

## 변경 내용

### 적용 내용

### 제품과 의존성

Pixel Camera·Pixora의 기존 경로·ID와 수정 사항을 보존했습니다. 새 Pixel Tooler 개요 창은 설치된 제품을 선택해 여는 진입점입니다. 개별 판매와 묶음의 패키지 레시피를 작성했으며 실제 판매 포털 등록·가격·할인·업그레이드 정책은 변경하지 않았습니다.

Pixel Foliage 본체는 Runtime, Editor, Samples, Camera/Pixora 선택 Editor 어댑터로 분리했습니다. Runtime은 다른 제품이나 샘플을 참조하지 않습니다.

### 식생 구성

- World: 공통 바람·돌풍 패턴·구름 명암·연속/단계별 애니메이션 시간.
- Profile: 메시·재질·색·명암·뿌리 고정·휘어짐·잔흔들림 설정.
- Patch: 시드 배치·크기 변화·원형/사각형 제외 영역·공간별 인스턴스 그룹·거리 페이드.
- Interactor: 구역별 가까운 최대16개 접촉원. 반경0은 나누지 않습니다.
- Renderer: 개별 배치 나무·관목·지면도 공통 World를 사용합니다.
- Editor: 콜라이더 레이어·높이·경사 필터를 적용한 명시적 표면 굽기와 Undo.

정점 알파를 휘어짐 가중치로 사용해 꽃 줄기·꽃머리, 나무 줄기·가지·수관의 반응을 구분합니다. 전체 나무 billboard를 강제하지 않으며 스프라이트용 Camera Facing과 메시 표현을 선택합니다. 예제는 직접 작성한 절차적3D 메시 데이터이며 원본 Dylearn의 코드·미술·로고를 재배포하지 않습니다.

### 예제

| 번호 | 씬 | 확인 목적 |
| --- | --- | --- |
|01|MeadowBreeze|초원·바람·꽃 포인트|
|02|BlossomWalk|꽃밭과 비워 둔 길|
|03|ShrubGarden|관목과 낮은 초목|
|04|YoungWoodland|나무·수관·하층 식생|
|05|ContactTrail|움직이는 방문자와 잔디 접촉|
|06|SteppedRhythm|한 씬에서0·3·5·8 FPS 비교|
|07|SharedGusts|풀·꽃·관목·나무의 공통 돌풍|
|08|CloudLight|지면과 식생에 공유되는 구름 명암|
|09|MixedGarden|대표 종합 정원|
|10|ExtensionGrove|인스턴스와 개별 Renderer 확장|

독립 씬10개 외에 Integrations/PixelCamera/Samples/Scenes/11-PixelCameraGarden.unity를 별도로 작성했습니다. Full Camera 프리셋은270px 높이로 저장했으며1080p 출력에서는4px 배율입니다. URP Renderer Feature는 별도 설정이 필요합니다. Selected Objects는 사용자 정의 인스턴스 변형을 보장하지 않아 연결에서 거부합니다.

Pixora는 내보낸 Texture2D를 받아 새 식생 재질을 만드는 출력 어댑터입니다. 원본 이미지·임포터·작업 문서는 수정하지 않습니다. 실시간 문서 동기화는 아닙니다.

식생 UI 문구85개와 제품군 개요 문구, 가이드를9개 언어로 작성했습니다. 공유 언어 변경 시 열린 UI를 다시 구성합니다. 식생 강조색은 기존 Camera·EntityForge·Pixora/공통색과 대조한 #779957이며 테마 에셋에서 관리합니다. 실제 전환·배치는 별도 미검증입니다.

## 검증

[검증 요약 JSON](../assets/pixeltooler-preview-20261103/verification.json)

| 검사 | 결과와 범위 |
| --- | --- |
|C#|Unity6000.0.83f1 참조로6개 어셈블리 정적 컴파일 통과|
|수학·선택창 정책|컴파일한 실제 FoliageMath와 Unity 관리형 구조체, 현재 TemplatePickerPolicy로20,010개 단언 통과|
|HLSL|일반·인스턴싱14개 변형 정적 검사.10개 FXC 통과, URP 인스턴싱4개는 헤더 매크로 오류 후 실제 Unity DXC로 통과. 최초 실패와 unsigned DXIL 경고 보존|
|에셋·언어|GUID·씬 참조·메시 버퍼/법선·독립 의존성·9개 언어/치환 인자·UXML 키·가이드 검사11개 통과|
|패키지|개별3개·식생 본체·묶음 검토 아카이브를 고정한 뒤 압축 내부와 현재 소스 해시 대조 통과|

프로젝트 코드 로컬 커밋8f8d0916의194개 파일 경로를 대조해 이번 새 제품·문서·도구만 포함했습니다. 기존 Camera·Pixora 소스 변경은 커밋에 포함하지 않았고 원격 프로젝트 소스 푸시는 하지 않았습니다.

Unity 관리형 코드 실행은 게임 씬 실행과 다릅니다. 전체 화면·플랫폼·설치·공식 판매 검증을 통과했다고 해석하면 안 됩니다.

## 남은 사항

실제 Unity 가져오기·Play·카메라 합성·모든 언어 전환·마우스/키보드 선택·표면 배치 Undo/Redo·성능·스프라이트 텍스처 왕복 검증과 화면 캡처가 남아 있습니다. 화면 조작은 명시적 재허락 전까지 보류합니다.

Affinity CLI doctor/status는 샌드박스 EACCES를 구분해 재확인한 뒤 ECONNREFUSED를 반환했습니다. 앱 실행·재시작으로 화면을 방해하지 않았습니다. 필수 자체 로고의 실제 제작·저장·재열기·적용은 미완료이며 임의 도구로 대체하지 않았습니다. 새 프로젝트 로고는 null로 등록합니다.

검토 패키지는 Unitypackage 호환 tar/gzip이며 Unity-native export·깨끗한 설치·공식 Asset Store Validator는 미실행입니다. 상품 등록·묶음 정책 확인·최종 제출도 미실행입니다. 자체 방향광·구름 명암을 사용하며 전체 PBR·추가 광원·HDRP·XR·모바일 성능·모션 벡터를 보장하지 않습니다.

교훈 검토: 전역 지침 변경 없음. 독립 제품/묶음 구성과 화면 조작 보류 선호는 기존 규칙과 프로젝트 문서에 반영했으며, 새 보편 규칙을 만들지 않았습니다.

## 작업 시간

- 제안 시간: 60~120분
- 실제로 완료된 시간: 시작2026-11-03 20:06:30 KST. 구현·정적 검사 후 검토 패키지 고정/해시 대조는20:38:57 KST까지32분27초. 공개 보고 검증 시간은 별도이며 전체 요청은 실제 실행·로고 미완료 상태입니다.
- XERJ: 사용 — 초기 Status/Search 실패 후 실제 로컬 접근으로 노드를 시작해 TemplateAssetInspector 검색 성공. TemplateAssetInspector.cs:12를 현재 소스와 대조했습니다. 신규 Runtime·예제는 인덱스 범위 밖이어서 rg와 직접 읽기를 사용했습니다.
