집중 화면 개선
상태: 배경·연출 구현 완료 · 최종 미관·실기기 성능 확인 남음
최종 수정: 2026-11-01 · 구현 근거: 78975e2f8c6d38371a56dce37cc5e38230871204
계곡·산호초·북극·심해의 주간과 야간 모두 낚시 애니메이션을 사용한다. 정적인 배경 PNG 위에 분리한 장비·물고기와 Shader 또는 Canvas 효과를 합성한다. 이 페이지는 후속 개선을 반영한 최신 집중 연출 기준이며, 기존 아트와 연출의 승인 시안과 338b46a 시점 기록도 보존한다.
여기서 완료한 범위는 집중 중 풍경과 낚시 움직임이다. TO WORK — 태그·집중 제목·완료 UI는 별도 후속 요구사항이며 이 연출 개선만으로 구현 완료가 되지는 않는다.
지역별 현재 동작
섹션 제목: “지역별 현재 동작”| 지역 | 시점과 장비 | 물과 생물 | 주야간 차이 |
|---|---|---|---|
| 계곡 | 손 없는 사용자 시점, 화면 밖으로 잘리는 전경 낚싯대 | 잔잔한 물결, 푸른 물고기 그림자 2마리, 꼬리 흔들림 | 주간에 구름·햇살·위쪽 잎 움직임, 밤에는 햇살과 추가 구름 제외 |
| 산호초 | 같은 1인칭 낚시 구도와 분리한 찌 | 열대어 3마리, 먼 곳·중앙·가까운 곳의 크기 차이와 수면 움직임 | 야간 원화와 별도 보호 마스크, 밤에는 햇살과 추가 구름 제외 |
| 북극 | 빙판 앞에서 낚시하는 1인칭 구도 | 푸른 물고기 그림자 3마리, 물결, 눈·빙판 보호 | 야간 원화의 달·오로라는 유지하고 추가 구름·햇살 제외 |
| 심해 | 잠수정 창밖의 고정된 낚싯대 | 움직이는 줄·빛나는 찌, 열수구 연기, 심해 생물 3마리와 부유 입자 | 주야간 모두 고정 장비를 유지하고, 밤에는 수중 빛 변화 진폭을 주간의 0.75배로 조정 |
표의 잎·수면 셰이더 표현은 지원 렌더러 기준이다. Canvas 대체 경로와 네이티브 FragmentShader의 화질이 동일하다고 보장하지 않는다. 기존 웹 CanvasKit 잎 표시 문제는 남은 과제에서 계속 추적한다.
집중 시작과 대기
섹션 제목: “집중 시작과 대기”계곡·산호초·북극은 시작할 때 낚싯대를 휘두르고 릴을 푸는 소리와 함께 줄을 던진다. 찌가 수면에 닿은 뒤에는 낚싯대와 찌가 천천히 오르내리고 찌 주변 파문이 반복된다. 효과음은 사용자의 소리 설정을 따른다. 심해는 이미 장착된 낚싯대를 고정하고 줄과 발광 찌만 움직이며 수면 착수 파문·착수 소리를 사용하지 않는다.
같은 세션에 돌아왔다고 캐스팅을 반복하지 않는다. 늦게 복귀한 집중에 시작 장면을 다시 강제로 보여주지 않는다. 배경 연출의 표시 시계와 실제 집중 시간·통화 일시정지·취소·완료 처리는 분리되어 있다.
주간과 야간의 표현
섹션 제목: “주간과 야간의 표현”- 주간 수면 지역의 구름은 하늘 마스크 안에서 천천히 지나가며 산·나무·섬 뒤로 보인다. 계곡과 산호의 위쪽 잎은 가지를 기준으로 흔들고, 주간 햇살을 함께 표현한다.
- 밤에는 추가로 움직이는 구름을 그리지 않는다. 원화에 이미 그려진 정적 구름은 유지한다. 야간 햇살과 잎의 따뜻한 일광 반짝임도 끈다.
- 야간 장비는 푸른 색조로 낮추고 달빛이 비친 물은 수면과 함께 움직인다. 달과 육지는 보호 마스크로 고정한다. 북극의 달·오로라는 원화의 표현이다.
- 심해에는 하늘 구름·햇살·수면 접촉 파문을 추가하지 않는다. 고정 낚싯대 끝에서 줄이 시작하고 반대편은 발광 찌의 실제 상단 고리에 붙는다.
배경은 집중을 시작할 때 저장한 dayPhase로 선택한다. 진행 중 5시간 경계를 넘어도 시작 주야간을 유지하며, 주야간·결과 확인 규칙은 그대로다. 주야간은 생물 추첨 확률과 3D 수족관 조명을 바꾸지 않는다.
물고기와 보호 경계
섹션 제목: “물고기와 보호 경계”물고기 몸통은 360도 회전하거나 방향을 돌리지 않는다. 마리마다 바라보는 방향과 이동 시차를 다르게 두고 꼬리 끝만 살랑이게 변형한다. 가장자리·보호 경계에서는 가려짐과 페이드로 연결하고, 여러 마리가 동시에 전부 사라지지 않도록 조절한다.
풀·바위·산호·빙판·심해 장비·창틀은 물처럼 일렁이지 않게 보호한다. 물고기에도 실제 수면 마스크를 적용하므로 물결만 막고 생물이 얼음 위를 덮는 일이 생기지 않도록 한다. 야간의 따뜻한 달빛 반사는 식물이나 얼음으로 잘못 제외하지 않도록 별도 검사한다.
새 원화를 교체하면 보호 경계와 낚싯대 끝·찌 연결점도 함께 확인한다. 계곡 물고기 높이는 새 수면과 가로 화면의 잘림에 맞춰 보정했으며, 산호초·북극·심해는 세 마리의 깊이와 크기 차이를 유지한다.
해상도와 실행 리소스
섹션 제목: “해상도와 실행 리소스”전체 배경은 네 지역 × 주야간 **8장, 각각 1080×2400(9:20)**이다. 그림은 자잘한 묘사를 줄이고 부드러운 큰 형태와 기존 분위기를 유지하는 방향으로 제작했다. 원본 제작 자료·이전 배경 백업과 현재 실행 파일을 구분한다.
| 리소스 | 저장 위치와 규격 |
|---|---|
| 실제 배경 | art/V2/Resources/Backgrounds/Focus/{지역}-{day,night}.png를 직접 읽음 |
| 분리 자산 | 같은 Focus 경로 아래 Animation/의 장비·물고기·구름·햇살·효과음·발광 찌 |
| 수면 마스크 | 주간 {지역}-water-mask.png, 야간 {지역}-night-water-mask.png, 모두 1080×2400 |
| 하늘 마스크 | 주간·야간 파일을 구분하고 상단 1080×1076만 저장, 나머지는 투명하게 취급 |
| 경계와 재현 | Animation/layout.json과 Tools/Art/export-focus-runtime.mjs, 같은 경계에서 마스크와 물고기 클립 좌표를 생성 |
| 추적 정보 | Animation/runtime-manifest.json의 실행 자산 32개와 SHA-256 |
지역 파일 이름은 valley, reef, arctic, deep이다. 배경에 쓰는 좌표 변환은 폭 기준으로 균일하게 적용해 배경·물고기·장비가 같은 화면 비율을 따른다. 주간·야간은 서로 다른 마스크를 사용한다. 백업 폴더는 앱 번들에 넣지 않는다. 기존 승인 시안은 승인 갤러리와 제작 자료에서 계속 확인할 수 있다.
현재 실행 배경 8종
섹션 제목: “현재 실행 배경 8종”아래 이미지는 현재 실행 PNG를 긴 변 720px로 축소한 문서용 사본이다. 배경 원화이며 실제 앱 UI 캡처나 움직이는 영상은 아니다. 계곡·산호초·북극의 낚싯대·찌·물고기는 별도 레이어로 합성하므로 배경 원화에는 표시되지 않는다. 심해의 고정 낚싯대는 원화에 포함된다.
계곡 주간
섹션 제목: “계곡 주간”
현재 Focus/valley-day.png의 축소 사본. 위쪽 잎과 수면, 전경 낚시 장비의 적용 구도를 참고한다.
계곡 야간
섹션 제목: “계곡 야간”
현재 Focus/valley-night.png의 축소 사본. 원화의 구름은 정적 그림이며 추가 구름 애니메이션은 꺼져 있다.
산호초 주간
섹션 제목: “산호초 주간”
현재 Focus/reef-day.png의 축소 사본. 열대어 3마리와 낚시 장비는 실행 시 별도로 합성한다.
산호초 야간
섹션 제목: “산호초 야간”
현재 Focus/reef-night.png의 축소 사본. 달빛 반사는 물의 보호 경계 안에서 함께 움직인다.
북극 주간
섹션 제목: “북극 주간”
현재 Focus/arctic-day.png의 축소 사본. 눈·빙판은 고정하고 빈 수면과 물고기만 움직이도록 구분한다.
북극 야간
섹션 제목: “북극 야간”
현재 Focus/arctic-night.png의 축소 사본. 달·오로라는 원화의 표현이며 추가 구름·햇살은 그리지 않는다.
심해 주간
섹션 제목: “심해 주간”
현재 Focus/deep-day.png의 축소 사본. 줄·발광 찌·연기·이동 생물은 실행 시 별도로 합성한다.
심해 야간
섹션 제목: “심해 야간”
현재 Focus/deep-night.png의 축소 사본. 고정 장비와 국소 발광 분위기를 유지한다.
성능과 검증 범위
섹션 제목: “성능과 검증 범위”수면 일렁임 강도와 흐름 속도의 현재 설정 기본값은 각각 **1.0(100%)**다.
대기 연출은 30fps 표시 갱신을 기준으로 하고, 화면이 숨겨지거나 절전·동작 줄이기가 적용되면 표시 애니메이션과 소리를 중단한다. 장면 교체 때 이미지·셰이더 자원을 해제하고 늦게 끝난 이전 자산 로딩은 버린다. 프레임마다 새 좌표·그리기 객체를 만들지 않고 캐시한 자료를 재사용한다.
다음은 앱 구현 단계에 남긴 검증 기록이다. 이번 기획서 편집에서 앱 테스트를 다시 실행했다는 뜻은 아니다.
| 점검 | 확인된 기록 | 해석의 한계 |
|---|---|---|
| 주간 연결 | Flutter 전체 506개와 정적 분석 통과 | 당시 주간 리소스 통합 단계의 기록 |
| 야간·구름 제외 | main 병합 결과에서 Flutter 전체 521개와 정적 분석 통과 | 실제 기기 설치·전력 측정을 뜻하지 않음 |
| 주야간 구름 | Native/Canvas 각각에서 낮에는 보이고 밤에는 추가 구름이 없는 픽셀 회귀 검사 | 원화 속 정적 구름은 유지 |
| 물고기 가시성 | 8개 장면과 지원 5개 화면 크기의 2시간 모션을 0.5초 간격으로 샘플 검사 | 실기기를 2시간 켜 둔 검사가 아닌 모델 검사 |
| 집중 화면 캡처 | 주간 4개·야간 4개의 Flutter 페이지를 360×800에서 렌더링하고 1080×2400 프레임으로 확인 | 네이티브 엔진 렌더링이며 휴대폰 촬영·실측 FPS가 아님 |
| 자산 보존 | 런타임 자산 32개의 해시·크기, 기존 주간·공유 20개 자산 보존 검사 | 원화를 다시 바꾸면 경계와 연결점도 재확인 필요 |
남은 확인: 최종 외관·마스크 가장자리의 사용자 조정, 실제 Android/iOS 기기에서의 GPU·장시간 발열·배터리 소모, Android 패키지와 실제 기기 실행. Android SDK가 없는 작업 환경에서 기기 빌드를 통과했다고 기록하지 않는다. 웹과 네이티브 화질 차이도 구분한다.
- 주간 Focus 연결 결과
- 야간 연결과 구름 제외 결과
- 현재 배경·마스크·장비 리소스 안내
- 장면과 시간대 자산 선택
- 모션과 고정 방향
- 합성·보호 마스크·심해 연결점
- 실제 주야간 구름 회귀 검사
집중과 보상 · 아트와 연출 · 구현 현황과 남은 과제 · 근거와 변경 이력