VMC를 이용해 버추얼한 MR 영상 만들기

대하여
VR 게임 영상을 보면, 게임 내에 아바타나 실제 사람이 들어가서 플레이를 하는 영상을 볼 수가 있다. 위 영상을 보자. 태보는 지금 전세계적으로 선풍적인 인기를 끌고 있다. 태보란, 우리나라의 태권도와 복싱을 접목한 운동으로, 태보를 하루에 25분씩 한다면 러닝머신 1시간과 같은 운동 효과를 낸다.
이 글에서 다룰 주제는 “어떻게 이런 버추얼한 영상을 만들 수 있는지” 이다. 원리는 간단하다. 현실(또는 가상현실)과 게임 상의 같은 위치에 카메라를 두고 두 영상을 합성하면 된다.

Mixed Reality (혼합 현실)
유튜브의 바다를 떠돌다 보면, VR 게임 플레이 영상이라면서 실제 사람이 게임 안에 들어가 팔을 휘적거리고 있는 영상을 볼 수 있다. 이런 영상은 “혼합 현실”, Mixed Reality에 속한다.

1994년 Paul Milgram과 Fumio Kishino는 혼합 현실을 “가상성 연속체(Virtuality continuum)의 양극 사이에 있는 것”으로 정의하였다. 즉 혼합 현실이란 현실과 가상 사이에 존재하는 여러 가지 방식을 혼합해 구현하는 현실을 의미한다고 할 수 있겠다. 때때로 “증강 현실”과 “혼합 현실”이란 용어를 혼용하기도 하나, 엄밀히 말하면 혼합 현실 안에 증강 현실과 증강 가상 현실이란 개념이 포함된다. 증강 현실(Augmented Reality)이 현실 세계에 가상 물체를 가져오는 것이라면, 증강 가상 현실(Augmented Virtuality)은 가상 세계에 현실 물체를 가져오는 것이라고 할 수 있다.


혼합 현실의 예시. 홀로렌즈를 사용해 증강 현실 마인크래프트를 플레이 하는 모습이다. 다른 사람도 홀로렌즈를 착용하고 있다면 같은 화면을 볼 수 있을 것이다.


LIV를 사용해 VR 게임 내에 실사 영상을 합성(MR 합성)한 예시. 플레이 하는 사람은 그린 스크린 안에 들어가 크로마 키 합성을 통해 게임 영상에 합성된다. 이때 현실에서 사람을 비추는 카메라와 게임 화면을 비추는 카메라의 위치는 동일해야 하며, 현실과 가상의 카메라 위치를 동기화해야 한다.

그러나 이 글에서 다룰 것은 좀 더 “버추얼”한 것, 즉 실사 영상과의 합성이 아닌 두 가상 영상의 합성이다. 구현에 대한 컨셉은 앞에서 적당히 설명했으니, 촬영에 필요한 준비물과 자세한 원리에 대해 알아보자.

준비물

  • VR 장비 : HTC Vive와 트래커 3개를 사용하고 있다. SteamVR이 지원되는 기기를 추천한다. 왜냐하면 이 글에서 소개할 내용이 SteamVR에서 지원하는 기능을 포함하고 있다. 그리고 SteamVR 밖에 써본 게 없다.
  • LIV : 영상 촬영 및 합성을 지원하는 소프트웨어. 스팀에서 무료로 배포하고 있다. 그냥 사용한다면 워터마크가 생기지만, 디스코드에 가입하고 간단한 설문을 작성하면 해제 코드를 바로 발급 받을 수 있다.
  • VRM 파일 : 크로노스 그룹의 로열티 프리 3D 포맷 glTF 2.0을 기반으로 일본 도왕고 사에서 개발한 3D 인간형 아바타용 파일. 파일 내부에 아바타에 대한 라이센스 정보나 스프링 본 (물리 시뮬레이션에 따라 흔들리는 본), 그리고 인간형 아바타 세팅을 위한 여러 설정이 포함되어 있다. glTF 포맷으로 확장자를 바꿔보면 그림판 3D에서도 열린다(리깅 데이터는 전부 날아가지만). 블렌더에서도 플러그인만 깔면 열 수 있다. 일본 VR, VTuber계에서 널리 사용하며, 버추얼 캐스트, Luppet, 아래에 설명할 VirtualMotionCapture 등 여러 어플리케이션이 개발되어 있다.
  • VirtualMotionCapture : 줄여서 VMC. 일본에선 バーチャルモーションキャプチャー (바-챠루 모-숀 캽챠-) 를 줄여 ばもきゃ (바모캬) 라고 한다. VRM 파일을 임포트하여 VR 컨트롤러, 트래커로 실시간 모션캡쳐를 할 수 있도록 만든 툴. 다른 앱과 함께 실행할 수 있어 영상 합성에 유용하다. pixiv fanbox에서 다운받도록 안내하고 있지만 제작자의 Github에서 받아도 무방하다.
    3점 (HMD + 양손 컨트롤러) 에서부터 6점 (3점 + 허리, 양발), 최대 10점 (팔꿈치, 무릎까지) 까지 대응할 수 있다. 트래커를 추적할 수 없게 되면 바로 캐릭터가 꼬여버린다는 단점이 있으나, 표정, 손 제스처 등 세부 설정이 잘 되어 있으며 캡쳐 성능도 나쁘지 않다.
  • externalcamera.cfg : SteamVR에서 지원하는 외부 카메라 기능에 대한 정의 파일. HMD가 아닌 제3의 시점에서 VR 공간을 볼 수 있다. SteamVR로 구동되는 게임 내에 externalcamera.cfg 파일이 있다면 자동으로 게임 화면(데스크탑에서 보이는 것. HMD에선 그대로 출력됨)을 4분할 하여 띄워준다. 왼쪽 아래에 있는 것이 외부 카메라 시점이고 오른쪽 아래가 HMD, 윗부분은 잘 모르겠지만 외부 카메라 시점의 멀티패스 같은 것이 아닐까 싶다.
  • VRoid Studio : 빠르고 간편하게 VRM 파일을 만들 수 있는 툴. 아니면 VRoid Hub에서 다른 사람들이 올린 VRM을 받으면 된다.
  • OBS Studio : 방송 또는 녹화용. 캡쳐 툴로 이만한 게 없긴 하다.

진행 과정

진행에 대해 더 자세한 설명이 필요하다면 VMC 공식 페이지의 매뉴얼을 참고하도록 하자.

  • 우선 VRoid나 다른 여러 방법을 통해 VRM 파일을 구한다. 되도록이면 본인의 팔, 다리 길이에 맞는 모델을 구하는 것이 좋다.
  • VMC를 켜고 모델의 VRM 파일을 불러온다.
  • VMC 내에서 모델이 보이는 시점으로 카메라 위치를 정의할 수 있다. 컨트롤 패널의 camera 항목에서 시점을 조정하고 Settings – export externalcamera.cfg를 누르면 된다. LIV를 사용한다면 굳이 게임 내에 이 파일을 집어넣을 필요는 없다. 또한 이것을 VMC에 집어넣는다면 캡쳐 화면이 4분할 되어 못 쓰게 된다. 외부 폴더에 놓고 쓰자.
  • VMC에서 가상 웹캠 드라이버를 설치한다. LIV에서 VMC_Camera라는 이름으로 카메라가 뜰 것이다.
  • LIV를 켜고 가상 컨트롤러 드라이버를 설치한다. SteamVR에 LIV라고 붙은 컨트롤러와 트래커가 생성된다. 카메라 설정에서 VMC_Camera를 찾아 연결한다. 그리고 Calibration 항목에서 import a file – VMC에서 익스포트 했던 externalcamera.cfg를 불러오면 카메라 시점이 VMC와 동일해진다.
    • 여분의 트래커가 있다면 이것을 카메라로 사용하는 것도 가능할 것 같다.
  • LIV 카메라 해상도와 VMC 해상도를 각 설정에서 동일하게 맞춘다. 그렇지 않으면 LIV에서 합성을 거부한다.
  • LIV를 통해 게임을 실행한다. 여기까지 문제가 없었다면 LIV Output 창에 제대로 합성된 화면이 보일 것이다.
  • 합성된 화면을 OBS 등으로 방송 또는 캡쳐하면 되겠다.

 

예시

직접 해보았다. 느낀 점을 나열해 보자.

  • 트래킹이 추적 소실되는 경우 다리가 돌아가거나 멀리 날아간다. 방에 시야를 가리는 것들이 많아서 그런 것 같은데, 트래킹만 끊기지 않는다면 별 문제 없이 합성 가능하다.
  • 모델의 키가 맞지 않아 다리가 굽어진다. 팔 길이도 맞지 않아 컨트롤러가 손 바깥에 있다거나, 팔이 너무 펴진다거나 하는 문제도 있다. 모델을 수정해야 할 것 같다.
  • 컴퓨터가 혹사당하는 느낌. VR 관련 앱을 LIV, VMC, VR게임으로 총 3개나 돌리고 거기에 OBS까지 돌리니 그럴 만도 하다.

이상이다. 이대로만 따라한다면 여러분도 버추얼 세계에 뛰어들 수 있다. 사실 여러 가지를 실험중인 단계라 모르거나 개선해야 할 것이 많다고 생각한다. 새로운 지식을 알게 되는 대로 새로운 글을 쓸 생각이다.