일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- hopfield network
- 갤럭시탭S8울트라
- 증강현실
- 구글 앱 엔진
- BAM
- 패턴인식
- 파이썬
- Friendship
- 물걸레자동세척로봇청소기
- 삼성전자 소프트웨어멤버십 SSM
- 신경회로망
- 삼성
- 패턴 인식
- SSM
- Python
- 하이퍼바이저
- 신경망
- Neural Network
- 동아리
- 빅데이터
- 멤버십
- 인공지능
- 물걸레로봇청소기추천
- 가상화
- 나르왈프레오
- Bidirectional Associative Memory
- 삼성소프트웨어멤버십
- Google App Engine
- NarwalFreo
- 고려대학교
- Today
- Total
정보공간_1
[6기 신촌 류보원] 체감형 게임 - 오큘러스 리프트 연동 본문
안녕하세요 신촌 멤버십 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 레이아웃을 구성하고 적용하는 법에 대해 알아보겠습니다.
감사합니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[6기 강북 이보희] 디지털 영상처리 - Filter 편 #1 (1) | 2014.09.18 |
---|---|
[6기 신촌 김윤상] R 언어 #2 - Data Analysis에 최적화된 R 언어 알아보기 (0) | 2014.09.16 |
[6기 신촌 김상훈] 텍스트 마이닝 #1 (0) | 2014.09.15 |
[6기 강북 전영진] 리눅스 커널 심층 분석 #1 (0) | 2014.09.15 |
[6기 강북 윤덕진]Cross compile과 Bootloader (0) | 2014.09.15 |