미로 · 개발 블로그
게임 개발 블로그

Pixel Foliage

Pixel Tooler 독립 식생 도구와 확인용 예제 구현

개발 기록 · 블로그 공개

원본 기록 상태 검증 대기

잔디·꽃·관목·나무 구조와 독립 예제10개, Camera 연동 예제, 개별·묶음 검토 패키지를 구현했습니다. 실제 화면·설치·로고는 보류입니다.

수정 전: 줄기 뒤로 밝은 하늘
Pixel Foliage의 다른 개발 기록에 첨부된 이미지 · 수정 전: 줄기 뒤로 밝은 하늘

작업 결과

식생 미리보기 구현과 정적 검증, 검토용 패키지 생성을 마쳤습니다. 사용자께서 화면을 건드리지 말고 구현부터 진행하도록 지정하셔서 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

검사 결과와 범위
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·모바일 성능·모션 벡터를 보장하지 않습니다.


출처

중앙 아카이브 원문