Initial commit: courtlab tactical board with team management and MP4 export

This commit is contained in:
2026-09-08 12:22:20 +09:00
commit d2e39a452e
43 changed files with 7812 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
# Court Lab 개선 기록
2026-09-07
## 적용 내용
- PC 코트 영역 확대, 개발용 JSON 접기, 한글 행동 이름.
- 모바일 세로 화면의 코트/선수/행동 패널, 가로 화면의 축소 도구와 전술 메뉴.
- 선택한 이동의 좌표 수정, 선택 선수 드래그로 시작 위치/이동 종점 수정.
- 시작 배치, 공 소유자, 단계 추가·삭제를 포함하는 전체 편집 Undo/Redo (최근 50개).
- 자동/공/림/이동 방향/선수/코트 지점 시선 선택. 모바일 대상 선택 취소 버튼.
- 패서의 자동 수신자 주시, 수신자의 비행 중 공 주시, 사용자 시선 우선.
- 재생 위치 탐색, 이전/다음 단계, 0.5~2배속, 전체 반복, 재생 완료 후 다시 시작.
- 기기 내 자동 임시 저장·새로고침 복원, JSON 입출력 (가져오기 2MB 제한).
- 슛을 유지한 기존 이동·시선 수정, 연결된 다음 단계 시작점 및 정지 패스·슛 위치 재계산.
- 림 3.05m, 공 소유/슈팅 높이, 시점 높이 1.75m. 세로 FOV 제한과 카메라 회전 속도 제한.
- 작전판은 마커, 선수 시점은 간단한 관절형 대체 모델. 선수 자신의 모델은 POV에서 숨김.
## 검증
- `npm test`: 91개 테스트 통과.
- `npm run build`: 성공. Three.js를 포함한 단일 번들 크기 경고는 남아 있음.
- 인앱 브라우저: 390×844 모바일 화면의 이동 생성, 시선/좌표 수정, Undo, 패스, 반복 재생, POV, 저장 및 새로고침 복원 확인.
- 브라우저 개발 로그에서 오류 없음 확인.
- 1440×900 PC에서 코트 전체 표시와 선택 선수 드래그 확인. 844×390 가로 화면에서 코트/측면 도구/시간바 및 전술 메뉴 확인. 모바일 두 방향에서 문서 가로 넘침 없음.
- 실물 스마트폰 GPU/터치 성능은 별도 검증이 필요함.
## 현재 제약과 후속 작업
- 단계당 패스 1회, 마지막 단계의 슛 1회 규칙은 유지. 슛이 있으면 새 행동·단계 추가는 슛 삭제 후 가능.
- 선수 및 시선 대상은 고정 5대5. 풀코트, 대기/드리블 독립 행동, 곡선, 단계 복제/정렬은 후속.
- 임시 저장은 현재 브라우저에만 저장. 공유 서버·계정·클라우드 동기화·PDF/영상 출력은 미구현.
- 3D 모형은 코드로 구성한 경량 대체 모델이며 Meshy/Tripo로 생성한 결과가 아님. 정밀 캐치·드리블·발 접지와 리타기팅은 미구현.
- 자유 시점 회전, POV 미니맵, 시선 전환 구간 세부 편집은 후속.
## 외부 3D 제작 준비
첫 후보는 Meshy 공식 MCP로 원형 생성/리깅 후 Blender MCP로 보정. 외부 서비스 연결·API 키와 생성 크레딧이 필요하므로 이번 작업에서 설치나 유료 호출은 하지 않음.
- Meshy: https://github.com/meshy-dev/meshy-mcp-server
- Blender MCP: https://github.com/ahujasid/blender-mcp
- Tripo 비교 후보: https://github.com/VAST-AI-Research/tripo-mcp
납품 모델 권장 조건: GLB, 미터 단위, 바닥에 발 원점, 정면 축 확인, 하나의 일관된 휴머노이드 리그, 목/머리 분리 제어, 공은 별도 메시, 색상 변경 가능한 유니폼. 최초 검증은 한 명으로 진행하며 idle/run/defensive slide/screen/pass/shoot의 관절 변형과 공 이벤트 동기화를 확인한 뒤 10명으로 확장.
시작 프롬프트 예시:
> 성인 농구 선수, 단순하고 일관된 스포츠 게임 스타일. 민소매 유니폼과 반바지, 운동화. 공이나 소품 없음. 전신 중립 A-pose, 팔과 다리가 몸통에서 분리되어 보이며 리깅 가능한 구조. 읽을 수 있는 로고나 번호는 생성하지 않음. 정면·측면·후면 레퍼런스의 비율과 복장을 일치시킬 것.