세션 생성 및 구성
Unity에서 AR을 사용하려면 먼저 장면에서 AR 세션을 생성하고 구성해야 합니다. 이 문서에서는 AR 세션을 생성하고 구성하는 몇 가지 주요 방법을 설명합니다. 일반적으로 세션을 성공적으로 생성한 후 Hierarchy 뷰에서 다음과 같은 구조를 볼 수 있습니다:

시작하기 전에
- ARSession 소개를 통해 세션의 기본 개념, 구성 요소 및 작동 워크플로를 이해합니다.
기본 구성으로 세션 생성
Hierarchy 뷰에서 빈 공간을 마우스 오른쪽 버튼으로 클릭하고, EasyAR Sense > [ AR 기능 ] > AR Session ([ 기능 ] Preset) 메뉴를 통해 미리 설정된 세션을 생성할 수 있습니다. 세션은 해당 기능에 적합한 frame source 및 frame filter 구성 요소로 미리 구성되어 있습니다.
스크립트에서는 ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources)를 사용하여 세션을 생성할 수 있습니다.
예를 들어, EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) 메뉴를 통해 이미지 추적용 세션을 생성할 수 있습니다.

해당 스크립트 코드는 다음과 같습니다:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);
ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder 및 ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder 사전 설정을 사용할 때는 리소스 파라미터도 함께 전달해야 합니다. 예를 들어, 다음 코드는 희소 공간 구축용 세션을 생성하고 포인트 클라우드 재질을 지정합니다:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial });
스크립트가 에디터에서만 실행되는 경우 기본 에디터 리소스를 사용할 수도 있습니다:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, ARSessionFactory.Resources.EditorDefault());
EasyAR Sense > AR Session (Preset) > ** 메뉴에는 사용 가능한 모든 사전 설정 세셩이 나열되어 있으며 참고할 수 있습니다.

참고
동일한 장면에서 여러 세셩이 동시에 실행되면 충돌이 발생하므로, 장면에는 활성화된(GameObject.activeInHierarchy == true) 세션을 최대 하나만 유지해야 합니다.
구성 요소 추가
세션의 frame source 및 frame filter 구성 요소는 세션 생성 후 필요에 따라 추가하거나 제거할 수 있습니다.
Hierarchy 뷰에서 **AR Session (EasyAR)**을 선택하고 마우스 오른쪽 버튼으로 클릭한 후, EasyAR Sense > [ AR 기능 ] > ** 메뉴를 통해 해당 기능에 적합한 frame source 및 frame filter 구성 요소를 추가할 수 있습니다.
스크립트에서는 ARSessionFactory.AddFrameSource<Source>(GameObject, bool)를 사용하여 frame source 구성 요소를 추가하거나, ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources)를 사용하여 frame filter 구성 요소를 추가할 수 있습니다.
예를 들어, EasyAR Sense > Image Tracking > Frame Filter : Image Tracker 메뉴를 통해 현재 선택된 세션에 새로운 이미지 추적기를 추가할 수 있습니다.

해당 스크립트 코드는 다음과 같습니다:
ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
주의
구성 요소 추가는 어셈블 전에 완료되어야 합니다. 세션이 어셈블을 시작하거나 완료한 후 구성 요소를 추가하거나 제거하면 세셩이 Broken 상태가 되어 작동이 중지됩니다.
SparseSpatialMapBuilderFrameFilter 및 DenseSpatialMapBuilderFrameFilter를 추가할 때는 리소스 파라미터도 함께 전달해야 합니다. 예를 들어, 다음 코드는 희소 공간 구축용 SparseSpatialMapBuilderFrameFilter를 생성하고 포인트 클라우드 재질을 지정합니다:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial })
스크립트가 에디터에서만 실행되는 경우 기본 에디터 리소스를 사용할 수도 있습니다:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, ARSessionFactory.Resources.EditorDefault());
frame filter를 생성한 후에는 ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset)를 사용하여 사전 설정에 따라 frame filter 파라미터를 조정할 수 있습니다.
예를 들어 다음 코드는 세션에 새로운 이미지 추적기를 추가하고 ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion 사전 설정 파라미터로 구성합니다.
var filter = ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
ARSessionFactory.SetupFrameFilters(new() { filter }, ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion);
메뉴를 사용하여 생성할 때는 사전 설정에 따라 파라미터를 조정할 수 없으며, 생성 후 특정 구성 요소 설명에 따라 구성해야 합니다.
구성 요소 제거
세션에서 구성 요소를 제거하려면 Hierarchy 뷰에서 해당 구성 요소를 선택하고 Delete 키를 누르거나, 스크립트에서 해당 객체를 파괴(Destroy)하면 됩니다.
참고
구성 요소의 GameObject를 비활성화(SetActive(false))하면 구성 요소를 제거하는 것과 동일한 효과가 있습니다.
예를 들어 세션에서 이미지 추적기를 제거하려면 Image Tracker를 선택하고 Delete 키를 누릅니다.

주의
구성 요소 제거는 어셈블 전에 완료되어야 합니다. 세션이 어셈블을 시작하거나 완료한 후 구성 요소를 추가하거나 제거하면 세셩이 Broken 상태가 되어 작동이 중지됩니다.
구성 요소 순서의 영향
세션의 frame filter 자식 노드의 배열 순서는 세션 실행에 영향을 미치지 않습니다.
세션의 frame source 자식 노드의 배열 순서는 어셈블 과정에서 frame source 선택 순서에 영향을 미칩니다. transform 순서로 배열된 첫 번째 사용 가능한 frame source만 세션의 실제 frame source로 선택됩니다.
참고
frame source 노드 순서는 어셈블 전에 수정해야만 유효합니다. 어셈블 후 순서를 조정해도 실행 결과에 영향을 미치지 않습니다.
[선택 사항] 자유롭게 세션 생성
기본 구성 세션이 요구 사항을 충족하지 못하는 경우, 필요에 따라 자유롭게 세션을 생성하고 구성할 수 있습니다.
EasyAR Sense > AR Session (Preset) > AR Session (Empty) 메뉴를 사용하여 frame source 및 frame filter 구성 요소가 포함되지 않은 빈 세션을 생성할 수 있습니다.
스크립트에서는 ARSessionFactory.CreateSession()를 사용하여 구현할 수 있습니다.
ARSessionFactory.CreateSession();
그런 다음 실제 필요에 따라 적절한 frame source 및 frame filter 구성 요소를 추가합니다.
예를 들어, 희소 공간 구축 및 조밀 공간 구축 기능을 포함하는 세션을 생성하려면 다음 코드를 사용할 수 있습니다:
var session = ARSessionFactory.CreateSession();
var group = new GameObject("Frame Source Group");
group.transform.SetParent(session.transform, false);
ARSessionFactory.AddFrameSource<XREALFrameSource>(session);
ARSessionFactory.AddFrameSource<AREngineFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<VisionOSARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<MotionTrackerFrameSource>(session);
List<GameObject> filters = new();
filters.Add(ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, resources));
filters.Add(ARSessionFactory.AddFrameFilter<DenseSpatialMapBuilderFrameFilter>(session, resources));
ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder);
ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder);
이 코드는 다음과 같은 세션 구조를 생성합니다:

다음 단계
실행 제어
- 초기화 방법 및 역할 이해
- 가용성 및 장치 지원 판단 방법 이해
- 세션 실행 제어 방법 이해
구성 요소 및 결과 액세스
- AR 기능 구성 요소 액세스 시도
- 세션 실행 결과 가져오기 방법 이해
구성 요소 참조
- ARSession 구성 요소 참조