# 자석 영웅과 맑은 초원 세계의 시각 품질 개선 ## 목표와 완성 범위 5~7세용 MagnetismHeroes의 구 자석과 배경을 하나의 완성된 카툰 세계로 만든다. 기본 도형으로 만든 시제품 수준에서 벗어나, 부드러운 곡면·정돈된 재질·일관된 색과 빛·의도적인 배경 구성을 갖춘 상업용 게임에 어울리는 외형을 목표로 한다. Blender에서 구 몸체와 기사 장비, 지형과 자연 소품의 실제 3D 원본을 제작한다. 게임용 모델과 재질을 Unity에 적용하고 기존 30개 스테이지와 자유 놀이에서 사용한다. 최종 결과는 편집 가능한 원본, 게임에 연결된 자산, 시각 검수 자료와 검증된 Android 시험용 APK다. 이 문서는 제작할 결과를 정하며, 작성 자체가 모델 제작이나 앱 검증 완료를 뜻하지 않는다. ## R01 — 미술 방향 참고 이미지는 `.dryforge/reference/cartoon-landscape.png`에 보존한다. 밝은 청록색 하늘, 부드러운 녹색과 파스텔색 식생, 둥근 바위와 나무, 따뜻한 햇빛, 부드러운 그림자, 귀여운 장난감 같은 재질을 기준으로 삼는다. 참고 이미지의 캐릭터·총·화면 구성을 복제하는 요청은 아니다. 현재 게임의 회전·확대 가능한 퍼즐 시점을 유지한다. 영웅이 먼저 보이고, 가까운 자연 소품과 먼 언덕이 그 뒤를 받치도록 구성한다. 녹색 평야·꽃·바위가 같은 세계에 속한다는 인상을 준다. 구 자석과 헷갈리는 얼굴 달린 식물이나 빛나는 구형 배경 장식을 만들지 않는다. 색조·재질의 거칠기·장식 크기·광원 강도·원경의 거리와 식생 밀도는 실제 화면을 보며 조정한다. 이 값은 조정 가능하지만, 기사 형태·맑은 낮·세 자연 풍경·구 수량의 명확성은 고정한다. ## R02 — 구 몸체와 장난감 기사 구 몸체 자체를 Blender 제작 메시와 정돈된 재질로 개선한다. 투구·칼·방패를 추가하는 것만으로 몸체 개선을 대체하지 않는다. 낮은 분할로 생기는 각진 외곽, 얼룩진 법선, 눈에 띄는 이음새와 과한 반사를 없애고, 작게 표시되어도 구 하나를 구분할 수 있게 한다. 친구 한 묶음마다 영웅 한 명을 표시한다. 대표 구에 현재 얼굴을 살린 둥근 투구, 짧고 끝이 둥근 장난감 칼, 둥근 방패를 붙인다. 구가 영웅의 몸이고 장비는 부속 장식이다. 기본 구의 시각 반지름과 기존 SphereCollider 반지름 0.5, 루트 배율 1을 유지한다. 기존 얼굴의 여섯 표정과 얇은 마스크, 리본형 자력 망토, 연결 빛을 기사 장비와 조화시킨다. 투구가 눈·입을 가리지 않고, 칼·방패가 숫자·계수 표시·선택 강조를 가리지 않아야 한다. 새 팔·다리, 걷기용 리깅과 전투 동작은 이번 범위에 없다. 기존 표정 전환·시선·작은 흔들림·축하 반응을 활용한다. 칼과 방패를 가진 실루엣은 정면과 실제 조작 시점에서 알아볼 수 있어야 한다. 장비의 돌출은 이웃 구를 세거나 선택하는 데 방해가 되지 않도록 조절한다. 장비에는 별도 구 ID, 입력 Collider, Raycast 대상이나 수량을 추가하지 않는다. ## R03 — 합체·분리와 표현의 수명 구 하나는 계속 수량 1이다. 모든 구 ID와 총량, 소속, 기본 크기, 아이가 만든 배열을 유지한다. 합체가 여러 구를 큰 구 하나나 정해진 인체로 대체해서는 안 된다. 묶음의 숫자는 확정 소속 구 개수와 일치한다. 안정 상태에서 묶음마다 얼굴·기사 장비 한 벌·숫자·망토가 각각 하나다. 합체하면 새 묶음에 한 벌만 남고, 분리하면 두 묶음에 각각 한 벌이 생긴다. 떨어져 있는 선택 구도 기존 규칙대로 두 친구로 나눈다. 대표 구가 바뀌면 장비와 얼굴이 함께 옮겨지고 지난 대표의 장식이 남지 않는다. 드래그 중 장식은 표시 중인 묶음을 따라간다. 취소·핀치·영역 이탈에서는 기존 확정 상태로 복원한다. 화면 전환·재입장·저장 복원에서는 확정 상태로 영웅을 재구성하며 지난 선택·축하·미리보기 상태를 이어 붙이지 않는다. 미리보기나 흔들림을 진행 데이터로 저장하지 않는다. ## R04 — 세 자연 풍경과 30개 스테이지 기존 세 배경의 외형을 모두 교체한다. 스테이지 수와 순서, 종류, 초기 묶음·구 위치, 목표·해금·도움·시범·완료 규칙은 유지한다. | 스테이지 | 새 풍경 | 중심 구성 | 유지하는 내부 테마 값 | |---|---|---|---| | 1~10 | 맑은 초원 | 열린 잔디 평야, 둥근 나무와 수풀, 작은 꽃과 먼 언덕 | `Garden` | | 11~20 | 꽃 언덕 | 완만한 언덕, 꽃 군락과 나무, 부드러운 색의 식생 | `Cloud` | | 21~30 | 바위 언덕 | 둥근 바위와 낮은 암벽, 잔디·수풀, 먼 언덕 | `Workshop` | 내부 테마 값은 기존 연결 호환성을 위한 식별자다. 화면에서는 새 자연 풍경이 보이며 기존 구름 놀이터·별 작업실 소품은 새 배경으로 대체한다. 새 테마 식별자나 저장 형식은 추가하지 않는다. 놀이터 바닥만 바꾸지 않고, 카메라 회전·확대 범위에서 보이는 주변 지형·나무·하늘·원경까지 이어지는 완성된 장면을 구성한다. 커다란 탐험 월드나 이동 가능한 캐릭터 월드를 추가하지 않는다. 성공 후 자유 놀이는 해당 스테이지의 새 풍경을 유지하고 재입장에도 같은 풍경을 복원한다. ## R05 — 배경 소품과 조작 가능성 제작 묶음에는 플레이 지면과 완만한 언덕, 원경 지형, 둥근 나무, 수풀, 풀 군락, 꽃 군락, 바위·자갈이 포함된다. 나무의 줄기·가지·수관, 꽃의 꽃잎·줄기·잎, 바위의 큰 덩어리와 면 변화가 각 재질과 함께 읽히도록 제작한다. 모든 소품을 같은 재질로 덮거나 기본 도형을 단순 나열한 결과로 완료하지 않는다. 변형 수·세부 식생 수·배치 밀도는 반복감과 모바일 비용을 보며 조정한다. 기존 아치·단차 등 발견과 가림에 관계된 구성은 새 풍경에 어울리는 외형으로 교체하고 실제 발견 가능성을 유지한다. 기존 구 초기 위치를 미술 배치에 맞추려고 변경하지 않는다. 배경이 구의 이동과 접촉 후보 판정에 새 장애를 만들지 않게 한다. 장식용 먼 지형과 작은 식생은 불필요한 입력 Collider를 만들지 않는다. 실제 가림을 맡는 가까운 소품은 보이는 형상에 맞는 Collider를 사용한다. 아치 구멍은 막힌 BoxCollider로 대체하지 않으며, 앞 소품의 hit를 무시해 뒤 구를 선택하는 방식으로 문제를 숨기지 않는다. 각 수집 구는 지원 카메라 조작으로 찾아 실제 구 Collider를 선택하고 끌어올 수 있어야 한다. ## R06 — 원본·게임 자산·출처 계약 | 산출물 | 위치와 계약 | |---|---| | 영웅 원본 | `SourceAssets/Models/Heroes/`: 구 몸체와 투구·칼·방패를 편집할 수 있는 `.blend`, 필요한 제작 텍스처·출처 기록 | | 자연 세계 원본 | `SourceAssets/Models/Meadow/`: 지형과 소품을 편집할 수 있는 `.blend`, 필요한 제작 텍스처·출처 기록 | | 게임용 파일 | `Assets/MagnetismHeroes/UnityRuntime/Presentation/` 아래 모델·재질·필요한 텍스처·프리팹. 게임은 이 파일만 참조하고 제작 원본은 참조하지 않음 | | 연결 결과 | 기존 `MagnetFriend.prefab`, `GroupBadge.prefab`, `GameApp.prefab`, Main 씬과 30개 StageAsset의 관련 시각 참조. 기존 GUID와 학습 데이터 유지 | | 제작 도구 | `tools/models/` 아래 대상이 분리된 재현용 Blender 제작·내보내기 경로. 기존 원본과 13개 FBX를 통째로 덮는 초기 builder를 준비 작업으로 실행하지 않음 | | 검수 자료 | `artifacts/verification/VisualUpgrade/`: 원본 렌더, Unity 실제 화면, Android 실제 화면, 조작·자원 관찰·해시 대응 자료 | | 최종 APK | 기존 검증 절차의 `artifacts/android/Final/MagnetismHeroes.apk` 및 `artifacts/android/MagnetismHeroes.apk`, 같은 실행의 설치본 해시와 연결 | 모델은 자체 제작한다. 각 채택 파일은 원본→내보낸 게임 파일→Unity 연결→검수 증거를 추적할 수 있어야 한다. 기존 provenance 형식을 참고하여 도구와 실제 버전, 생성·내보내기 설정, 저장소 상대 경로, 바이트 수와 SHA-256, 출처·사용 조건·검수 범위를 남긴다. 필요 텍스처도 같은 대응을 갖는다. 구매나 외부 자산 채택을 임의로 추가하지 않는다. Blender는 미터·Z-up, FBX는 -Z forward/Y-up·적용된 scale·애니메이션 없음을 따른다. 자연 소품은 바닥 피벗, 구는 중심 피벗, 장비는 대표 구에 부착 가능한 기준점을 갖는다. Unity import scale 1과 축 변환, imported root 회전을 실제 장면에서 확인한다. 재질·UV·노멀 등 Blender에서 보이는 속성이 Unity에서도 제대로 연결되어야 한다. Blender 전용 재질 노드가 FBX에 그대로 옮겨진다고 가정하지 않는다. 씬·프리팹·StageAsset·메타데이터는 Unity 편집·생성 경로로 변경한다. 변경 대상만 처리하고 Main 씬·GameApp·음성·글꼴·UI를 초기 builder로 다시 작성하지 않는다. 기존 원본과 출처 이력은 보존하고 새 제작본은 별도 경로에 둔다. ## R10 — 모델링 완료 후 사용자 검토와 승인 구 몸체·투구·칼·방패와 초원·꽃 언덕·바위 언덕의 모델링·재질 제작을 모두 마친 뒤, 실제 게임에 적용하기 전에 사용자에게 완성 모델을 검토받는다. 제작 명세 승인이나 자동 검사 통과는 완성 모델에 대한 사용자 승인을 대신하지 않는다. 검토 자료는 실제 제작한 Blender 원본에서 렌더한 구 몸체 단독 모습, 장비를 갖춘 영웅의 정면·옆면·뒷면, 세 풍경 각각의 전체 장면과 주요 자연 소품의 상세 모습을 포함한다. 편집 가능한 `.blend` 링크와 검토 대상 원본·게임용 내보내기 파일의 목록·SHA-256도 함께 제공한다. 참고 이미지나 아직 만들지 않은 모델의 예상 이미지로 검토 자료를 대신하지 않는다. 자료는 `artifacts/verification/VisualUpgrade/ModelReview/`에 보존한다. 검토 자료를 제시한 뒤 사용자의 명시적인 승인을 기다린다. 모든 검토 대상의 승인이 확인되기 전에는 Main 씬·게임 프리팹·StageAsset의 기존 시각 참조 교체, 새 자산의 런타임 채택과 후속 APK 검증을 진행하지 않는다. 후보 원본과 게임용 파일의 제작·내보내기는 가능하며, 승인 대기 중 기존 게임 연결은 보존한다. 답변이 없거나 일부 대상만 승인된 상태를 전체 승인으로 취급하지 않는다. 수정 요청이 있으면 해당 모델·재질·풍경 구성을 수정하고 변경본을 다시 제시한다. 검토한 파일과 해시, 사용자 승인 또는 수정 요청, 확인 시각을 연결하여 기록한다. 수정 전 파일에 대한 승인은 변경본으로 자동 승계하지 않는다. 모두 승인되면 게임 적용과 실제 화면·조작 검증을 이어간다. 승인 후 게임 적용 중 외형을 유지하는 축·피벗·import·Collider 연결 보정은 기존 계약 안에서 수행한다. 승인된 모델의 형태·색·재질·풍경 구성을 눈에 띄게 변경해야 하면 해당 변경본을 다시 검토받고 승인 후 채택한다. 이 모델 검토는 R07의 실제 게임 화면 품질 확인과 R08의 규칙·저장·Android 검증을 대체하지 않는다. ## R07 — 실제 화면에서의 품질 합격 ‘상업 퀄리티’는 모델 파일 생성이나 Blender 렌더 한 장만으로 판정하지 않는다. 다음 항목을 실제 게임 캡처와 검토표로 확인하고 발견한 결함을 수정한다. - 구·투구·칼·방패의 외곽이 부드럽고 의도한 형태로 읽힌다. 깨진 면·튀는 법선·눈에 띄는 UV 이음새·재질 누락·분홍 셰이더·투명 사각 배경이 없다. - 얼굴·숫자·계수 표시·선택과 접촉 강조를 구별할 수 있다. 장식의 과한 돌출·관통·깜빡임·배경 색과의 혼동이 조작과 수량 이해를 방해하지 않는다. - 나무·꽃·바위·지형은 서로 조화되면서 각 소재를 구별할 수 있다. 가까운 소품과 원경이 이어지고 카메라 이동에서 배경이 갑자기 끊기거나 지형 뒤 빈 공간이 드러나지 않는다. - 세 풍경은 같은 세계의 다른 장소로 읽히며, 각 풍경의 특징이 실제 게임 화면에 보인다. 낮의 밝은 분위기와 부드러운 그림자가 영웅 가독성을 유지한다. - 단일 구, 2+3 합체, 5에서 떨어진 양 끝 두 구를 고른 2+3 분리, 10개 모음과 10개 개별 구 상태, 빈 보드와 재공급에서 외형과 표시에 문제가 없다. 모든 구가 항상 한 시점에 보여야 하는 조건은 추가하지 않는다. 각 풍경의 대표 스테이지와 자유 놀이를 실제 기본 시점 및 허용된 회전·확대 상태에서 확인한다. Editor의 스마트폰·태블릿 가로 비율과 Android 시험 환경의 실제 화면을 구별해 기록한다. Blender 영웅의 정면·옆면·뒷면과 소품 목록 렌더도 남겨 편집 가능한 자산 품질을 검토할 수 있게 한다. 최종 자료는 사용자가 의도한 귀여움과 완성도를 평가할 수 있도록 전달한다. 모바일용 메시·공유 재질·텍스처·필요한 상세도 절감으로 비용을 관리한다. 영웅과 배경의 삼각형 수, 텍스처 해상도·메모리, 관찰 가능한 렌더링 비용을 최대 구 상태에서 기록하고 중복 메시·과한 재질·과밀 식생을 줄인다. 구체적인 제작 예산은 조정 가능하며 영웅 가독성을 비용 절감 때문에 훼손하지 않는다. Editor 통계나 AVD 결과를 실기기 FPS·발열·배터리 합격으로 표현하지 않는다. 실기기 검증은 `docs/tracking/status.md`의 후속 범위를 유지한다. ## R08 — 규칙·저장·음성 보존과 필수 검증 Core가 수학 상태를 소유한다. 완료 기록·퍼즐별 미완료 상태·최근 자유 놀이를 혼합하지 않는다. 저장 JSON 계약과 복구 정책, 승인된 44개 음성 바이트·참조, 한국어 UI·글꼴·오프라인 동작을 유지한다. 효과음·배경음악 추가는 제외한다. 런타임 네트워크·마이크·계정·광고·결제·새 성공 조건을 추가하지 않는다. 기존 테마·소품 수를 고정한 검사가 새 미술 계약과 충돌하면 해당 기대값만 실제 제작 목록에 맞춰 갱신한다. 구 발견·Collider 선택·아치 빈틈·숫자 가독성·수량 보존·저장 복원을 약화하거나 검사를 건너뛰어 통과시키지 않는다. 묶음별 장비 수명과 장식의 입력 비간섭은 실제 프리팹을 사용하는 의미 있는 검사로 확인한다. 완성 APK 판정은 통합된 변경 소스에서 다음 명령을 순서대로 실행해 각 실제 종료 0, 양수 검사 수, 필수 사례의 실패·건너뜀·미확정 0을 확인한다. ```powershell pwsh -NoProfile -File tools/verify.ps1 -Phase EditMode -Milestone Final pwsh -NoProfile -File tools/verify.ps1 -Phase PlayMode -Milestone Final pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidBuild -Milestone Final pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidSmoke -Milestone Final ``` 현재 검증 환경은 Unity 6000.6.3f1, API37의 2400×1080 가로 AVD다. 최종 검사 대상 소스·제품 파일 해시·APK SHA·실제 설치본·실행 시각·로그를 같은 실행으로 연결한다. 기존 Final 증거는 재실행 전 별도 위치와 해시로 보존한다. Android 검사의 초기화는 전용 AVD 시험 앱에만 수행하며 실제 사용자 데이터를 지우지 않는다. 검사·Unity Editor·Blender 원본 저장·ADB·녹음의 실행 소유자를 각각 하나로 유지한다. 전체 30개 정상 진행과 미완료·자유 놀이 복원, 오프라인 음성, 0~10개 공급·반납, 취소·분리 경계는 기존 Final의 실제 사례로 재검증한다. 새 배경에서 수집 구 발견이 실패하면 시각 배치나 적절한 Collider를 수정하고 동일 사례로 다시 검사한다. 평가하지 못한 항목은 미검증과 원인을 남기며 완료로 기록하지 않는다. ## R09 — 변경 경계와 완료 보고 이번 작업은 영웅·자연 배경의 시각 품질과 필요한 연결·검증·제작 이력만 변경한다. Core 규칙·진행·저장 재설계, 플랫폼 추가, 광범위한 코드 정리, 새 UI 기능·새 음원·스토어 게시·유료 구매는 포함하지 않는다. `docs/asset-register.md`, 관련 제작 결정, `docs/operations.md`, `docs/tracking/status.md`를 실제 채택 결과와 명령·검증 범위에 맞춰 갱신한다. 해결되지 않은 재현 문제는 원인과 영향·가능한 대응을 `docs/tracking/findings.md`에 남긴다. 단순히 실기기 검증이 아직 없다는 사실을 재현 결함으로 등록하지 않는다. 구 소실·복제, 잘못된 수량, 이어하기 손실·덮어쓰기, 미승인 자산 채택이나 요청하지 않은 외부 전송이 발견되면 관련 변경을 멈추고 증거와 영향을 즉시 알린다. 최종 보고에는 원본·게임용 자산·세 풍경 화면·APK·검증 결과·실기기 미검증 범위를 함께 제공한다.