AR scene의 Unity 카메라
Unity AR 경험은 카메라에 의존합니다. 이 문서는 AR scene에서 카메라의 역할과 session이 카메라 속성을 어떻게 제어하여 올바른 AR 경험을 보장하는지 설명합니다.
시작하기 전에
- ARSession 소개에서 session의 기본 개념, 구성, 작업 흐름을 알아보세요.
AR scene에서 카메라의 역할
Unity에서 카메라는 player에게 game world를 보여주는 데 사용되지만, AR scene에서는 그 역할이 더욱 중요합니다. 가상 콘텐츠를 렌더링할 뿐 아니라, 가상 오브젝트가 실제 scene 위에 올바르게 겹쳐지도록 현실 세계와 정렬되어야 합니다.
이 video는 간단한 AR scene을 보여줍니다. 왼쪽은
Sceneview이고 오른쪽은Gameview입니다. video는 Unity Editor의Playmode에서 simulation data를 사용해 녹화되었습니다.Gameview의 내용은 사용자가 현실 세계에서 휴대폰으로 보는 내용과 같습니다.이 video에서는 사용자를 나타내는 camera 아이콘이 현실 세계에서 사용자의 이동에 따라 움직입니다. 흰색 cone은 지난 일정 기간 동안 camera의 위치와 방향을 보여줍니다.
Gameview에서는 camera가Sceneview의 가상 콘텐츠를 보여줄 뿐 아니라, 가상 콘텐츠 아래쪽에 실제 세계 이미지를 겹쳐 표시합니다. 이것이 AR scene에서 camera의 전형적인 동작입니다.
가상 오브젝트를 실제 scene 위에 올바르게 겹치기 위해서는 AR runtime 상태에 따라 몇 가지 camera 속성을 조정해야 합니다. 이러한 속성에는 다음이 포함됩니다:
- camera의 transform(위치와 방향)
- camera의 field of view(FOV), aspect ratio, projection matrix
- camera의 culling 설정(
<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>)
경고
application을 개발할 때 session camera의 이러한 속성을 수정하는 것은 지원되지 않습니다. 가상 콘텐츠가 현실 세계와 잘못 정렬되어 user experience에 영향을 줄 수 있기 때문입니다. 어떤 방식으로든 이러한 속성을 수정하더라도 AR system은 runtime 중 해당 변경을 덮어쓰거나, 렌더링 데이터와 계산 데이터가 일치하지 않아 예기치 않은 동작이 발생할 수 있습니다.
이러한 속성을 제어하는 객체에 따라 session이 사용하는 camera는 session이 제어하는 camera와 session이 제어하지 않는 camera 두 가지로 나눌 수 있습니다.
session이 제어하는 camera
session camera가 headset이나 AR Foundation 같은 외부 system에 속하지 않는 경우, session이 위의 camera 속성을 자동으로 제어하여 camera가 현실 세계와 올바르게 정렬되도록 합니다.
transform
camera의 transform(위치와 방향)은 AR 기능의 runtime 상태에 따라 session이 조정합니다. 일반적으로 session은 motion tracking 데이터 및/또는 target tracking 데이터를 기반으로 camera의 위치와 방향을 업데이트하여 사용자가 보는 내용이 현실 세계와 일치하도록 합니다.
Unity에서 모든 AR tracking의 중심 기준점은 session origin이라고 하며, session runtime 동안 이 origin을 결정하는 규칙을 center mode라고 합니다. camera transform의 동작은 center mode에 따라 달라집니다:
<xref:u:easyar.ARSession.ARCenterMode.Camera>center mode에서는 camera가 자유롭게 움직일 수 있습니다.일반적으로
<xref:u:easyar.ARSession.ARCenterMode.Camera>mode는 application에서 거의 사용되지 않습니다.<xref:u:easyar.ARSession.ARCenterMode.FirstTarget>와 같은 다른 center mode에서는 camera가 자유롭게 움직일 수 없습니다.<xref:u:easyar.ARSession.ARCenterMode.FirstTarget>은 대부분의 AR application에서 사용하는 mode입니다.
경고
camera transform의 scale 값은 항상 (1, 1, 1)로 유지되어야 합니다. camera scale을 수정하면 예기치 않은 동작이 발생할 수 있습니다.
projection matrix
camera의 projection matrix는 실제 camera intrinsics에 따라 session이 매 frame 업데이트하여 가상 콘텐츠가 실제 scene에 올바르게 겹치도록 합니다.
culling 설정
camera의 culling 설정(<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>)은 session의 mirror 설정에 따라 조정되어 가상 콘텐츠가 실제 scene에 올바르게 렌더링되도록 합니다.
<xref:u:easyar.ARSession.HorizontalFlip>에서 현재 camera에 해당하는 설정이 <xref:u:easyar.ARSession.ARHorizontalFlipMode.World>일 때 <xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>는 true로 설정됩니다. 이것은 front camera의 기본 구성입니다.
AR background video stream
AR scene에서 camera는 일반적으로 실제 camera의 video stream을 background로 렌더링하여 몰입감을 높입니다. session은 video stream의 획득과 렌더링을 자동으로 처리하고, video stream이 가상 콘텐츠와 올바르게 정렬되도록 합니다.
session이 제어하지 않는 camera
headset이나 AR Foundation을 사용하거나, 구현에서 <xref:u:easyar.FrameSource>에 대해 <xref:u:easyar.FrameSource.IsCameraUnderControl>을 false로 지정한 경우, session은 위의 camera 속성을 제어하지 않습니다. 대신 외부 system이 이를 제어합니다.
경고
이 경우 session이 camera 속성을 제어하지 않더라도, 그것들은 headset SDK나 AR Foundation 같은 third-party system이 계속 제어하므로 개발 중 이러한 속성을 수정하는 것은 여전히 지원되지 않습니다.
camera를 복사할 때의 주의 사항
때로는 session camera의 파라미터를 다른 camera로 복사해야 할 수 있습니다. 그 경우 다음 두 점에 특히 주의하세요:
- 속성 획득 시점: 제어되는 camera를 사용할 때는 session 출력 가져오기를 참고하여 올바른 시점에 이러한 파라미터를 얻으세요. session이 제어하지 않는 camera를 사용할 때는 third-party system 문서를 참고하여 올바른 시점에 얻으세요.
- camera의 field of view(FOV), aspect ratio, projection matrix:
<xref:UnityEngine.Camera.projectionMatrix?displayProperty=nameWithType>를 사용해 camera projection matrix를 얻고 다른 camera에 복사하세요.<xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType>와<xref:UnityEngine.Camera.aspect?displayProperty=nameWithType>는 수학적으로 projection matrix의 일부이므로,<xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType>와<xref:UnityEngine.Camera.aspect?displayProperty=nameWithType>만 사용하는 것으로는 충분하지 않습니다.
다음 단계
- Camera configuration를 읽어 최상의 AR 경험을 위한 camera 설정 방법을 알아보세요