'VR의 구조'에 해당되는 글 1건

  VR은 컴퓨터 장치를 이용해 동작하는, 일종의 프로그램이다. 게임 프로그램을 생각해보자. 게임을 실행하면 프로그래머와 디자이너(앞으로는 개발자라고 통칭하겠다)가 고생 고생 만든 그림들이 사용자의 조작에 따라 움직인다. 게임 속에 보여지는 배경이나 캐릭터들은 게임을 만든 개발자가 미리 그려서 게임앱에 넣어 놓은 것이다. 사용자가 캐릭터를 조작하면 게임에 이미 들어 있는 동작 애니메이션이 화면에 보여지게 되는 것이다.

  VR도 역시 앱 개발자들이 미리 만들어 놓은 가상의 물체들을 사용자의 조작에 따라 보여준다. 단, VR은 3차원으로 보여야 하기 때문에 3차원의 물체를 그리고 조작 할 수 있는 특별한 도구들을 사용하여 만든다. 요즘 많이 사용하는 도구는 Unity, Unreal이라는 툴이다. 보통 이런 툴들을 그래픽 엔진이라고 하는데 가상의 물체가 실제 물체처럼 중력에 제한을 받거나 서로 부딪혀 깨지는 등의 현상들을 표현해야하기 때문에 복잡한 알고리즘들을 가지고 있다. 이런 그래픽 엔진들은 개발자들이 복잡한 알고리즘을 신경쓰지 않고 자신의 시나리오를 쉽게 구현할 수 있도록 돕고 있다.

Unity
Unreal

  그래픽 엔진들은 3차원에 그려진 물체들을 화면에 보여주기 위해 Rendering이라는 작업을 하는데 이는 마치 화가가 3차원의 현실 세계를 화첩에 그려 넣는 작업과 같다. 아, 사진으로 찍는 것과도 같다고 할 수 있다. 이 과정에 복잡하고 어려운 수학 공식들이 들어가는데 그래픽 혹은 게임 엔지니어들은 이런 공부를 하기도 한다. 이 포스트에서는 다루지 않을 것이다. 혹시 궁금하다면 OpenGL 튜터리얼 사이트를 찾아보면 된다. (경고, 수학에 왠만큼 자신이 없다면 찾아보지 말기를... 머리만 더 복잡해진다.) VR의 경우에는 그림을 2장 그린다. 당연한 것이 3차원으로 보이게 하려면 각 눈에 서로 (약간) 다른 그림을 보여줘야 하기 때문이다.

  일반 게임에서는 키보드와 마우스로 게임을 조작한다. 그런데 VR의 경우에는 한가지 더 이용한다. 바로 센서 입력이다. 일반적으로 VR은 HMD(Head Mounted Device) 형태인데, 사용자에게 3차원의 그림을 보여줘야 하기 때문에 눈에 가까이 있어야 하기 때문이다. 또한 사용자의 머리 움직임을 모니터링 해야한다. 사용자가 보는 방향을 알아내기 위해서다(엔지니어들은 이를 3DoF라고 한다), 따라서 HMD에는 보통 센서가 함께 장착되어 있다. 추가로 사용자가 바라보는 방향 뿐만 아니라 전후, 좌우 그리고 상하의 움직임을 모니터링 하기 위해서는 더 복잡한 장치가 필요하다(엔지니어들은 이를 6DoF라고 한다). 이 부분은 차후에 포스팅 할 기회가 있을 것이다.

  VR의 동작을 이해하기 위해 아래의 그림을 보자.

VR의 동작 과정

  ① 사용자가 착용하고 있는 HMD의 센서로 부터 데이터를 입력 받는다. ② 이 데이터는 잘 가공하여 사용자의 움직임을 알수 있도록 계산된다. 이를 Sensor Fusion이라고 하는데 결과 값은 x, y, z 3축을 기준으로 하는 각도나 vector + 이 벡터를 기준으로 하는 각도로 표현된다.(이 부분도 자세히 들어가면 Euler, Quaternion 같은 수학이 나온다. ㅠㅠ)  ③ 사용자의 움직임 값은 VR 앱의 그래픽엔진에게 전달되어 가상세계를 모델링하게 되고 ④ 이어 2차원으로 그림을 그리는 Rendering 과정을 거친다. ⑤ 지금까지의 과정은 꽤 많은 시간을 필요로 하기 때문에 (보통 Latency라고 부른다) 이를 보상하기 위해 Compositor가 가장 최신의 사용자 포즈를 한번 더 읽어서 그래픽 엔진이 그린 2차원 그림을 살짝 틀어준다. 여기에 사용되는 기술이 Time Warp, Space Warp 혹은 Reprojection이라고 하는데 이 또한 다음 기회에 다뤄볼 예정이다. ⑥ 완성된 그림은, 마지막으로 Display에 뿌려지게 되고 사용자에게 보여지게 된다.

  간단하게 설명을 했지만, 이런 과정이 거의 1초에 60번 이상 반복이 되어야 하고, 위에서 잠깐 말했던 Latency를 줄이기 위해 많은 기술들이 사용된다. 그 어렵고 복잡한 일들을 엔지니어들이 해낸다. 참 대단한 사람들 많다. ^^

  오늘 포스트에서는 어려운 용어들이 많이 사용되었는데, 걱정할 것 없다. 이런 어려운 용어들도 독자들은 이해해 낸다. 음... 앞으로의 포스트들을 통해 이런 어려운 용어들, 기술들을 풀어보도록 하자.

블로그 이미지

태후아빠

,