Table of Contents

Ar scene에서의 unity camera

Unity에서 AR의 효과를 렌더링하기 위해서는 카메라가 필요합니다. 다음 내용을 통해 AR scene에서 카메라의 역할과 session이 올바른 AR 경험을 보장하기 위해 카메라 속성을 어떻게 제어하는지 알아보세요.

시작하기 전에

  • ARSession 소개를 통해 session의 기본 개념, 구성 및 워크플로를 이해하세요.

Ar scene에서 카메라의 역할

Unity에서 카메라는 플레이어에게 게임 세계를 보여주는 데 사용됩니다. AR scene에서는 카메라의 역할이 더욱 중요합니다. 가상 콘텐츠를 렌더링할 뿐만 아니라 가상 객체가 현실 장면에 올바르게 오버레이되도록 하기 위해 현실 세계와 정렬해야 합니다.

이 비디오는 간단한 AR scene을 보여줍니다. 왼쪽은 Scene 뷰, 오른쪽은 Game 뷰입니다. 비디오는 시뮬레이션 실행 데이터를 사용하여 Unity 에디터의 Play 모드에서 녹화되었습니다. Game 뷰의 내용은 현실 세계에서 사용자가 휴대폰으로 보는 내용과 동일합니다.

비디오에서 볼 수 있듯이, 사용자를 나타내는 카메라(카메라 아이콘)는 사용자가 현실 세계에서 움직임에 따라 이동합니다. 흰색 원뿔은 지난 시간 동안 카메라의 위치와 방향 궤적을 보여줍니다. Game 뷰에서 카메라는 Scene 뷰의 가상 콘텐츠를 표시할 뿐만 아니라 가상 콘텐츠 하단에 현실 세계 이미지가 오버레이되어 있습니다. 이것이 AR scene에서 카메라의 일반적인 작동 방식입니다.

가상 객체가 현실 장면에 올바르게 오버레이되도록 하기 위해 카메라의 일부 속성은 AR 실행 상태에 따라 조정되어야 합니다. 이러한 속성은 다음과 같습니다:

  • 카메라의 transform(위치 및 방향)
  • 카메라의 시야(FOV), 종횡비(aspect ratio) 및 투영 행렬
  • 카메라의 컬링 설정(GL.invertCulling)
경고

앱 개발 시 session 카메라의 이러한 속성을 수정하는 것은 지원되지 않습니다. 이로 인해 가상 콘텐츠와 현실 세계가 올바르게 정렬되지 않아 사용자 경험이 저하될 수 있습니다. 이러한 속성을 수정하더라도 AR 시스템은 실행 중에 이러한 수정 사항을 덮어쓰거나, 렌더링 데이터와 계산 데이터 간 불일치로 인해 예기치 않은 동작이 발생할 수 있습니다.

이러한 속성을 제어하는 객체에 따라 session에서 사용하는 카메라는 두 가지 유형으로 분류됩니다: session에 의해 제어되는 카메라와 session에 의해 제어되지 않는 카메라.

Session에 의해 제어되는 카메라

Session의 카메라가 헤드셋이나 AR Foundation과 같은 외부 시스템에 속하지 않는 경우, session은 카메라가 현실 세계와 올바르게 정렬되도록 하기 위해 자동으로 카메라의 속성을 제어합니다.

Transform

카메라의 transform(위치 및 방향)은 session이 AR 기능의 실행 상태에 따라 조정합니다. 일반적으로 session은 모션 트래킹 데이터 및/또는 target의 트래킹 데이터를 기반으로 카메라의 위치와 방향을 업데이트하여 사용자가 보는 내용이 현실 세계의 내용과 일치하도록 합니다.

Unity에서 모든 AR 트래킹의 중심 참조점을 session 중심이라고 하며, session 실행 중 이 중심을 결정하는 규칙을 중심 모드라고 합니다. 다른 중심 모드에서 카메라의 transform 동작은 다릅니다:

  • Camera 중심 모드에서는 카메라가 자유롭게 이동할 수 있습니다.

    일반적으로 Camera 모드는 애플리케이션에서 거의 사용되지 않습니다.

  • 다른 중심 모드(예: FirstTarget)에서는 카메라가 자유롭게 이동할 수 없습니다.

    FirstTarget은 대부분의 AR 애플리케이션이 사용하는 모드입니다.

경고

카메라 transform의 scale 값은 항상 (1, 1, 1)로 유지되어야 합니다. 카메라 scale을 수정하면 예기치 않은 동작이 발생할 수 있습니다.

투영 행렬

카메라의 투영 행렬은 물리적 카메라의 내부 매개변수에 따라 session이 매 프레임 업데이트할 때 업데이트되어 가상 콘텐츠가 현실 장면에 올바르게 오버레이되도록 합니다.

컬링 설정

카메라의 컬링 설정(GL.invertCulling)은 session의 미러링 설정에 따라 조정되어 가상 콘텐츠가 현실 장면에 올바르게 렌더링되도록 합니다.

HorizontalFlip에서 현재 사용 중인 카메라에 해당하는 설정이 World일 때, GL.invertCullingtrue로 설정됩니다. 이것은 전면 카메라의 기본 구성입니다.

Ar 백그라운드 비디오 스트림

AR scene에서 카메라는 일반적으로 사용자의 몰입감을 높이기 위해 물리적 카메라의 비디오 스트림을 배경으로 렌더링합니다. Session은 비디오 스트림 획득 및 렌더링을 자동으로 처리하고 비디오 스트림이 가상 콘텐츠와 올바르게 정렬되도록 합니다.

Session에 의해 제어되지 않는 카메라

헤드셋 및 AR Foundation을 사용하거나, 구현에서 IsCameraUnderControlfalse로 지정한 FrameSource를 사용할 때, session은 카메라의 위 속성을 제어하지 않으며 외부 시스템이 제어를 담당합니다.

경고

이 경우 session이 카메라 속성을 제어하지는 않지만, 헤드셋 SDK나 AR Foundation과 같은 타사 시스템에 의해 제어됩니다. 앱 개발 시 이러한 속성을 수정하는 것은 여전히 지원되지 않습니다.

카메라 복사 시 고려 사항

때로는 session 카메라의 매개변수를 다른 카메라에 복사해야 할 수 있으며, 이때 다음 두 가지 사항에 특히 주의해야 합니다:

  • 속성 획득 시기: 제어되는 카메라를 사용할 때는 session 실행 결과 가져오기를 참조하여 올바른 시간에 이러한 매개변수를 가져와야 합니다. session에 의해 제어되지 않는 카메라를 사용할 때는 타사 시스템의 문서를 참조하여 올바른 시간에 가져와야 합니다.
  • 카메라의 시야(FOV), 종횡비(aspect ratio) 및 투영 행렬: Camera.projectionMatrix를 사용하여 카메라 투영 행렬을 가져와 다른 카메라에 복사해야 합니다. Camera.fieldOfViewCamera.aspect은 수학적으로 투영 행렬의 일부이므로, Camera.fieldOfViewCamera.aspect을 사용하는 것은 충분하지 않습니다.

다음 단계

  • 최적의 AR 경험을 위해 카메라를 구성하는 방법을 알아보려면 카메라 구성을 읽어보세요.

관련 주제