267 lines
7.8 KiB (Stored with Git LFS)
Markdown
267 lines
7.8 KiB (Stored with Git LFS)
Markdown
# 원격 모션캡쳐 시스템 개발 로드맵
|
|
|
|
## 🎯 프로젝트 개요
|
|
|
|
**목표**: 모션캡쳐 스튜디오의 공간적 제약을 해결하는 원격 모션캡쳐 시스템 구축
|
|
|
|
**핵심 아이디어**:
|
|
- 모션캡쳐 스튜디오 → Unity 서버 → 웹사이트 실시간 스트리밍
|
|
- 웹에서 3D 아바타 관찰 및 모션 레코딩 제어
|
|
- 1:1 시스템으로 단순하고 효율적인 구조
|
|
|
|
## 📋 개발 단계별 로드맵
|
|
|
|
### **Phase 1: Unity-Web 직접 연결** ⏱️ 예상 기간: 2-3주
|
|
|
|
#### 목표
|
|
Unity에서 웹으로 실시간 모션 데이터 스트리밍 기반 구축
|
|
|
|
#### 세부 작업
|
|
1. **Unity WebSocket 서버 구축**
|
|
- Unity에서 WebSocket 서버 구현 (C#)
|
|
- 모션캡쳐 데이터 수집 및 전처리
|
|
- Transform 데이터 JSON 직렬화
|
|
- 실시간 데이터 브로드캐스트
|
|
|
|
2. **웹 클라이언트 기본 연결**
|
|
- HTML/JavaScript WebSocket 클라이언트
|
|
- Unity 서버 연결 및 데이터 수신
|
|
- 기본 연결 상태 UI
|
|
- 데이터 수신 로그 출력
|
|
|
|
3. **데이터 프로토콜 설계**
|
|
```json
|
|
{
|
|
"type": "motion_data",
|
|
"timestamp": 1234567890,
|
|
"bones": [
|
|
{
|
|
"name": "Hips",
|
|
"position": {"x": 0, "y": 1, "z": 0},
|
|
"rotation": {"x": 0, "y": 0, "z": 0, "w": 1}
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
4. **성능 최적화**
|
|
- 전송 주기 조절 (30-60fps)
|
|
- 데이터 압축 및 최적화
|
|
- 연결 안정성 보장
|
|
|
|
#### 완료 기준
|
|
- [ ] Unity에서 웹으로 실시간 아바타 데이터 전송
|
|
- [ ] 웹에서 데이터 수신 및 로그 확인
|
|
- [ ] 안정적인 연결 유지 (최소 30분)
|
|
|
|
---
|
|
|
|
### **Phase 2: 웹 3D 뷰어 + 레코딩 UI** ⏱️ 예상 기간: 3-4주
|
|
|
|
#### 목표
|
|
웹에서 실시간 3D 아바타 렌더링 및 레코딩 제어 인터페이스 구축
|
|
|
|
#### 세부 작업
|
|
1. **Three.js 3D 렌더링 엔진**
|
|
- Three.js 기본 씬 설정
|
|
- 3D 아바타 모델 로드 (FBX/GLTF)
|
|
- 실시간 본 애니메이션 적용
|
|
- 카메라 컨트롤 (회전, 줌, 팬)
|
|
|
|
2. **레코딩 UI 컴포넌트**
|
|
```html
|
|
<div id="recording-controls">
|
|
<button id="record-btn">⏺️ 녹화 시작</button>
|
|
<button id="stop-btn">⏹️ 정지</button>
|
|
<span id="timer">00:00:00</span>
|
|
<div id="status">대기 중...</div>
|
|
</div>
|
|
```
|
|
|
|
3. **모션 데이터 저장소**
|
|
- 클라이언트 사이드 모션 데이터 버퍼
|
|
- IndexedDB 활용한 대용량 데이터 저장
|
|
- 메모리 효율적인 데이터 구조
|
|
|
|
4. **실시간 피드백**
|
|
- 녹화 상태 실시간 표시
|
|
- 녹화 시간 타이머
|
|
- 데이터 수신율 모니터링
|
|
- 연결 상태 인디케이터
|
|
|
|
#### 완료 기준
|
|
- [ ] 웹에서 실시간 3D 아바타 렌더링
|
|
- [ ] 녹화 시작/정지 기능 동작
|
|
- [ ] 모션 데이터 클라이언트 저장
|
|
- [ ] 직관적인 사용자 인터페이스
|
|
|
|
---
|
|
|
|
### **Phase 3: 웹에서 모션 파일 직접 출력** ⏱️ 예상 기간: 2-3주
|
|
|
|
#### 목표
|
|
웹에서 수집한 모션 데이터를 표준 모션 파일 포맷으로 변환 및 다운로드
|
|
|
|
#### 세부 작업
|
|
1. **모션 파일 포맷 지원**
|
|
- BVH (Biovision Hierarchy) 파일 생성
|
|
- FBX 파일 기본 지원 (Three.js FBXExporter)
|
|
- JSON 포맷 모션 데이터 export
|
|
|
|
2. **JavaScript 기반 파일 생성기**
|
|
```javascript
|
|
class MotionExporter {
|
|
exportToBVH(motionData) { /* BVH 포맷 변환 */ }
|
|
exportToFBX(motionData) { /* FBX 포맷 변환 */ }
|
|
exportToJSON(motionData) { /* JSON 포맷 변환 */ }
|
|
}
|
|
```
|
|
|
|
3. **다운로드 시스템**
|
|
- Blob 기반 파일 생성
|
|
- 브라우저 다운로드 트리거
|
|
- 파일명 자동 생성 (날짜/시간 포함)
|
|
|
|
4. **모션 미리보기**
|
|
- 녹화된 모션 재생 기능
|
|
- 구간별 재생/정지
|
|
- 프레임별 이동 슬라이더
|
|
|
|
#### 완료 기준
|
|
- [ ] BVH 파일 생성 및 다운로드
|
|
- [ ] Unity 호환 가능한 파일 포맷
|
|
- [ ] 모션 미리보기 재생 기능
|
|
- [ ] 파일 품질 검증 완료
|
|
|
|
---
|
|
|
|
### **Phase 4: Unity 원격 제어 API** ⏱️ 예상 기간: 2-3주
|
|
|
|
#### 목표
|
|
EasyMotionRecorder와 웹 완전 연동으로 양방향 제어 시스템 구축
|
|
|
|
#### 세부 작업
|
|
1. **Unity 원격 제어 API**
|
|
```csharp
|
|
public class RemoteMotionAPI : MonoBehaviour
|
|
{
|
|
public void StartRecording(string filename);
|
|
public void StopRecording();
|
|
public RecordingStatus GetStatus();
|
|
public void SetRecordingSettings(RecordingSettings settings);
|
|
}
|
|
```
|
|
|
|
2. **EasyMotionRecorder 연동**
|
|
- 기존 EasyMotionRecorder 스크립트 래핑
|
|
- 웹 명령을 Unity API 호출로 변환
|
|
- 실시간 녹화 상태 동기화
|
|
- 에러 처리 및 예외 상황 대응
|
|
|
|
3. **양방향 통신 프로토콜**
|
|
```json
|
|
// 웹 → Unity
|
|
{
|
|
"command": "start_recording",
|
|
"parameters": {
|
|
"filename": "motion_001",
|
|
"format": "fbx",
|
|
"framerate": 30
|
|
}
|
|
}
|
|
|
|
// Unity → 웹
|
|
{
|
|
"status": "recording",
|
|
"filename": "motion_001.fbx",
|
|
"duration": 120.5,
|
|
"frameCount": 3615
|
|
}
|
|
```
|
|
|
|
4. **파일 동기화**
|
|
- Unity 측 파일과 웹 측 파일 동시 생성
|
|
- 백업 및 검증 시스템
|
|
- 파일 무결성 체크
|
|
|
|
#### 완료 기준
|
|
- [ ] 웹에서 Unity 녹화 원격 제어
|
|
- [ ] 실시간 상태 동기화
|
|
- [ ] 양쪽 파일 생성 확인
|
|
- [ ] 에러 처리 완료
|
|
|
|
---
|
|
|
|
## 🛠️ 기술 스택
|
|
|
|
### Unity Side
|
|
- **언어**: C#
|
|
- **네트워킹**: WebSocketSharp 또는 Mirror Networking
|
|
- **모션캡쳐**: EasyMotionRecorder (기존 시스템)
|
|
- **파일 출력**: Unity Timeline, Animation Recorder
|
|
|
|
### Web Side
|
|
- **프론트엔드**: HTML5, CSS3, JavaScript (ES6+)
|
|
- **3D 렌더링**: Three.js
|
|
- **네트워킹**: WebSocket API
|
|
- **저장소**: IndexedDB
|
|
- **파일 처리**: File API, Blob
|
|
|
|
### 개발 도구
|
|
- **에디터**: Unity 2022.3 LTS, VS Code
|
|
- **버전 관리**: Git
|
|
- **테스팅**: Unity Test Framework, Jest (웹)
|
|
|
|
## 📁 프로젝트 구조
|
|
|
|
```
|
|
RemoteMotionCapture/
|
|
├── Unity/ # Unity 프로젝트
|
|
│ ├── Scripts/
|
|
│ │ ├── WebSocketServer.cs
|
|
│ │ ├── RemoteMotionAPI.cs
|
|
│ │ └── MotionDataStreamer.cs
|
|
│ └── Scenes/
|
|
│ └── MotionCaptureStudio.unity
|
|
│
|
|
├── WebClient/ # 웹 클라이언트
|
|
│ ├── index.html
|
|
│ ├── css/
|
|
│ │ └── style.css
|
|
│ ├── js/
|
|
│ │ ├── main.js
|
|
│ │ ├── motionViewer.js
|
|
│ │ ├── motionExporter.js
|
|
│ │ └── websocketClient.js
|
|
│ └── assets/
|
|
│ └── models/
|
|
│
|
|
├── Documentation/ # 문서
|
|
│ ├── PROJECT_ROADMAP.md
|
|
│ ├── API_REFERENCE.md
|
|
│ └── SETUP_GUIDE.md
|
|
│
|
|
└── Assets/ # 공용 리소스
|
|
├── Models/
|
|
├── Animations/
|
|
└── TestData/
|
|
```
|
|
|
|
## 🎯 완료 후 기대 효과
|
|
|
|
1. **접근성 향상**: 물리적 스튜디오 방문 없이 모션캡쳐 가능
|
|
2. **비용 절감**: 스튜디오 임대료 및 이동비용 절약
|
|
3. **효율성 증대**: 실시간 피드백으로 재촬영 횟수 감소
|
|
4. **협업 강화**: 원격 디렉팅 및 실시간 의사소통 가능
|
|
|
|
## ⚠️ 주요 고려사항
|
|
|
|
1. **네트워크 지연**: 지연시간 최소화를 위한 최적화 필요
|
|
2. **데이터 품질**: 압축으로 인한 데이터 손실 최소화
|
|
3. **보안**: 모션 데이터 암호화 및 접근 제어
|
|
4. **호환성**: 다양한 모션캡쳐 시스템과의 호환성 확보
|
|
|
|
---
|
|
|
|
*이 로드맵은 개발 진행에 따라 지속적으로 업데이트됩니다.*
|