AR에 대해 공부하다보니 SceneView에 다양한 기능을 제공하는 Node가 많다고 생각했다. 슬슬 머리로만 기억해서 꺼내는 방식은 불가능할 듯해서 나름대로 정리하기로 했다. infoNode에 대해서 README에 언급되지만, 해당 Node는 어디에 있는지 찾지 못해 쓰지 못했다. +2023.07.17 공식 Github을 뒤적거리다가 라이브러리에 대한 문서를 찾았다. 이 문서에 더 많은 Node에 대한 정보가 존재한다.
+2024.01.14(일) 기존의 주소에서 세부 주소가 바뀌어 404가 걸리길래 공식 홈페이지 메인 주소를 올려두었습니다. 위의 링크로 가셔서 API 항목으로 가시면 해당 라이브러리의 클래스와 메소드를 확인하실 수 있습니다.

Node란?

AR에서 Node란 Scene에 적용될 물체, 즉 화면에 보여지는 물체를 뜻한다. 따라서 Node는 하드웨어 카메라가 보여주는 현실세계 위에 증강하여 올라가는 가상 물체들을 통틀어 일컫는 말이다.

Node

아주아주 기본적인 Node로 사실상 사용되는 Node의 구현을 위한 클래스이다.

Node의 가장 기본적인 기능이 구현되어있으며 화면 속 좌표에서의 Node의 변환을 다루며 렌더링 엔진이 렌더링이 가능한 항목을 추가할 수 있게 해준다. 또한 Node의 부모 Node 설정, 자식 Node 설정이 가능하도록 되어있다.

Node의 위치(position), Node의 회전(rotation), Node의 크기(scale)이 params으로 존재한다.

ArNode

AR 환경에서 사용되는 Node로 Node를 검색하다가 나왔다.
ArModelNode가 상속받는 클래스로 Ar에서 사용되는 Node의 기본적인 내용이 정의되어 있는 듯 하다.

현재로는 ArModelNode와의 차이는 잘 모르겠다.

ModelNode

일반적인 그래픽 렌더링 환경에서 사용되는 Node로 Filament만 포함된 'io.github.sceneview:sceneview:1.0.10' 라이브러리에서 사용된다.

README에도 사용방법이 나와있는 기본적인 Node이다.

ArModelNode

AR 환경에서 사용되는 Node로 Filament와 ARCore가 포함된 'io.github.sceneview:arsceneview:0.10.0' 라이브러리에서 사용된다.

README에도 사용방법이 나와있고 0.10.0 버전 이후로 달라진 사용법은 아직 업데이트 되지 않았다. 이 시리즈를 다루며 주로 다루어진 Node이다.

ViewNode

최근에 ArModelNode 위에 이름표를 달며 사용한 Node이다. View를 렌더링하는 ViewRenderable로 설정된 렌더링 옵션들을 받는 Node 같다.
원본 소스코드의 설명도 Node에서 중간 문단만 다르게 적혀 있어 뭔지 모르겠지만, 경험상 그런 거 같다.

AugmentedImageNode

내가 제대로 이해한 게 맞다면 지정된 이미지 위에서만 렌더링되는 Node다. 한동안 아동 교육용으로 유행했던 책+AR앱에 사용된 기능이라 생각하면 된다.

CloudAnchor와 다른 점은 CloudAnchor는 위치 기반으로 특정 위치에 존재하여 AR로 볼 수 있다면 AugmentedImageNode는 위치가 아닌 카메라에 포착된 이미지가 설정된 이미지인가 아닌가를 판단하여 렌더링이 되는 Node이다.

RenderableNode

소스코드 내의 설명으로는 Node와 똑같다. ModelNode가 상속받는 클래스로 직접적으로 쓰는 예시를 본 적 없다.
직접적으로 Renderable을 생성하고 관리하기 보단 Renderable의 관리와 Factory로 기능하는 RenderableManager 클래스로 생성한다. RenderableManager 클래스의 기본적인 사용법은 아래와 같다.

val entity = EntityManager.get().create()
 
  RenderableManager.Builder(1)
          .boundingBox(Box(0.0f, 0.0f, 0.0f, 9000.0f, 9000.0f, 9000.0f))
          .geometry(0, RenderableManager.PrimitiveType.TRIANGLES, vb, ib)
          .material(0, material)
          .build(engine, entity)
 
  scene.addEntity(renderable)
profile
안드로이드 네이티브 앱 개발자를 지망하는 대학생입니다.

0개의 댓글