7.8 KiB (Stored with Git LFS)
7.8 KiB (Stored with Git LFS)
원격 모션캡쳐 시스템 개발 로드맵
🎯 프로젝트 개요
목표: 모션캡쳐 스튜디오의 공간적 제약을 해결하는 원격 모션캡쳐 시스템 구축
핵심 아이디어:
- 모션캡쳐 스튜디오 → Unity 서버 → 웹사이트 실시간 스트리밍
- 웹에서 3D 아바타 관찰 및 모션 레코딩 제어
- 1:1 시스템으로 단순하고 효율적인 구조
📋 개발 단계별 로드맵
Phase 1: Unity-Web 직접 연결 ⏱️ 예상 기간: 2-3주
목표
Unity에서 웹으로 실시간 모션 데이터 스트리밍 기반 구축
세부 작업
-
Unity WebSocket 서버 구축
- Unity에서 WebSocket 서버 구현 (C#)
- 모션캡쳐 데이터 수집 및 전처리
- Transform 데이터 JSON 직렬화
- 실시간 데이터 브로드캐스트
-
웹 클라이언트 기본 연결
- HTML/JavaScript WebSocket 클라이언트
- Unity 서버 연결 및 데이터 수신
- 기본 연결 상태 UI
- 데이터 수신 로그 출력
-
데이터 프로토콜 설계
{ "type": "motion_data", "timestamp": 1234567890, "bones": [ { "name": "Hips", "position": {"x": 0, "y": 1, "z": 0}, "rotation": {"x": 0, "y": 0, "z": 0, "w": 1} } ] } -
성능 최적화
- 전송 주기 조절 (30-60fps)
- 데이터 압축 및 최적화
- 연결 안정성 보장
완료 기준
- Unity에서 웹으로 실시간 아바타 데이터 전송
- 웹에서 데이터 수신 및 로그 확인
- 안정적인 연결 유지 (최소 30분)
Phase 2: 웹 3D 뷰어 + 레코딩 UI ⏱️ 예상 기간: 3-4주
목표
웹에서 실시간 3D 아바타 렌더링 및 레코딩 제어 인터페이스 구축
세부 작업
-
Three.js 3D 렌더링 엔진
- Three.js 기본 씬 설정
- 3D 아바타 모델 로드 (FBX/GLTF)
- 실시간 본 애니메이션 적용
- 카메라 컨트롤 (회전, 줌, 팬)
-
레코딩 UI 컴포넌트
<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> -
모션 데이터 저장소
- 클라이언트 사이드 모션 데이터 버퍼
- IndexedDB 활용한 대용량 데이터 저장
- 메모리 효율적인 데이터 구조
-
실시간 피드백
- 녹화 상태 실시간 표시
- 녹화 시간 타이머
- 데이터 수신율 모니터링
- 연결 상태 인디케이터
완료 기준
- 웹에서 실시간 3D 아바타 렌더링
- 녹화 시작/정지 기능 동작
- 모션 데이터 클라이언트 저장
- 직관적인 사용자 인터페이스
Phase 3: 웹에서 모션 파일 직접 출력 ⏱️ 예상 기간: 2-3주
목표
웹에서 수집한 모션 데이터를 표준 모션 파일 포맷으로 변환 및 다운로드
세부 작업
-
모션 파일 포맷 지원
- BVH (Biovision Hierarchy) 파일 생성
- FBX 파일 기본 지원 (Three.js FBXExporter)
- JSON 포맷 모션 데이터 export
-
JavaScript 기반 파일 생성기
class MotionExporter { exportToBVH(motionData) { /* BVH 포맷 변환 */ } exportToFBX(motionData) { /* FBX 포맷 변환 */ } exportToJSON(motionData) { /* JSON 포맷 변환 */ } } -
다운로드 시스템
- Blob 기반 파일 생성
- 브라우저 다운로드 트리거
- 파일명 자동 생성 (날짜/시간 포함)
-
모션 미리보기
- 녹화된 모션 재생 기능
- 구간별 재생/정지
- 프레임별 이동 슬라이더
완료 기준
- BVH 파일 생성 및 다운로드
- Unity 호환 가능한 파일 포맷
- 모션 미리보기 재생 기능
- 파일 품질 검증 완료
Phase 4: Unity 원격 제어 API ⏱️ 예상 기간: 2-3주
목표
EasyMotionRecorder와 웹 완전 연동으로 양방향 제어 시스템 구축
세부 작업
-
Unity 원격 제어 API
public class RemoteMotionAPI : MonoBehaviour { public void StartRecording(string filename); public void StopRecording(); public RecordingStatus GetStatus(); public void SetRecordingSettings(RecordingSettings settings); } -
EasyMotionRecorder 연동
- 기존 EasyMotionRecorder 스크립트 래핑
- 웹 명령을 Unity API 호출로 변환
- 실시간 녹화 상태 동기화
- 에러 처리 및 예외 상황 대응
-
양방향 통신 프로토콜
// 웹 → Unity { "command": "start_recording", "parameters": { "filename": "motion_001", "format": "fbx", "framerate": 30 } } // Unity → 웹 { "status": "recording", "filename": "motion_001.fbx", "duration": 120.5, "frameCount": 3615 } -
파일 동기화
- 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/
🎯 완료 후 기대 효과
- 접근성 향상: 물리적 스튜디오 방문 없이 모션캡쳐 가능
- 비용 절감: 스튜디오 임대료 및 이동비용 절약
- 효율성 증대: 실시간 피드백으로 재촬영 횟수 감소
- 협업 강화: 원격 디렉팅 및 실시간 의사소통 가능
⚠️ 주요 고려사항
- 네트워크 지연: 지연시간 최소화를 위한 최적화 필요
- 데이터 품질: 압축으로 인한 데이터 손실 최소화
- 보안: 모션 데이터 암호화 및 접근 제어
- 호환성: 다양한 모션캡쳐 시스템과의 호환성 확보
이 로드맵은 개발 진행에 따라 지속적으로 업데이트됩니다.