
turn real world object를 visionOS 앱의 virtual anchor로 바꾸는 방법.
당신은 이미 Reality Composer Pro나 RealityKit, ARKit framework를 통해 spatial experience를 생성해보았을 것이다.

또한 당신은 사람들의 주변에 virtual object를 anchoring 하는 컨셉에 익숙할 것이다.
예를 들어, 당신의 visionOS 앱은 RealityKit과 ARKit API를 사용하여 평면, 이미지, 손에 콘텐츠를 배치시킬 수 있다.

Anchor는 실제와 가상을 blur line하게 해주는 immersive experience를 시작하는 좋은 시작점이다.
오브젝트 트래킹을 통해서, 우리는 실세계의 item을 anchor 사용하는 것이 가능해졌다.
유용한 정보를 제공하는 매일 사용되는 물체를 본다고 상상해봐라. 혹은 가전 제품들이 가상 메뉴얼과 함께 제공된다고 생각해봐라. 혹은 수집품들과 장난감들이 immersive storytelling 경험을 제공한다고 생각해봐라.
이곳은 내 공간이고, 책상 위에는 몇개의 물건들이 놓여있다.

Object tracking을 통해서 앱은 좌표 시스템에서 나타나는 각 물체의 위치와 방향, 그리고 바운딩 박스를 알 수 있다.

globe에 more information을 위해 tap 하라는 virtual label을 붙였다.

이렇게 하면 몇 물체들이 globe 주변을 돌게 된다. globe 뒤에 가상의 물체들이 숨기도 한다. 이를 통해 더욱 immersive한 경험을 선사 받게 된다.

globe를 한번 더 tap하면 Inner core를 볼 수 있다.

그저 3 step을 따라오면 object tracking을 만들 수 있다.

첫번째는 트래킹하고 싶은 실세계 물건을 represent하는 3D model을 제공하는 것이다. 3D model이 없다면 이를 얻을 수 있는 손 쉬운 방법들이 있다.

그리고 maching learning model을 학습한다. 학습을 위해 3D asset을 CreateML app에 넣어야한다.
학습이 완료되면, 결과는 Object Tracking을 위해 올해 새롭게 소개되는 reference object파일 형태로 도출된다.

마지막으로 virtual content를 anchor하기 위해 이 reference object를 사용한다.

Object Tracking에 필요한 3D model 먼저 얘기해보자.
이전에 말한 바와 같이 Create ML앱은 머신러닝 학습을 위해 3D asset을 필요로 한다.
이를 위해 3D asset은 USDZ file format으로 필요하다. 최상의 tracking quality를 위해 asset은 사진과 최대한 같아야한다. 필수적으로 실제 물체와 digital twin을 기대해야 한다. photorealistic 3D model을 얻기 위한 가장 단순한 방법은 애플의 Object Capture 기술을 이용하는 것이다. 이를 위해 오직 필요한 것은 아이폰이나 아이패드다.

물체에 광택 혹은 투명한 부분이 있다면 multi-material asset을 제공해야 할 수도 있다.
Object Capture에 대해 더 알고 싶다면 아래 세션을 보도록

Object Tracking에 지원되는 물체.
일단 주변이 stationary한 것.
모양과 텍스쳐가 rigid한 것.
non-symmetrical 한 것. - 모든 각도에서 distinct한 모양을 가지고 있는 것.
지구본-> non-symmetrical하다.

globe를 캡쳐할 때 rigid한 부분만 tracking에 담겼으면 해서 stand를 제거했다.
Object Tracking에는 각 타겟 각각에 대한 maching learning training이 필요하고, 이는 Create ML 앱을 통해 손 쉽게 만들 수 있다. 모든 maching learning training은 Mac에서 locally 이루어진다.

올해, spatial category가 새롭게 추가되었다.

학습은 간단한 3가지 단계로 구성된다.

첫번째는, USDZ asset을 활용하여 training session을 설정한다.
그리고 ML 모델을 맥에서 학습한다.
그리고 reference object를 저장하여 Apple Vision Pro에서 실행한다.
Object Tracking template에서 새로운 프로젝트를 생성하면 CreateML은 empty 3D viewport와 함께 training configuration view를 실행한다.

drag&drpp으로 USDZ file을 추가한다.

3D viewport를 통해 3D model을 다양한 각도에서 보며 실제 물체와 일치하는 것을 확인 할 수 있다.

우측 하단에서 scale을 보며 실제 물체와 일치하는지 확인해보는 것도 좋다.

트래킹되었으면 하는 여러 물체를 추가할 수 있다.
좌측 메뉴의 model source 옆에 있는 plus icon을 눌러서 다른 USDZ asset을 추가할 수 있다.

추가적으로 configuration step이 하나 더 있다. 바로 가장 적절한 viewing angle을 설정하는 것이다. 이는 물체 종류나 당신의 공간에 어떻게 물체가 놓여있는지에 따라 object Tracking 경험을 최적화하는 것에 도움을 준다.
예를 들어 많은 사무용품들은 upright나 front로 위치해있다. 이러한 정보를 machine learning training의 가이드 정보로 활용할 수 있다.
세가지 종류가 있다.

3D viewport 바로 아래에서 viewing angle을 선택할 수 있다. 실제 globe는 모든 각도에서 볼 수 있기 때문에 all angle option을 선택했다. 이 옵션을 선택할 때는 최상의 tracking quality를 위해 당신의 object가 모든 각도에서 구분되어야 한다.

현미경은 표면에 서있으므로 'Upright' 설정을 선택한다. 이 설정에서는 bottom viewing angle은 제외된다.

마지막으로, 3번째 item인 oscilloscope는 표면에 서있을 것이고, 후면을 볼 필요가 없을 것이다. 따라서 front option을 선택한다. 이 옵션은 back과 bottom viewing angle을 제외한다.

3D viewport가 ground, back palne을 표시하고 있고 3D model의 up, front로 추측하는 axes를 보여주고 있다. 만약 3D model이 잘못된 방향으로 표시된다면 학습 전에 Reality Composer Pro로 수정하여라.

이제 설정이 끝났으니 학습을 시킨다.
학습을 시작하면 Progress bar를 확인 할 수 있고 이를 통해 project status를 확인 할 수 있다. 학습에는 시간이 꽤 걸리는데 이는 맥 환경에 따라 다르다. 또한 Apple Silicon Mac에서만 가능하다는 점을 알아둬라.

학습이 끝나면 reference object 결과를 저장할 수 있다.

Create ML에 대해 더 알고 싶다면 이 영상을 보렴.

tracked object로 Immersive experience를 생성하는데에는 다양한 방법이 있다. Reality Composer Pro로 virtual content를 anchor할 수 있고 새로운 RealityKit과 ARKit API를 사용할 수도 있다.

virtual content를 직관적으로 수정하고 배치할 수 있게 해주는 Reality Composer Pro로 authoring process를 시작하고자 한다.

visionOS template으로 새로운 Xcode project를 생성한다.

이는 자동적으로 기본 scene을 생성하고

Reality Composer Pro로 열 수 있다.

Reality Composer Pro에서 기본 구를 삭제한다.

빈 transform entity를 추가하고

anchoring component를 추가한다.

이 entity는 object anchotr의 container 역할을 한다.

객체를 쉽게 추적할 수 있도록 'Object'라는 Target이 새로 추가되었다.

그리고 Create ML로 생성된 Referece Object를 가져온다.

그리고 이 객체를 AnchoringComponent에 연결한다.
예제에서는 Reality Composer Pro를 이용했지만 RealityKit API를 사용하여 runtime시에도 AnchoringComponent를 생성할 수 있다.
기존 USDZ모델을 반투명하게 viewport에서 볼 수 있다. 이는 content를 정확하게 배치시켜야 할 때 도움이 된다.

추가했던 효과들을 살펴보자.
우주선의 경우 특정 발사 위치를 선택했다.

viewport의 visual cue를 사용하면 우주선 entity의 위치를 잡기 수월하다.

궤도 회전시에 globe 뒤에선 어떻게 사라지게 만들었을까?
달에 timeline animation을 적용했다.

scene에는 Anchor Entity의 child node로 분리된 USDZ globe entity가 포함되어 있다. 이는 scene에서 occluding shpae의 역할을 한다. object tracking은 상위 anchor entity의 transform을 업데이트하므로 가리는 물체는 실제 지구본과 정렬된다.

이 부분을 완료하려면 ShaderGraph을 통해

occlusion material을 적용시킬 수 있다.

마지막으로 occluder entity에 tap gesture를 추가하여 behavior 구성 요소를 사용해 두 expericne 사이를 전환한다.

실행시 탭 하면 물체들이 나타나 선회하고 지구본 뒤로 사라진다.

다시 탭하면 열린다.

하지만 이 경험을 어떻게 시작해야할지 안내가 부족하다. 이를 위해 앱에 coaching UI를 추가한다. 이것은 object tracking에 의해 감지되는 지점까지 target object의 preview를 보여준다.
또한 지구본과 상호작용하는 방법을 알려주는 label도 추가하도록 하겠다.
RealityKit API는 위의 작업을 비롯한 다양한 작업에 필요한 광범위한 tool set을 제공한다.

일단 3D model 미리보기를 표시하여 공간의 올바른 물체를 찾도록 한다.
coaching UI는 AnchorState의 변화에 따라 반응해야 함으로 코드로 체크해야한다.
물체가 감지되면, 표시된 3D model이 AnchorEntity의 위치로 변환되는 작업을 보여주고 싶다.
그 다음 가상 label 추가하겠다.

이 코드는 coaching UI에서 target object의 3D model을 표시하는 방법에 대한 것이다.

ARKit API를 이용하여 referenceoject file에서 reference object를 가져와서 model entity를 불러오는 것처럼 USDZ file을 불러온다.

preview임을 나타내기 위해 opacity는 0.5로 설정한다.

물체가 감지되었음을 인지하기 위해, Reality Composer Pro로 만들었던 object anchor entity를 찾는다.

그리고 update loop에서 entity의 isAno=chored flag 상태를 확인하고 두 상태 모두에 대해 표시할 물체를 결정할 수 있다.

전환 애니메이션의 경우에는

추적이 시작될 때 객체 미리보기가 추적된 객체의 위치 쪽으로 이동하게 하기 위해 anchor의 변환 데이터를 가져와야 한다.
권환을 요청하기 위해 SpatialTrackingSession을 사용한다.

그러고 나면 object anchor에 대한 transform에 접근이 가능해지고 에니메이션 적용이 가능해진다.

마지막으로, experience 시작하는 방법을 알려주기 위해 지구본 근처에 RealityView attachment를 통해 가상 label을 추가한다.

아직 globe가 감지되지 않았다.

추적이 시작되면, target object로 Preview가 움직여서 내가 따라갈 수 있도록 안내한다.

그리고는 virtual label을 통해 경험을 시작할 수 있게된다.

Object Tracking을 위해 ARKit에 새로운 API들이 추가되었다. 더 많은 것을 학습하고 싶다면 아래의 영상을 보도록.

추가 학습을 위해 아래 비디오 추천.
