립모션 개발 기술 및 LEAM 프로젝트 공개 1부

웨드_ |

필자는 립 모션 베타테스터로 선정이되어, 올 초에 립모션을 만져볼 수 있는 기회를 얻었다. 개인적인 사정으로 립모션을 제대로 활용해볼 수 없을 거라는 생각이 들었고, 더 유용하게 사용할 수 있는 사람에게 빌려줘야겠다는 마음을 먹게 되었다.


마음을 먹자마자 블로그와 페이스북을 통해 한 학부 학생에게 연락이 왔고, (밑도끝도 없었지만) 믿고 기기를 빌려주었다. 그 뒤에 석박사과정분들이나 회사에서 비용을 지불하면서까지 대여를 희망했지만, 학부 학생들에게 소중한 기회를 주었다는 점에서 잘 결정했다는 생각이 든다 :)


김현택 학생을 통해 립 모션을 빌려주게 되었고, 프로젝트를 마친 후 남재현 학생이 아래 질문에 성실히 답변을 달아주었다. 아래 소감을 통해 립 모션을 활용한 소프트웨어 개발 경험을 나누고자 한다.





1. 자기 소개 및 팀 소개를 해주세요.


 안녕하세요. 저희는 선문 비트컴퓨터에서 교육을 받은 학부 학생 6명으로 구성된 팀입니다. 이전까지는 학부 수업 정도의 수준으로 공부했지만, 비트교육을 통해 1년간 C, C++, Win32API, C# 등 MS사의 언어를 교육 받았고, 3개월 간(2013년 4월~6월) 최종 프로젝트를 진행했습니다.


  • 팀장 : 김현택 (Management, Leap Motion 담당)
  • 팀원 : 남재현(Leap Motion 담당), 손정섭(Audio 담당), 정우환(Editor 담당), 정용인(Web 담당), 조국진( Physics Engine,  APP 담당)


 이번 프로젝트를 진행하면서 아주 많은 경험할 수 있었고, 지금까지 받았던 교육들이 이제서야 조금씩 이해되는 느낌을 받았습니다. 또한, 운 좋게 립 모션(Leap Motion)을 사용하여 프로젝트를 진행할 수 있었습니다.






2. 프로젝트 명과 프로젝트에 대해 간단한 소개를 해주세요. 프로젝트에서 립모션이 어떤 역할을 했나요?


 먼저 프로젝트 명은 LEAM (Leap motion Editor And Media) 입니다. LEAM 프로젝트는 립 모션(Leap Motion)을 사용하여 3D아바타를 조종하고 음성 및 오디오 파일을 합쳐서 애니메이션을 저작합니다. 그리고, 이를 웹에 게시하여 여러 사람들과 공유 할 수 있는 소프트웨어를 개발하는 프로젝트입니다. XNA FrameWork 기반 하에 자체 개발한 Leap Motion API가 포함되어 있습니다.


 교육기관(비트컴퓨터)에서의 발표를 위해 범위를 정하다 보니, 프로젝트가 조금은 산만한 부분이 있습니다. 팀원 6명 모두에게 역할 분배가 이뤄져야 하고, 그 동안 배웠던 기술들을 사용해야 하기 때문에 이렇게 된 것 같네요^^; 그 중에서 역시 핵심은 립 모션(Leap Motion)으로 3D아바타를 조종하는 기능이라고 할 수 있겠습니다.






 프로젝트 설명을 조금더 보태자면 아래와 같다.


 클라이언트는 .Net Framework 4.0과 XNA Game Studio 4.0을 기반으로 모션을 녹화, 재생, 편집할 수 있는 모션 컨트롤 엔진과 오디오 녹음, 재생, 편집할 수 있는 오디오 컨트롤 엔진으로 구성 되어있습니다. 다음으로 서버는 .Net Framework 4.0을 기반으로 Web Service를 제공하며, 웹 페이지는 Silverlight 4.0을 사용해 웹 게시판과 웹 하드로 구성 되어있습니다.




 Leap Motion을 통해 받은 Raw Data를 클라이언트에서 자체적으로 개발한 Leap Motion API를 통해 아바타를 조종할 수 있고, 조종된 정보를 녹화, 영상으로 출력, 편집할 수 있습니다. 또한 추가적으로 아바타 편집기와 맵 편집기를 제공하고 있습니다.







3. 립모션으로 개발해본 소감이 어떤가요?


 아직 출시되지 않은 립 모션(Leap Motion)을 사용해 볼 수 있다는 생각에 처음엔 그냥 설레기만 했고, 받아서 처음 립 모션(Leap Motion)의 강력함을 경험 했을 때는 영화에서나 나오는 것들이 현실화 되는구나 생각했었습니다. 그런데 개발 전, 저희는 “예광탄”이라고 부르는데요, 이 기술을 프로젝트에 적용시킬 수 있는지 확인 겸, 기술 습득을 하는 과정에서 많은 문제점에 부딪히게 되었습니다. 올 2월 출시였던 립 모션(Leap Motion)이 왜 자꾸 연기가 되는지도 어느 정도 알 수 있었습니다. (그 만큼 미흡한 부분이 많았습니다.)



영상1: 립 모션을 마우스처럼 사용해보기



 처음엔 프로젝트 아이디어가 떠오르지 않아 Window7의 립 모션(Leap Motion) 테마를 만들어 볼까 생각했었습니다. 그래서 먼저 마우스와 립 모션(Leap Motion)의 1:1 매핑을 해보았습니다. 영상을 자세히 보시면 마우스 포인터가 움직이는 것을 볼 수 있으실 것입니다. 그런데, 립 모션(Leap Motion)으로 마우스를 조종한다는 것이 생각처럼 쉽지 않았습니다. 클릭과 더블클릭 조차 마음대로 하기 힘들었으니깐요.


 아마 이걸 만들었다 해도 사람들은 그냥 마우스를 사용했을 거라 생각합니다. 일부러 더 불편한 인터페이스를 사용할 사용자는 없을 테니까요. 립 모션(Leap Motion)으로 키보드나 마우스를 대체한다는 것은 안 된다고 판단하게 되었고, 또한 6명이 하기에는 규모가 작다고 생각하여 Win7 테마 아이디어는 포기하게 되었습니다. 



 저희 강사님과 함께 고민을 하다가 나온 아이디어가, 손으로 조종하는 인형을 모티브로, 립 모션(Leap Motion)으로 3D아바타를 조종해보는 것은 어떨까 하여 LEAM 프로젝트가 시작 되었습니다. 립 모션(Leap Motion)으로 3D아바타를 조종하기 위해 양손과 각각의 손가락이 아바타의 신체 부위에 하나씩 매핑이 되어 움직일 수 있도록 구상하였습니다. 하지만, 립 모션(Leap Motion)에서 제공되는 SDK에는 당연히 이런 것들이 존재하지 않았습니다.


 립 모션(Leap Motion)의 SDK에 대해 말씀을 드리면, 저희가 0.7.6 버전부터 사용하기 시작해서 프로젝트가 끝날 무렵 0.8 버전이 나왔는데, 이 초기 버전의 SDK에는 사용 설명이 너무나도 부족했습니다. 저희한테 필요한 API가 어떻게 제공되는지를 부족한 설명으로는 알 수 없었기 때문에 일일이 예광탄을 만들어서 테스트 해봐야 했습니다.


 실질적인 구현 기간인 2개월 동안 SDK 업데이트가 되면서 계속 나아지고 있다고 체감은 들었으나 결국 구분되지도 않은 손가락의 움직임에 대한 RAWDATA만 제공해주었기 때문에 필히 가공을 해야만 했습니다. 그래서 저희는 자체적으로 API를 만들기 시작했습니다.


 양손과 각각의 손가락을 구분한다는 것이 생각보다 쉽지가 않았습니다. 아직 출시 되지 않은 립 모션(Leap Motion)에 대한 자료도 거의 없었고, 저희가 할 수 있는 방법은 직접 생각해내거나, 개발자 포럼에서 토론을 하는 것, 두 가지였습니다. 다행히도 저희와 비슷한 손가락 구별 방법을 생각하는 분들이 많아 여러 생각을 들어 볼 수 있었습니다.


 이전까지 제가 경험한 프로젝트는 막히는 것이 있으면 레퍼런스를 찾아보며 진행하면 되는 것들이었습니다. 하지만, 립 모션(Leap Motion) 개발은, 아주 기본적인 SDK는 제공되었지만, 참고할 것 거의 없이 직접 알고리즘을 짜내야 했습니다. 이것이 립 모션(Leap Motion)개발을 통해 얻은 소중한 경험이라고 생각합니다. 김평화(Heiswed)님께서도 기기를 처음 빌려주실 때, 아주 좋은 경험이 될 것이라고 하셨던 말씀이 생각이 나네요. ^^




어떤 기술기반 시스템(혹은 서비스, 혹은 제품)을 다음과 같이 네 가지 단계: "하드웨어 - OS - 프레임워크 - 응용프로그램"로 나누었을 때, 우리나라에는 하드웨어 업체와 응용프로그램 개발 업체는 많아도 소프트웨어의 핵심이라 할 수 있는 OS나 프레임워크를 개발하는 회사가 거의 없다는 점을 얘기했던 것 같다.


그 만큼 소프트웨어의 핵심 기술을 경험할 만한 기회가 많지 않다는 것이다. 아직 다듬어지지 않은 립 모션의 프레임워크를 가지고 자체적으로 API를 개발해야하는 환경이 귀한 경험을 줄 것이라는 말이었다.


어쩌면(아니, 필연적으로) 시간이 좀 지나면, 립 모션 SDK에 손과 손가락을 구분해주는 API가 분명 포함될 것이다. 시간이 지날수록 알고리즘은 보다 효율적여지고, Abstraction의 단계는 보다 명확해 질테니까.. 그 창조적이고 철학적인 과정에 동참한 것이 부럽다. :)