XLOG

[ARKit] 은 무엇일까? 왜 발열이 심할까....? 본문

Swift/Etc

[ARKit] 은 무엇일까? 왜 발열이 심할까....?

X_PROFIT 2023. 3. 19. 18:59

[참고] 이 글은 ARKit의 사용법 보단, AR Kit을 사용하기 위해 사전 지식에 대한 정리라는 점을 참고해주시기 바랍니다.

 

필요에 의해 ARKit에 대한 공부를 해봤다. 

 

몇년 전부터 많이 들려오는 AR(Augmented Reality)인 증강현실, 현실 세계에 가상을 더한 컨텐츠,

AR 뜻만 알아도 AR kit은 증강현실을 구현하는 프레임워크라는 것을 알 수 있다.

 

역시나 공식문서를 보면 2d, 3d 요소를 라이브뷰(카메라로 찍는 현실세계) 에 표현하는 증강현실을 위한 프레임 워크라고 한다.

여기서 우리는 라이브뷰, 즉 카메라로 부터 현실세계의 데이터를 수집해야 한다. QR code 스캐너에 관한 글을 작성할 때 처럼 session을 사용할 것이라는 느낌이 온다.

 

session을 시작하게 되면 처음 state 는 Not available 하다. 그 후 시간이 지나면 Limited > Normal 상태로 변화가 이러난다.

그 이유는 간단하다. 증강현실이라는 것은 QR Code 스캐너에서 다뤘던 것처럼 단순히 pixel 이미지 데이터를 가져오는 것이 아니다.

camera로부터 들어온 데이터를 바탕으로 object, depth, 카메라 앵글 등 많은 정보를 계산해야 한다.

 

우리는 AR 관련 앱을 실행해보면 아이폰을 많이 움직여야 하는 경우가 발생한다.

그 이유가 바로 session 의 상태를 바꿔줘야 하기 때문이다. 공간에 대한 파악이 단순하지 않다.

또한 요즘 아이폰은 디스플레이가 120hz 까지 된다. 카메라는 비디오 레코딩을 할 때 60 frame 까지도 나온다.

그럼 최소 1초에 60번을 연산을 해야 하기에 공간에 대한 사전 대비가 되어 있어야 하는 것은 당연하게 보인다.

 

이전에 잠깐 ML을 사용해보며 Image Detection을 하며 느꼈던 것은, 2D 공간의 Pixel Data의 패턴을 인식하여 특정 물체의 패턴을 다양한 앵글에 따른 공통 사항을 뽑아내서 추적한다는 느낌을 받았다. AR 은 그것을 3D 공간으로 확장한 후 그 데이터를 이용하여 가상객체를 활용할 수 있도록 해주는 것 같다.

예를 들면 사물인식의 기술을 활용하여, 카메라 화면의 각 사물들을 인식하며 각 면을 인식하고, 그 크기를 이용하여 Depth 를 계산한다.

이러한 일련의 기술을 이용하여 가상희 3D 공간을 핸드폰으로 생성한 후 동작하게 만드는 것 같다.

즉 카메라로부터 정보를 받아들이며 그것을 컴퓨터가 만들어낸 3D 공간과 싱크를 맞쳐가며 화면에 뿌려준다로 이해를 했다.

 

이것이 핵심이다. 보면 Scene은 Anchor Entity들의 계층으로 만들어졌다.

사실 따지고 보면 우리가 UIKit 을 사용할때도 우리의 화면은 UIView의 조합으로 만들어진 것과 같은 개념이다.

Anchor 는 현재 위치, 방향, 크기 등의 정보를 포함하는 객체이다. 즉 Anchor는 우리가 만드는 가상객를 담는 공간이고 그 하위노드로 객체의 shape 위치 등을 가지고서, 현실세계와 싱크를 맞춘 가상공간에 배치를 하고, 실시간으로 연산을 해서 우리에게 보여주는 것이다.

생각해보면 아이폰으로 영상을 찍을때도, 각 매초 30, 60번을 계산해서 흔들림, 색상, 얼굴인식 등을 연산하기에 발열이 생기는데, 너무나 당연한 일이 아닌가......

 

마무리

 

AR app 프로젝트를 만들려고 보면 RealityKit, SceneKit, SpriteKit, Metal 이 있다. 이것은 증강현실에서 다룰 가상 컨텐츠가 무엇인지 따라 나뉜다. SceneKit 과 SpriteKit을 간단하게 비교하면 2D 컨텐츠냐, 3D 컨텐츠냐의 차이다. 

 

하지만 핵심은 똑같다. 우리가 놓고싶은 컨텐츠에 필요한 정보들을 담고 있을 store의 Anchor 가 필요하고, 그것을 scene 에 추가를 한다.

물론 어던 컨텐츠를 다루는지에 따라 필요한 Anchor Entity의 가 다를 순 있다.

RealityKit, ScneKit 등 다루는 컨텐츠가 뭔지, 그에 따른 Anchor Entity의 구성은 어떻게 되는지를 고민하면서 접근을 하면 충분히 사용할 수 있을 것으로 보인다. 컨텐츠가 다르더라도 공통점이 있고 차이점이 있기에..

 

또한 좀 더 심화하게 다루고 싶다면 ARKit 의 ARSessionDelegate를 통해서, 실시간으로 받아오는 currentFrame의 대한 정보를 이용하여 우리가 사용할 Anchor Entity의 적용하는 법을 고려해봐야 할 것 같다. float 4X4, float 3X3 등, 혹은 session 의 status 값을 추적하여 room scan 을 하도록 유도를 하든...

 

참 신기하다. 기술 하나의 개념(ML, Object Detection) 을 확장시키다 보면 할 수 있는 것들이 계속해서 생긴다는 것이....