Table of Contents

3D 공간 콘텐츠 표시

AR을 사용할 때는 가상 물체를 표시해야 하는 경우가 많습니다. 간단한 테스트 예제에서는 단순한 기하 도형을 사용할 수 있지만, 소비자를 대상으로 개발할 때는 일반적으로 고정밀 3D 모델과 애니메이션을 표시해야 하며, 모델 노드를 클릭할 때 이벤트와 상호작용을 트리거할 수 있습니다.

모델

현재 널리 사용되는 3D 모델은 일반적으로 삼각형 메시(triangle mesh)로 구성됩니다. 모델을 실제처럼 보이게 하려면 각 삼각형에 재질(material)을 부여해야 합니다. 재질은 일반적으로 특정 조명 모델을 구현하며, 그 내용은 텍스처와 조명 모델 파라미터로 구성됩니다.

  • 텍스처(texture)는 삼각형 내 각 점의 기본 색상을 결정하며, 모든 삼각형의 텍스처는 하나 이상의 디퓨즈 맵(diffuse map)에 배치됩니다. 고급 사용법에서는 텍스처를 사용하여 각 점의 법선 방향이나 기타 파라미터를 나타낼 수도 있습니다.
  • 조명 모델(lighting model)은 물체가 빛과 어떻게 상호작용하는지 정의하며, 일반적으로 PBR이 사용됩니다. 조명 모델은 일반적으로 셰이더(shader)를 사용하여 구현됩니다. PBR 조명 모델의 파라미터로는 색상, 금속성(metallic), 거칠기(roughness) 등이 있습니다.

애플리케이션 개발에서는 일반적으로 OpenGL / Metal / Vulkan / Direct3D에서 직접 3D 모델을 로드하지 않고, 3D 엔진을 사용하여 로드합니다. 3D 엔진은 역사가 오래되고 비교적 가독성이 높은 obj/mtl 형식이나 현재 널리 사용되는 glTF 형식과 같은 특정 3D 모델 형식을 요구합니다.

애니메이션

모델을 움직이게 하려면 스켈레탈 애니메이션(skeletal animation)을 사용해야 합니다. 스켈레톤(뼈대)은 3D 모델에서 강체 운동(rigid body motion) 시 함께 움직이는 큰 모델 노드 그룹을 의미합니다.

애니메이션을 표시하려면 런타임에 모델 노드의 위치와 자세(변환 행렬)를 지속적으로 업데이트해야 합니다. 대부분의 3D 엔진은 애니메이션 기능을 제공하며, 애니메이션 제작 소프트웨어에서 애니메이션을 편집한 후 3D 엔진이 지원하는 형식으로 내보내기만 하면 3D 엔진에서 사용할 수 있습니다. 위에서 언급한 glTF 형식도 애니메이션 기능을 포함합니다.

상호작용

사용자가 모델 노드를 클릭할 때 이벤트와 상호작용을 트리거해야 하는 경우가 있습니다. 일반적으로 스켈레탈 애니메이션의 본(bone)에 이름을 부여하고, 충돌 감지(collision detection) 또는 레이캐스팅(ray casting)을 사용하여 클릭 시 이벤트를 트리거하고, 클릭된 본의 이름을 반환합니다. 이벤트 처리는 스크립트나 애플리케이션 코드를 사용하여 수행할 수 있습니다.

참고

3D 엔진 사용 경험이 부족하시다면, 애플리케이션 개발에 Unity 사용을 강력히 권장합니다. EasyAR Sense Unity Plugin은 Unity를 잘 지원합니다. 다른 3D 엔진을 사용하시면 지원 및 사용 가능한 리소스가 부족할 수 있습니다.