Table of Contents

AR 세션의 중심 모드

중심 모드는 Unity AR의 핵심 개념으로, 세션이 실행되는 동안 어떤 오브젝트를 모든 AR 트래킹의 참조점(중심 오브젝트)으로 선택할지, 그리고 세션에서 어떤 오브젝트가 자유롭게 이동할 수 있는지를 결정합니다. 다음 내용을 통해 중심 모드의 기본 개념과 장면 내 오브젝트의 운동 동작에 미치는 영향을 이해할 수 있습니다.

시작하기 전에

  • AR 세션 소개를 통해 세션의 기본 개념, 구성 요소 및 워크플로를 이해합니다.
  • 카메라를 통해 AR 장면에서 카메라의 역할과 올바른 AR 경험을 보장하기 위해 세션이 카메라 속성을 어떻게 제어하는지 이해합니다.
  • XR 오리진을 통해 XR 오리진의 기본 개념, 구성 요소 및 생명주기를 이해합니다.
  • 타겟을 통해 타겟의 기본 개념, 상태 및 생명주기를 이해합니다.

중심 오브젝트와 중심 모드

하나의 세션에서는 하나 이상의 서로 다른 AR 기능이 동시에 실행될 수 있습니다. 이러한 AR 기능들은 서로 다른 오브젝트를 트래킹할 수 있으며, 디바이스 자체의 위치와 방향을 추적하기 위해 모션 트래킹 기능을 동시에 사용할 수도 있습니다.

장면 내 오브젝트의 운동 동작이 예상대로 이루어지도록 하기 위해, 세션은 모든 AR 트래킹의 중심이 되는 참조점을 선택해야 하며, 이 참조점은 Unity 장면에서 중심 오브젝트(CenterObject)로 표현됩니다. 중심 모드(CenterMode)는 이 중심 오브젝트가 어떤 오브젝트인지 결정하는 세션 실행 중의 규칙입니다.

하나의 세션의 중심은 다음 오브젝트 중 하나가 될 수 있습니다:

  • 트래킹 중인 특정 타겟
  • XR 오리진
  • 카메라

중심 모드는 세션이 어떤 오브젝트를 중심 오브젝트로 선택할지, 그리고 이 오브젝트가 자유롭게 이동할 수 있는지 여부를 결정합니다. 이 오브젝트 이외의 다른 오브젝트(비중심 카메라, XR 오리진 및 타겟 포함)는 세션에 의해 제어되며 중심 오브젝트를 참조점으로 하여 운동합니다.

Unity에서 session은 다음 네 가지 중심 모드를 지원합니다:

이름 다이어그램 설명
FirstTarget

SpecificTarget
alt text target을 중심으로 하며, 이 target은 자유롭게 이동할 수 있습니다. 여기서,
  • FirstTarget은 첫 번째로 추적된 target을 중심으로 합니다.
  • SpecificTarget은 지정된 target을 중심으로 합니다.
session 내 camera와 XR Origin 및 기타 target들은 session의 제어를 받아 중심 target을 기준점으로 움직입니다.
SessionOrigin alt text XR Origin을 중심으로 하며, XR Origin은 자유롭게 이동할 수 있습니다.
session 내 camera와 target들은 session의 제어를 받아 중심 XR Origin을 기준점으로 움직입니다.
Camera alt text 카메라를 중심으로 하며, 카메라는 자유롭게 이동할 수 있습니다.
session 내 XR Origin과 target들은 session의 제어를 받아 중심 카메라를 기준점으로 움직입니다.

다이어그램에는 세 개의 물체가 있으며, 파란색 구체는 XR Origin을, 파란색 원뿔은 카메라를, 노란색 이미지는 target을 나타냅니다. 서로 다른 중심 모드에서 session은 서로 다른 물체를 중심 물체로 선택하며, 그림은 해당 물체의 로컬 좌표계를 보여줍니다.

AR Foundation 사용 경험이 있다면, AR Foundation에는 유사한 개념이 존재하지 않음을 알 수 있습니다. 실제로 AR Foundation의 동작 모드는 SessionOrigin 중심 모드와 일치합니다.

session에서 targetcamera의 상대적 운동 관계는 현재 session에 의해 제어됩니다. XR Origincamera의 상대적 운동 관계는 현재 session 또는 AR Foundation과 같은 서드파티 프레임워크에 의해 제어됩니다. 중심 모드는 서로 다른 실행 환경에서도 session이 장면 내 물체의 운동 행동을 올바르게 제어할 수 있도록 보장합니다.

예를 들어, AR Foundation 또는 Unity XR 기반 헤드셋 SDK가 XR Origincamera의 상대적 운동 관계를 제어하는 경우, XR Origin은 Unity XR 프레임워크 설계 상 session에 의해 이동이 제어될 수 있지만 camera는 그렇지 않습니다. 이때 session은 중심 모드를 FirstTarget, SpecificTarget 또는 SessionOrigin으로 제한합니다. 이렇게 하면 session에게는 중심이 XR Origin 또는 특정 target이 되고, Unity XR 프레임워크에게는 중심이 여전히 XR Origin이 되어 전체 시스템이 완벽하게 작동합니다.

경고

Unity AR에서는 session 컴포넌트에 따라 transform을 조정하지 않은 채 Unity 세계 좌표계에 존재하는 모든 물체가 올바르게 표시되지 않을 수 있습니다. session이 중심 물체의 위치와 방향에 따라 장면 내 다른 물체들의 위치와 방향을 조정하기 때문에, session의 제어를 받지 않는 물체는 그 위치와 방향이 session이 계산한 위치 및 방향과 일치하지 않아 예상치 못한 동작을 초래할 수 있습니다.

예를 들어, 세계 좌표계 아래 팬더 모델을 배치했다면, 이 팬더 모델의 위치와 방향은 현실 세계의 어떤 물체와도 대응 관계가 없어 공중에 떠 있거나 여기저기 움직이는 것처럼 보일 수 있습니다.

올바른 방법은 표시할 콘텐츠를 항상 특정 target 노드 아래에 배치하거나, 콘텐츠가 XR Origin을 따라 움직여야 하는 경우 XR Origin 노드 아래에 배치하는 것입니다. 이렇게 하면 콘텐츠의 위치와 방향이 session의 계산 결과에 따라 조정되어 현실 세계에 콘텐츠가 올바르게 중첩되도록 보장됩니다.

콘텐츠와 target 또는 XR Origin의 위치 및 방향을 수동으로 정렬하는 것은 가능하지만, 올바른 시점에 작업해야 합니다. 자세한 내용은 적절한 중심 모드 선택을 참조하십시오.

유효한 중심 모드

모든 중심 모드가 모든 상황에서 유효한 것은 아닙니다. session은 현재 실행 환경과 선택한 frame source에 따라 어떤 중심 모드가 유효한지 결정하여 장면 내 물체의 운동 행동을 올바르게 제어할 수 있도록 합니다. ARSession.AvailableCenterMode 속성을 사용하여 현재 session의 유효한 중심 모드 목록을 가져올 수 있습니다.

최종적으로 선택된 frame source에 따라 session의 유효한 중심 모드는 다음과 같은 여러 상황이 있습니다:

frame source 카메라 제어 여부 모션 데이터 존재 여부 원점 설계 존재 여부 유효한 중심 모드
  • CameraDeviceFrameSource
  • FramePlayer 및 녹화 시 사용한 frame source에 모션 데이터 없음
  • ExternalImageStreamFrameSource
아니요 -
  • FirstTarget
  • SpecificTarget
  • Camera
  • ARCoreFrameSource
  • AREngineFrameSource
  • ARKitFrameSource
  • InertialCameraDeviceFrameSource
  • MotionTrackerFrameSource
  • ThreeDofCameraDeviceFrameSource
  • FramePlayer 및 녹화 시 사용한 frame source에 모션 데이터 있음
  • FirstTarget
  • SpecificTarget
  • SessionOrigin
  • Camera (*)
* camera
XR Origin의 자식 노드가 아닌 경우에만 유효
  • ARCoreARFoundationFrameSource
  • ARKitARFoundationFrameSource
  • VisionOSARKitFrameSource
  • XREALFrameSource
  • ExternalDeviceFrameSource 및 OriginTypeXROrigin 또는 Custom인 경우
    • PicoFrameSource
    • RokidFrameSource 및 UXR 미사용 시
아니요
  • FirstTarget
  • SpecificTarget
  • SessionOrigin
  • ExternalDeviceFrameSource 및 OriginTypeNone인 경우
    • RokidFrameSource 및 UXR 사용 시
아니요 아니요
  • SessionOrigin

FramePlayer를 사용하는 경우를 제외하고, 유효한 중심 모드는 session 조립 시 결정됩니다. FramePlayer를 사용할 때는 유효한 중심 모드가 session 실행 중 매 프레임 데이터 출력 시 데이터에 모션 정보 포함 여부에 따라 동적으로 결정됩니다.

서로 다른 중심 모드의 특성

다음으로, 일련의 예시 비디오를 통해 서로 다른 중심 모드에서 오브젝트의 운동 동작을 보여드리겠습니다.

비디오 내용은 다음과 같습니다:

현실 세계에는 두 가지 유형의 트래킹 가능한 오브젝트가 있습니다:

  • 하나는 크리스마스 트리로, 정지 상태입니다. 이는 희소 공간 매핑 기능을 통해 트래킹됩니다.
  • 다른 하나는 A4 용지로, 미리 인쇄된 사진이 있으며 이동 가능합니다. 이는 이미지 트래킹 기능을 통해 트래킹됩니다.

비디오 녹화 시, 관찰자(휴대폰)는 크리스마스 트리의 오른쪽 뒤에서 시작하여 트리를 중심으로 이동합니다. A4 용지는 관찰자 앞에서 좌우로 흔들립니다.

관찰을 용이하게 하기 위해 장면 내 서로 다른 오브젝트에 다음과 같은 식별자를 추가했습니다:

  • 크리스마스 트리: 트래킹 상태일 때 차지하는 공간에 밝은 파란색 포인트 클라우드를 중첩합니다. 트래킹이 손실되면 이 식별자는 사라집니다.
  • A4 용지: 트래킹 상태일 때 그 위에 판다를 중첩합니다. 게임 뷰에는 A4 용지의 내용과 크기가 완전히 동일한 이미지가 추가로 표시됩니다. 트래킹이 손실되면 이 식별자는 사라집니다.
  • XR 오리진: 그 위치에 파란색 구체를 배치합니다.
  • 카메라: 그 위치에 파란색 원뿔을 배치하며, 원뿔의 주축은 카메라의 시선 방향과 일치합니다.

이 비디오들은 모두 시뮬레이션 실행 데이터를 사용하여 Unity 에디터의 플레이 모드에서 녹화되었습니다. 비디오 왼쪽은 뷰이고 오른쪽은 게임 뷰입니다. 게임 뷰의 내용은 현실 세계에서 사용자가 휴대폰으로 보는 내용과 동일합니다.

FirstTarget 및 SpecificTarget 중심 모드

FirstTarget 및 SpecificTarget 중심 모드는 특정 target을 중심 객체로 하는 모드입니다. 이 두 모드에서는 중심 target 외에 세션 내의 camera, XR Origin 및 기타 target이 세션에 의해 제어되며, 중심 target을 기준점으로 움직입니다.

일부 target은 현실 세계에서 이동 가능합니다. 예를 들어 영상 속 A4 용지입니다.

위 영상에서 중심 객체는 이미지 트래킹 기능으로 추적된 A4 용지입니다. 외부 조작이 없어 A4 용지(판다)는 정지해 있고, 카메라(파란 원뿔), XR Origin(파란 구체) 및 크리스마스 트리(밝은 파란 포인트 클라우드)가 움직이는 것을 볼 수 있습니다.

일부 target은 현실 세계에서 고정되어 있습니다. 예를 들어 영상 속 크리스마스 트리입니다.

위 영상에서 중심 객체는 희소 공간 맵(sparse spatial map) 기능으로 추적된 크리스마스 트리입니다. 외부 조작이 없어 크리스마스 트리(밝은 파란 포인트 클라우드)는 정지해 있고, 카메라(파란 원뿔)와 A4 용지(판다)가 움직이는 것을 볼 수 있습니다. XR Origin(파란 구체)도 움직이지 않는데, 이는 크리스마스 트리에 상대적으로 정지해 있기 때문입니다.

이 두 모드에서는 기준점인 중심 target이 자유롭게 이동할 수 있습니다. 이때 세션 내의 camera, XR Origin 및 기타 target은 모두 따라 움직이며, 이들의 transform은 외부에서 제어할 수 없습니다.

위 영상에서 중심 객체는 이미지 트래킹 기능으로 추적된 A4 용지입니다. A4 용지(판다)를 수동으로 이동시켰을 때, 카메라(파란 원뿔), XR Origin(파란 구체) 및 크리스마스 트리(밝은 파란 포인트 클라우드)가 모두 따라 움직이는 것을 볼 수 있습니다. 이때 Game 뷰에 표시되는 내용은 변하지 않습니다. 카메라의 위치와 방향이 A4 용지 및 다른 객체들에 대해 상대적으로 변화가 없기 때문입니다.

FirstTarget과 SpecificTarget 모드의 차이는 실행 과정에서 중심 target이 변경될 수 있지만, 변경 시 중심 선택 방식이 다르다는 점입니다. 이 문제를 설명하기 위해서는 추적 성공 및 손실 과정을 고려해야 합니다.

세션 중심 객체가 변경될 때, ARSession.CenterObject는 항상 현재의 중심 객체를 반영하지만, ARSession.CenterMode는 변경되지 않습니다.

FirstTarget 중심 모드의 중심 변화

FirstTarget 중심 모드에서 세션은 항상 처음 추적된 target을 중심으로 합니다. 만약 이 target의 추적이 손실되면, 세션은 중심을 재선택합니다. 세션이 다른 target을 추적 중이거나 새로 추적할 때, 다른 target이 새로운 중심 객체로 선택됩니다.

중심 재선택은 다음과 같은 상황에서 발생합니다:

  • 현재 프레임에서 추적 상태인 target이 하나도 없는 경우
    이때 SessionOrigin 모드가 유효하면, 세션은 SessionOrigin 모드로 퇴화하여 XR Origin을 중심 객체로 선택합니다; 그렇지 않으면 세션은 Camera 모드로 퇴화하여 camera를 중심 객체로 선택합니다.

  • 현재 프레임에 추적 상태인 target이 있고, 이전 프레임에는 추적 상태인 target이 하나도 없던 경우
    이때 세션은 추적 중인 target 중 하나를 중심 객체로 선택합니다.

  • 현재 프레임에 추적 상태인 target이 있고, 이전 프레임의 중심 target이 현재 프레임에서 추적을 손실한 경우
    이때 세션은 추적 중인 target 중 하나를 새로운 중심 객체로 선택합니다.

위 동영상에서는 초기 중심 객체는 이미지 추적 기능으로 추적된 A4 용지입니다. A4 용지(판다) 추적이 손실되면, 세션은 중심 객체를 재선택합니다. 이때 크리스마스 트리(밝은 파란색 포인트 클라우드)가 새로운 중심 객체가 되며, 동영상 끝에 A4 용지가 다시 추적되지만, 크리스마스 트리가 이미 중심 객체이기 때문에 중심 객체가 되지 않습니다.

SpecificTarget 중심 모드의 중심 변경

SpecificTarget 중심 모드에서 세션은 항상 지정된 target을 중심으로 합니다. 만약 이 target의 추적이 손실되면, 세션은 중심을 재선택하지만 다른 target을 새로운 중심 객체로 선택하지 않습니다. 세션이 이 지정된 target을 다시 추적하면, 여전히 중심 객체로 선택됩니다.

중심 재선택은 다음과 같은 상황에서 발생합니다:

  • 현재 프레임에 지정된 target이 추적되지 않는 경우
    이때 SessionOrigin 모드가 유효하면, 세션은 SessionOrigin 모드로 퇴화하여 XR Origin을 중심 객체로 선택합니다; 그렇지 않으면 세션은 Camera 모드로 퇴화하여 camera를 중심 객체로 선택합니다.

  • 현재 프레임에 지정된 target이 추적 상태이고, 이전 프레임에 지정된 target이 추적되지 않았던 경우
    이때 세션은 지정된 target을 중심 객체로 선택합니다.

위 동영상에서 중심 객체는 이미지 추적 기능으로 추적된 A4 용지로 지정되었습니다. A4 용지(판다) 추적이 손실될 때, 세션은 다른 target을 새로운 중심 객체로 선택하지 않습니다. 이때 크리스마스 트리(밝은 파란색 포인트 클라우드)는 중심 객체가 되지 않습니다. 동영상 끝에 A4 용지가 다시 추적되면, 중심 객체로 복원됩니다.

SessionOrigin 중심 모드

SessionOrigin 중심 모드는 XR Origin을 중심 객체로 하는 모드입니다. 이 모드에서 세션의 cameratarget은 모두 세션에 의해 제어되며, 중심 XR Origin을 기준점으로 움직입니다.

위 동영상에서 중심 객체는 XR Origin입니다. 외부 조작이 없기 때문에 XR Origin(파란색 구체)은 정지해 있고, 카메라(파란색 원뿔)와 A4 용지(판다)가 이동합니다. 크리스마스 트리(밝은 파란색 포인트 클라우드)도 움직이지 않지만, 이는 XR Origin에 대해 정지해 있기 때문입니다.

이 모드에서 기준점인 중심 XR Origin을 자유롭게 이동시킬 수 있습니다. 이때 세션의 cameratarget은 모두 함께 움직이며, 그들의 transform은 외부에서 제어될 수 없습니다.

위 동영상에서 중심 객체는 XR Origin입니다. XR Origin(파란색 구체)을 수동으로 이동했기 때문에 카메라(파란색 원뿔), 크리스마스 트리(밝은 파란색 포인트 클라우드), A4 용지(판다)가 모두 함께 움직임을 볼 수 있습니다. 이때 Game 뷰에 표시되는 내용은 변하지 않습니다. 카메라의 위치와 방향이 XR Origin 및 다른 객체에 대해 변하지 않았기 때문입니다.

SessionOrigin 모드에서는 XR Origin이 반드시 유효해야 하므로, 이 모드에서는 중심 객체가 변하지 않습니다.

Camera 중심 모드

Camera 중심 모드는 camera를 중심 객체로 하는 모드입니다. 이 모드에서 세션의 XR Origintarget은 모두 세션에 의해 제어되며, 중심 camera를 기준점으로 움직입니다.

위 동영상에서 중심 객체는 카메라입니다. 외부 조작이 없기 때문에 카메라(파란색 원뿔)은 정지해 있고, XR Origin(파란색 구체), 크리스마스 트리(밝은 파란색 포인트 클라우드), A4 용지(판다)가 이동합니다.

이 모드에서 기준점인 중심 camera를 자유롭게 이동시킬 수 있습니다. 이때 세션의 XR Origintarget은 모두 함께 움직이며, 그들의 transform은 외부에서 제어될 수 없습니다.

위 동영상에서 중심 객체는 카메라입니다. 카메라(파란색 원뿔)을 수동으로 이동했기 때문에 XR Origin(파란색 구체), 크리스마스 트리(밝은 파란색 포인트 클라우드), A4 용지(판다)가 모두 함께 움직임을 볼 수 있습니다. 이때 Game 뷰에 표시되는 내용은 변하지 않습니다. 카메라의 위치와 방향이 XR Origin 및 다른 객체에 대해 변하지 않았기 때문입니다.

Camera 모드에서는 camera가 반드시 유효해야 하므로, 이 모드에서는 중심 객체가 변하지 않습니다.

다음 단계

관련 주제