3D 공간 콘텐츠 표시
AR을 사용할 때는 일반적으로 가상 물체를 표시해야 합니다. 간단한 테스트 sample에서는 단순한 기하체를 사용할 수 있지만, 소비자를 대상으로 개발할 때는 일반적으로 고정밀 3D 모델과 애니메이션을 표시해야 하며, 모델 노드를 클릭할 때 이벤트와 상호작용이 트리거될 수 있습니다.
모델
현재 비교적 인기 있는 3D 모델은 일반적으로 triangle mesh로 구성됩니다. 모델을 사실적으로 보이게 하려면 각 삼각형에 material을 부여해야 합니다. Material은 보통 어떤 lighting model을 구현하며, 그 내용은 texture와 lighting model 파라미터로 구성됩니다.
- Texture는 삼각형의 각 점의 기본 색상을 결정합니다. 모든 삼각형의 texture는 하나 이상의 diffuse texture에 배치됩니다. 일부 고급 사용에서는 texture를 사용해 각 점의 법선 방향이나 기타 파라미터를 나타낼 수도 있습니다.
- Lighting model은 물체가 빛과 어떻게 상호작용하는지를 정의합니다. 흔한 예로 PBR이 있습니다. Lighting model은 일반적으로 shader로 구현됩니다. PBR lighting model의 파라미터에는 색상, metallic, roughness 등이 있습니다.
애플리케이션 개발에서는 일반적으로 OpenGL / Metal / Vulkan / Direct3D 위에서 3D 모델을 직접 로드하지 않고, 3D engine을 사용하여 로드합니다. 3D engine은 오래되고 비교적 읽기 쉬운 obj / mtl 형식, 그리고 현재 인기 있는 glTF 형식 같은 특정 3D 모델 형식을 요구합니다.
애니메이션
모델을 움직이려면 skeletal animation이 필요합니다. Bones는 3D 모델에서 rigid-body 운동 시 일관된 움직임을 유지하는 큰 모델 노드를 의미합니다.
애니메이션을 표시하려면 runtime에 모델 노드의 위치와 pose(transformation matrix)를 지속적으로 업데이트해야 합니다. 대부분의 3D engine은 애니메이션 기능을 제공합니다. 애니메이션 제작 소프트웨어에서 애니메이션을 편집하고 3D engine이 지원하는 형식으로 내보내면 3D engine에서 사용할 수 있습니다. 위의 glTF 형식도 애니메이션 기능을 포함합니다.
상호작용
사용자가 모델 노드를 클릭할 때 이벤트와 상호작용을 트리거해야 하는 경우가 있습니다. 일반적으로 skeletal animation의 bones에 이름을 지정하고 collision detection 또는 ray detection을 사용하여 클릭 시 이벤트를 트리거하고 클릭된 bone 이름을 반환합니다. 이벤트 처리는 script 또는 애플리케이션 코드로 수행할 수 있습니다.
참고
3D engine 사용 경험이 부족하다면 Unity를 사용하여 애플리케이션을 개발하는 것을 강력히 권장합니다. EasyAR Sense Unity Plugin은 Unity를 잘 지원합니다. 다른 3D engine을 사용하면 지원과 사용 가능한 resource가 적은 문제에 직면할 수 있습니다.