쓰리디아이 / 2020
조종사 비상탈출 낙하산 시뮬레이터
역재생 가능한 리플레이와 복수 센서 자세 결합

프로젝트 연도 / 상태2020
개발팀 · 리소스 인력 제외3인 · 팀장
사용 기술Unity3D · C# · VR · Winform
OVERVIEW
프로젝트와 나의 역할
훈련 리플레이, 상·하체 Kinect 데이터 결합, 프로젝트 고도화 및 팀 일정 관리를 담당했습니다.
- 훈련 리플레이 기능 개발
- 키넥트 자세 Merge 기능 개발
- 프로젝트 고도화 작업 업무 분장 및 일정 관리
CHALLENGE
해결해야 했던 문제
훈련 State 기록만으로는 배속·역재생에서 애니메이션 전환 오류 발생
APPROACH
선택한 해결 방식
위치, 오브젝트 활성 상태, 애니메이션 클립 상태를 리플레이용으로 직접 기록하도록 변경했습니다.
PROJECT MEDIA
실행 화면과 시연
기존 프로젝트 상세 설명 보기
# 조종사 비상탈출 낙하산 시뮬레이터 개발
Unity 기반 조종사 비상탈출 낙하산 시뮬레이터로, VIVE Tracker·Kinect 풀바디 모션캡처, 최대 4인 네트워크 동기화, WGS84·UTM 좌표 연동, 통제/서버 SW와 VR 클라이언트 간 아바타 모션 동기화 기능을 포함합니다.
프로젝트 설명을 위한 이미지 및 영상 Youtube
### 01. 프로젝트 구성 (리소스 개발 인력 제외)
팀 구성 : 3인 (팀장으로 참여)
### 02. 프로젝트 내 본인 작업 내용
1. Unity 관련
1. 훈련 리플레이 기능 개발
2. 키넥트 자세 Merge 기능 개발
2. 프로젝트 관리
1. 프로젝트 고도화 작업 업무 분장 및 일정 관리
### 03. 담당 기능 개발
# Unity 관련
1. 훈련 리플레이 기능 개발
1. CSV 기반 훈련 리플레이 기능 개발
- 개발 방안 : CSV 파일 기반 배속, 역재생이 가능한 리플레이 기능 개발
- 이슈 및 문제점 : 본래 훈련 State 를 기반으로 하는 훈련 데이터를 저장하게 되니 배속, 역재생을 할때 State 상태간 전환이나 애니메이션 컨트롤에서 문제가 발생하는 것을 발생
- 해결방안 : 리플레이를 위해 저장하는 데이터는 위치, 낙하산 오브젝트 활성화/비활성화 여부, 애니메이터의 애니메이션 클립 상태 자체를 직접 저장하는 방식으로 변경
- 해결 가능 이유 : 실제 훈련중에 사용되는 데이터는 굳이 리플레이에는 필요하지 않은 데이터가 대부분이므로, 리플레이에서 사용할 수 있도록 데이터를 가공하여 저장 후 처리하는 방식으로 처리 가능
2. 키넥트 자세 Merge 기능 개발
1. 키넥트 자세 Merge 기능 개발
- 개발 방안 : 키넥트 2개를 이용하여 상, 하체 별도 트래킹 후 Merge하여 아바타를 컨트롤 하도록 개발
- 이슈 및 문제점 : 키넥트는 각 카메라와 인식한 객체간에 자체적인 좌표계를 이용하기 때문에 데이터를 Merge 하는 것이 어려움
- 해결방안 : 허리(Pelvis)를 기준으로 하체의 경우, 허리를 원점으로 하여 하체 Bone 데이터를 로컬 좌표 값으로 계산하여 실제 아바타의 허리 기준 로컬 값으로 역계산하여 처리
- 해결 가능 이유 : 아바타의 Bone 구조상 허리를 기준으로 상하가 각각 자식 객체로 들어가기 때문에 로컬 좌표를 이용한 역계산이 가능
# 프로젝트 관리 관련
1. 프로젝트 고도화 작업 업무 분장 및 일정 관리
1. 프로젝트 일정 관리
- 이슈 및 문제점 : 기존에 존재하는 거대한 프로젝트를 새로운 팀원들에게 빠른 시일안에 설명하고 이해시켜야만 하기 때문에 그 부분서에 큰 애로사항이 발생
- 해결방안 : 팀원이 빨리 프로젝트 구조를 파악 할 수 있도록 2주동안 프로젝트 리뷰 진행, 이 시점에서는 기본적은 폴더 구조, 스크립트간의 연계성 위주로 설명. 이후, 팀원들이 프로젝트 코드에 대한 이해도 확인을 위해 각자에게 프로젝트 분석 리뷰 업무를 1주일간 맡김. 1주일동안 각자 스스로 분석한 프로젝트 구조를 서로에게 설명하면서 부족한 부분은 본인이 추가로 설명하는 방식으로 프로젝트를 이해시키도록 진행.
2. 프로젝트 리팩토링
- 이슈 및 문제점 : 기존에 작업중인 코드는 신규 인원이 작업할 때 폴더 구조를 이해 시켜도, 작업이 이어질때마다 각자가 작업한 코드가 중구난방이 되는 경우가 발생
- 해결방안 : SVN을 통해 2주에 1번씩 각자 코드에 대한 코드 리팩토링 진행. 그 전에 본인은 팀원들의 코드 상태, 위치 등을 대략적으로 미리 파악해 두고, 리팩토링 시 문제가 되는 코드 위치에 대해 조언을 주는 방식으로 작업.
