Table of Contents

Unity AR의 모션 트래킹 중심 - XR Origin

XR Origin은 Unity에서 모션 트래킹 기능의 핵심 개념입니다. 현대 AR application에서는 모션 트래킹이 점점 필수 기능이 되고 있습니다. 모션 트래킹을 통해 application은 다른 인식 대상 없이도 사용자의 현실 세계 위치와 방향을 파악할 수 있어 몰입감 있는 AR 경험을 구현할 수 있습니다. 아래 내용을 통해 XR Origin의 기본 개념, 구성, lifecycle, 그리고 언제 XR Origin을 사용해야 하는지를 이해할 수 있습니다.

시작하기 전에

XR Origin이란

모션 트래킹이 초기화되면 tracking의 origin이 되는 reference point 하나가 선택됩니다. 이 reference point는 보통 사용자가 application을 시작할 때 또는 system AR service가 시작될 때 device가 있던 위치입니다. Unity scene에서 이 점을 나타내는 것이 XR Origin입니다. 대부분의 경우 scene에서 XR Origin의 시작 위치는 camera의 기본 시작 위치이기도 합니다.

이 video는 모션 트래킹만 실행되는 간단한 AR scene을 보여 줍니다. 왼쪽은 Hierarchy, 가운데는 Scene, 오른쪽은 Game view입니다. video는 Unity editor의 Play mode에서 simulation run data를 사용해 녹화되었습니다. Game view의 내용은 사용자가 현실 세계에서 휴대폰으로 보는 내용과 같습니다.

이 video에서 XR Origin(파란 구체)은 scene에서 고정되어 있고, 사용자를 나타내는 camera(camera 아이콘)는 현실 세계에서 사용자가 움직인 것에 따라 이동합니다. 흰색 원뿔은 이전 camera 위치와 방향의 궤적을 보여 주어 camera의 움직임을 더 쉽게 이해할 수 있게 합니다. 이 흰색 원뿔은 XR Origin node 아래에 생성되며, 이런 scene에서 흔한 객체 구성입니다.

Unity의 모션 트래킹 system에서는 camera가 보통 XR Origin을 따라 움직입니다. camera가 반드시 XR Origin의 child node인 것은 아니지만, AR Session은 XR Origin의 위치를 기준으로 camera 위치를 계산해 사용자가 보는 content가 현실 세계와 맞도록 합니다.

이 video는 같은 scene이지만, 이번에는 runtime 중 XR Origin(파란 구체)을 이동합니다. XR Origin을 움직이면 camera도 따라 움직이고, Game view의 content는 변하지 않는 것을 볼 수 있습니다.

실제 AR scene에서는 이런 movement 관계가 훨씬 더 복잡합니다.

다른 center mode에서의 XR Origin 동작

Unity에서는 AR tracking의 모든 중심 reference point를 session center라고 부르고, session 실행 중 그 center를 정하는 규칙을 center mode라고 부릅니다. center mode에 따라 XR Origin의 동작도 달라집니다.

  • SessionOrigin center mode에서는 XR Origin을 자유롭게 이동할 수 있습니다.

    SessionOrigin mode는 보통 모션 트래킹만 실행되는 scene에서 사용합니다. 다른 기능이 함께 실행될 때는 보통 이 mode를 사용하지 않습니다.

    하지만 headset을 사용할 때 vendor가 Unity에서 모션 트래킹의 reference point를 제대로 구현하지 않았다면 Unity world center를 사용해 SessionOrigin mode를 강제로 써야 합니다. 이 경우 content root가 AR function을 따라 움직여야 하므로 content effect에 영향을 줄 수 있지만, third-party vendor가 변경하기 전에는 다른 방법이 없습니다.

  • 다른 center mode, 예를 들어 FirstTarget에서는 XR Origin을 자유롭게 이동할 수 없습니다.

    FirstTarget mode는 보통 모션 트래킹이 없는 scene 또는 다른 AR 기능과 모션 트래킹이 함께 실행되는 scene에서 사용합니다.

    이 mode에서는 XR Origin의 위치가 AR function에 의해 결정되므로 XR Origin을 마음대로 움직일 수 없습니다.

center mode와 scene 안의 object 이동 방식에 대한 자세한 내용은 center mode를 참고하세요.

XR Origin의 형태와 구성

EasyAR는 두 가지 형태의 XR Origin을 사용할 수 있습니다.

  • EasyAR가 제공하는 XR Origin
  • Unity XR framework가 제공하는 XR Origin

XR Origin (EasyAR)

일반적인 XR Origin 구조는 다음과 같습니다.

alt text

XR Origin의 root node는 비어 있는 GameObject이며, 하나 이상의 XR Origin Child child node를 가질 수 있습니다. XR Origin Child에는 XROriginChildController component가 들어 있어 XR Origin 제어 logic을 대신합니다.

session이 실행될 때 scene에 올바른 XR Origin 구조가 없으면 XR Origin과 하나의 XR Origin Child가 자동으로 생성됩니다. 실행 중 XR Origin Child는 XR Origin과 같은 위치와 방향에 묶입니다.

session이 생성하는 object, 예를 들어 sparse spatial mapping의 point cloud나 dense spatial mapping의 mesh는 XR Origin Child node 아래에 만들어집니다.

이 video는 같은 scene에서 모션 트래킹과 dense spatial mapping을 함께 실행했을 때의 모습을 보여 줍니다. 생성된 mesh가 XR Origin Child node 아래에 만들어지는 것을 볼 수 있습니다.

참고: 이해를 돕기 위해 video에서는 depth map 생성을 끄고 있어서, video의 Scene view 내용은 실제 runtime과 다릅니다. Game view의 표시 효과는 mesh transparency를 끈 경우와 같습니다.

[선택 사항] XR Origin (Unity XR)

필요하다면 Unity XR framework가 제공하는 XR Origin component를 사용할 수 있습니다.

Unity XR framework의 XR Origin을 사용할 때 일반적인 구조는 다음과 같습니다.

alt text

headset scene에서는 일반적인 구조가 다음과 같습니다.

alt text

XR Origin의 root node는 Unity XR framework가 만들고 관리하는 GameObject이며, 하나 이상의 XR Origin Child child node를 가질 수 있습니다. XR Origin Child에는 XROriginChildController component가 들어 있어 XR Origin 제어 logic을 대신합니다.

session이 실행될 때 scene의 XR Origin Child 구조가 올바르지 않으면 XR Origin Child가 자동으로 생성됩니다. 실행 중 XR Origin Child는 XR Origin과 같은 위치와 방향에 묶입니다.

Unity XR framework가 제공하는 XR Origin은 주로 다음 두 상황을 지원합니다.

  • 이미 project에서 AR Foundation을 사용 중이며 EasyAR와 함께 동작시키거나 device support에 따라 둘 사이를 전환하고 싶을 때
  • 사용 중인 headset SDK가 Unity XR framework의 XR Origin component를 사용할 때
참고

Unity XR core package com.unity.xr.core-utils가 아직 project에 import되지 않은 경우, scene의 camera가 Unity XR framework가 제공하는 XR Origin과 같은 hierarchy 구조에 있으면(Camera와 Camera Offset이라는 parent node 포함), session은 그 구조가 Unity XR framework가 만든 것이라고 판단하고 사용합니다. 이는 scene compatibility를 최대한 높이기 위한 것으로, AR Foundation으로 만든 scene은 AR Foundation이 project에 import되지 않아도 계속 동작하고 나머지 AR 기능도 정상적으로 유지됩니다. AR Foundation만 제공할 수 있는 기능을 제외하면 전체 AR functionality와 device compatibility에도 영향을 주지 않습니다.

EasyAR의 대부분 sample scene은 이 방식을 사용해 AR Foundation이 없어도 동작하도록 하고, AR Foundation이 있을 때는 협력 동작도 보여 줍니다.

AR Foundation의 정의에서 XR Origin은 XR scene에서 공간 tracking의 중심입니다. 다만 AR Foundation 개념에서는 모션 트래킹이 필수 기능이며, XR scene에서 설명하는 tracking은 모션 트래킹입니다.

EasyAR system에서는 모션 트래킹이 선택 기능이므로 XR Origin도 선택 사항입니다. XR Origin은 모션 트래킹이 활성화된 경우에만 생성되고 사용됩니다.

XR Origin의 lifecycle

XR Origin의 lifecycle은 session에 달려 있습니다. session이 시작되면 XR Origin이 선택되거나, scene의 XR Origin 구조가 올바르지 않으면 생성됩니다. session이 멈추면 XR Origin은 다음 session에서 사용되거나 수동으로 삭제될 때까지 그 자리에 남습니다.

다음 단계

생성

runtime 제어

관련 주제