객체 추적과 모션 추적 결합
이 문서에서는 3D 객체 추적 기능과 기기 모션 추적 기능을 융합하여 복잡한 시나리오에서 추적 안정성과 사용자 경험을 개선하는 방법을 소개합니다. 핵심 원리, 기대 효과 및 잠재적 문제 분석을 다룹니다.
기본 원리
모션 퓨전(Motion Fusion) 은 3D 객체 추적의 포즈 데이터와 기기 모션 추적의 포즈 데이터를 결합해 더 강력한 포즈 추정을 구현합니다. 핵심 프로세스는 다음과 같습니다:
데이터 동기화 및 상호 보완
- 시각적 추적: 이미지 특징점 매칭을 통해 현재 프레임의 포즈(위치+회전)를 계산하지만, 가림, 흐림 또는 빠른 이동 시 취약합니다.
- 모션 추적: IMU 센서의 고주파 출력과 시각적 이미지 출력을 활용해 기기 운동 데이터를 획득하지만 누적 드리프트 오류가 발생합니다.
- 퓨전 메커니즘:
- 시각적 추적 포즈와 기기 모션 추적 포즈의 좌표계를 정렬합니다.
- 대상 객체가 선명하게 보이고 안정적으로 움직일 때: 시각적 추적을 주로 사용. 지속적으로 시각적 추적 포즈를 퓨전 모듈에 전달해 시스템 전체의 누적 오류를 보정합니다.
- 대상 객체가 사라지거나 화면 내 비중이 너무 작거나 빠르게 움직일 때: 시각적 추적이 실패하므로 모션 추적을 주로 사용. 현재 모션 추적 포즈를 기반으로 퓨전 포즈를 예측합니다.
핵심 기술 요소
- 타임스탬프 정렬: 시각적 프레임과 모션 추적 데이터의 시간 동기화를 통해 지연으로 인한 진동 방지.
- 좌표계 정렬: 시각적 추적 궤적과 모션 추적 궤적을 기반으로 좌표계 일치.
- 재위치추적(Relocation): 대상 객체가 재등장할 때 시각적 추적이 신속히 누적 오류를 보정해 가상 객체를 정확한 위치로 "복귀"시킵니다.
적용 시나리오 및 제한 사항
모션 퓨전은 모든 시나리오에 적합하지 않습니다. 다음 경우에는 사용 불가능:
- 대상 기기가 ARCore/ARKit 등 모션 추적 기능을 지원하지 않음. 지원 기기 목록 참조: 모션 추적 기기 지원.
- 장난감, 피규어 등 손에 들고 움직이는 동적 객체가 추적 대상인 경우.
이외의 시나리오에서는 모션 퓨전이 3D 객체 추적의 사용자 경험을 크게 개선하며, 다음 상황을 포함합니다:
- 빠른 움직임: 사용자가 기기를 빠르게 이동할 때 모션 블러로 시각적 추적 실패.
- 대상 사라짐: 화면에서 대상이 벗어나거나 보행자 등에 가려져도 가상 콘텐츠가 유지됨.
- 대상 이격: 기기를 멀리해 대상 객체가 화면에서 작아져도 안정적인 추적 지속.
- 저조도 환경: 시각적 추적 성능 저하 시 경험 유지.
효과 및 기대 결과
적합한 시나리오에서 모션 퓨전은 단순 3D 객체 추적보다 안정적이고 부드러운 경험을 제공합니다.
이상적인 효과
- 추적 안정성 향상: 가상 객체의 떨림이나 급변 없음.
- 부드러운 전환: 시각적 추적 실패 시 퓨전 포즈 변화가 자연스럽게 연결됨.
- 방해 요인 내성: 대상 손실/가림, 기기 급가속 등 상황에서도 가상 객체가 기기 운동을 따라 지속 추적됨.
비이상적 상황 및 대응
| 현상 | 원인 | 사용자 인지 | 해결 방안 |
|---|---|---|---|
| 초기 미작동 | 모션 추적 초기화 시간 필요 | 시작 단계에서 콘텐츠 사라짐 | UI로 시스템 초기화 완료 안내 |
| 드리프트 현저 | 시스템 오류 누적 + 장시간 시각 보정 없음 | 가상 객체 위치 이탈 | 가림 시간 단축 유도 또는 재위치추적 안내 추가 |
| 성능 저하 | 두 기능 장시간 동시 실행 | 프레임률 하락, 끊김 | 정상 현상. API로 모션 퓨전 비활성화 가능 |
기대 결과 검증 방법
지원 기기로 실제 환경에서 테스트:
- 대상 객체에 정렬 후 가상 객체 안정성 확인.
- 손으로 객체를 2초간 가린 채 기기 이동 시 가상 객체의 부드러운 이동 관찰.
- 손 제거 후 가상 객체가 빠르게 복귀하며 급변 없음 확인.
결론 및 모범 사례
모션 퓨전은 다양한 시나리오에서 3D 객체 추적의 강건성을 크게 개선하지만, 기기 하드웨어 지원 및 충분한 성능이 필요합니다. 개발자는 타겟 사용자 기기를 고려해 기능 활성화를 선택하고, 저성능 기기에서는 성능 저하 방안을 제공해야 합니다.
실시간 모션 퓨전 활성화/비활성화 API 참조:
- 네이티브: setResultPostProcessing
- Unity: EnableMotionFusion