정보공간_1

[6기 신촌 류보원] 체감형 게임 - 오큘러스 리프트 연동 본문

IT 놀이터/Elite Member Tech & Talk

[6기 신촌 류보원] 체감형 게임 - 오큘러스 리프트 연동

알 수 없는 사용자 2014. 9. 15. 17:36

안녕하세요 신촌 멤버십 22기 류보원입니다.

이번에는 오큘러스 리프트를 연동하여 보다 실감나는 게임을 구현하는 법에 대해 알아보겠습니다.


포스팅에 앞서 오큘러스 리프트에 대해 간단하게 알아보면 아래와 같습니다.


[오큘러스 리프트(Oculus Rift)]


오큘러스 리프트(Oculus Rift)는 가상현실 게임을 위한 장비이다. 헤드셋을 쓰면 헤드셋이 머리의 움직임을 실시간으로 감지하여 머리가 어느 방향으로 움직이든지 그 방향으로의 시각을 제공한다. 또한 각각의 오른쪽, 왼쪽 렌즈는 오목하게 굽어진 파노라마 디스플레이 영상을 제공한다. 이는 넓은 시야각을 제공하여 눈동자를 움직여도 가상 현실의 디스플레이를 볼 수 있다. 헤드를 트레킹하는 기술과 양 쪽 눈에 제공되는 각각의 디스플레이는 마치 사용자가 가상현실에 들어와있다는 착각을 하게 만드는 역할을 하게 된다. 하지만 시야각은 110˚에 한정되어있고, 헤드 트레킹의 속도 문제, 시각과 청각 정보의 불일치 문제, 모션을 인식 못하는 문제 등으로 완벽한 가상현실 구현에 한계가 있고, 사용 중 멀미 현상을 보이는 사용자가 많다는 단점이 있다. 이러한 단점은 기술의 발전으로 해결되야할 부분이다.


[위키백과] 오큘러스 리프트


저는 최근 프로젝트에서 DK1 (Development Kit 1)을 사용하여 개발했기 때문에 DK1을 기준으로 포스팅 하겠습니다. 현재 DK1은 단종된 상태지만 큰 차이는 없을것으로 생각됩니다.


DK1의 스펙은 아래와 같습니다.


  • Head tracking : 6 DOF(Degrees Of Freedom) ultra low latency
  • 시야각 : 대각선 110º / 수평 90º
  • 해상도 : 1280x800 (640x800 per eye)
  • 입력 방식 (Input) : DVI/HDMI , USB
  • 플랫폼 : PC, mobile
  • 무게 : ~0.22 kg
  • 지원 OS : Window, Apple, Linux, IOS, Android, Unity, Unreal Engine ( SDK 와 Headset 모두 지원)


이제 간단한 게임을 구현할 준비를 해야하는데요, 저는 오큘러스 리프트 SDK가 지원하는 플랫폼 중 가장 접근하기 용이한 Unity 3D를 이용해 보겠습니다.


Unity 3D의 경우 공식 홈페이지에 들어가면 무료버전 혹은 유니티 프로 트라이얼 버전을 다운로드 받을 수 있습니다. [Unity 3D 공식 홈페이지]


유니티가 준비되었다면 하나더 준 비해야할 게 있는데요, 오큘러스 리프트를 유니티에서 사용할 수 있게 해주는 오큘러스 리프트 SDK가 필요합니다.


먼저 [Oculus VR Developer Center]에 들어가서 우측 상단의 Latest Builds를 선택합니다.





Unity 4 Pro Integration을 다운받습니다.






이제 준비가 다되었으니 유니티를 실행시켜 새 프로젝트를 생성합니다.




File -> Open Scene 에서 다운 받은 압축 파일안에 있던 OculusUnityIntegration.unitypackage를 선택합니다.



관련 패키지들을 임포트 하겠다는 다이얼로그가 뜨면 Import를 눌러줍니다.



아래 그림과 같이 Project 탭에 OVR과 Plugins이 생성되었다면 모든 준비가 다 된것입니다.



OVR폴더에서 Script폴더에 들어가보면 아래 그림과 같이 여러개의 C# 스크립트가 존재하는데요, 이 중 오큘러스 리프트의 시차 화면을 적용하는데 필요한 것은 OVRCameraController 입니다.



단순 시차화면을 구성하기 위해서는 스크립트를 건드릴 필요가 없이 Prefabs폴더에서 OVRCameraController.prefab을 Hierachy에 끌어널어서 기존의 카메라와 대체해버리면 끝입니다. 다만 OVRMainMenu라던가 OVRGUI와 같은 스크립트들은 오큘러스 리프트 상에서 보기 적합한 GUI 레이아웃을 구성하는데 도움을 주는데요, 스크립트를 분석해 어렵지 않게 커스터마이징이 가능합니다.


본론으로 돌아와서 OVRCameraController.prefab을 Hierachy에 집어 넣어 보겠습니다.



위와같이 카메라가 생깁니다. 좀 더 자세히 살펴보면 CameraLeft와 CameraRight 두개의 카메라로 구성되어 있다는 것을 알 수 있습니다. 



그냥 실행을 시키면 잘 보이지 않으니, 평면과 큐브, 조명을 하나씩 배치해 두고 실행해 보겠습니다.




실행을 시켜 보면, 위와 같이 왼쪽눈 오른쪽눈 에 해당하는 카메라가 각각 보여지게 됩니다. 

이처럼 OVRCameraController.prefab을 게임상의 PlayerObject나 혹은 카메라가 구성되어야 할 부분에 기존의 카메라와 대체시키는 방법으로 쉽게 구성이 가능합니다.


이 외에 또 다른 Prefab이 하나 더 있는데, OVRPlayerController입니다. 이는 좀 더 쉽게 OVRCamera를 달고 있는 PlayerObject를 구성하기 위한 것입니다. 이를 살펴보면, 



CameraController는 큰 차이가 없고, 손쉽게 게임 캐릭터를 구현 할 수 있게끔 예제가 구현되어 있습니다.



OVRPlayerController.cs 스크립트를 열어서 소스코드를 살펴보면,

게임에 기본적으로 필요한 이동과 카메라 회전, 점프 등이 구현되어 있습니다.




위와 같은 형태로 구현되어 있으니 직접 스크립트를 열어서 보시면 어렵지 않게 사용 가능합니다.






이번에는 오큘러스 리프트 SDK를 이용해서 시차화면을 구성하는 법에 대해 알아봤는데요, 다음에는 오큘러스 리프트에 적합한 GUI 레이아웃을 구성하고 적용하는 법에 대해 알아보겠습니다.

감사합니다.