glTF 의 기본 구조
- GlTF 의 핵샘은 JSON 파일 입니다. 이 파일은 3D 장면의(scene)의 전체 내용을 기술 합니다.
- 장면 그래프를 정의하는 노드 계층의 자체에 대한 설명으로 구성 됩니다. 장면에 나타나는 3D 객체는 노드에 연결된 메쉬를 사용 하여 나타 냅니다.
- 재질(Materials)은 객체의 모양을 나타 냅니다.
- 애니메이션(Animations)은 시간이 지남에 따라 3D 오브젝트가 어떻게 변형( 예를 들어, 회전 변환) 되는지를 기술 합니다.
- 스킨(skins)은 스켈레톤 포즈를 기반으로 오브젝트의 기하 정보가 어떻게 변형되는지 나타 냅니다.
- 카메라(camreas)는 렌더러의 뷰(시점)의 구성을 기술 합니다.
JSON 구조
- 장면 객체는 JSON 파일에 있는 배열에 저장 됩니다. 배열의 각 객체는 색인을 사용하여 접근 할 수 있습니다.
| "meshes" : [ { ... } { ... } ... ], | cs |
- 이 색인은 객체 간의 관계를 정의 하는데 사용 됩니다. 아래 예제는 다중 메쉬를 정의하고, 노드는 메쉬 인덱스를 사용하여 이들 메쉬 중 하나를 참조하여 메쉬 노드에 연결 연결 되어야 하는 것을 나타 냅니다.
| "nodes": [ { "mesh": 0, ... }, { "mesh": 5, ... }, ... } | cs |
- 아래 이미지는 glTF asset 의 JSON 부분의 최상위 요소에 대한 개요를 제시 합니다.
- 장면(scene) 노드는 glTF 에 저장되는 장면 설명의 시작점입니다. 장면 그래프를 정의하는 노드를 참조 합니다.
- 노드(node)는 장면 그래프 계층 구조에서 하나의 노드 입니다. 변환(예 : 회전)을 포함 할 수 있으며 추가(하위) 노드를 참조 할 수 있습니다. 추가적으로 노드에 부착 된 메쉬(mesh) 또는 카메라(camera) 인스턴스 또는 메쉬 변형을 설명하는 스킨(skin)을 참조 할수 있습니다.
- 카메라(camera)는 장면 렌더링을 위한 뷰의 구성으로 정의 되어 있습니다.
- 메쉬(mesh)는 장면에 나타나는 기하 개체를 기술 합니다. 메쉬는 실제 기하 정보에 접근 하는데 사용 되며 accessor 객체와 객체가 렌더링 될 때 객체의 모양을 정의하는 재질(materials) 객체를 참조합니다.
- 스킨(skin) 은 정점(vertex) 스키닝에 필요한 매게 변수를 정의하여 가상 캐릭터의 자세를 기반으로 메쉬를 변형 할 수 있습니다. 이러한 매개 변수의 값은 accesor 에서 가져 옵니다.
- 애니메이션(animation)은 시간에 따라 특정 노드의 변환이 어떻게 되는지를 기술 합니다.
- accessor는 임의 데이터의 추상 소스로 사용 됩니다. 메쉬, 스킨, 애니메이션에 사용 되며 기하 정보, 스키닝 매개 변수 및 시간 종속 애니메이션 값을 제공합니다. 실제 이진 데이터를 포함하는 버퍼의 일부인 bufferview 에서 참조 됩니다.
- 재질(material)에는 객체의 모양을 정의하는 매개 변수가 포함되어 있습니다. 일반 적으로 렌더링 된 지오메트리에 적용 될 텍스처 개체를 나타냅니다.
- 텍스처(texture)는 샘플러와 이미지로 정의됩니다. 샘플러는 텍스처 이미지를 오브젝트에 배치하는 방법을 정의합니다.
외부 데이터 참조
- 3D 개체의 텍스처와 기하 정보와 텍스처와 같은 바이너리 데이터는 일반적으로 JSON 파일에 포함되어 있지 않다. 대신 전용 파일에 저장되며 JSON 부분에는 이러한 파일에 대한 링크만 포함 된다. 이를 통해 바이너리 데이터가 매우 작은 형태로 저장할 수 있으며 웹을 통해 효율적으로 전송 할 수 있다. 또한 데이터는 디코딩 또는 전처리 할 필요없이 렌더러에서 직접 사용할 수 있는 형식으로 저장할 수 있습니다.
외부 데이터 읽기 및 관리
- glTF asset 읽기 및 처리는 JSON 구조를 파싱하는 것으로 시작 됩니다. 구조체를 파싱 된 후에 버퍼와 이미지 객체는 최상위 버퍼와 이미지 배열에서 각각 사용할 수 있습니다.
- 이러한 각 객체는 이진 데이터 블록을 나타낼수 있습니다. 추가 처리를 위해 이 데이터는 메모리로 읽어 진다. 일반적으로 데이터는 배열에 저장되어 해당 버퍼 또는 속한 이미지 객체를 참조하는데 사용되는 것과 동일한 색인을 사용하여 찾을 수 있다.
버퍼의 바이너리 데이터
- 버퍼에는 원시 이진 버퍼 데이터가 들어있는 파일을 가리키는 URI가 포함 됩니다.
| "buffer01": { "byteLength": 12352, "type": "arraybuffer", "uri": "buffer01.bin" } | cs |
- 이 바이너리 데이터는 고유한 의미 또는 구조 없이 버퍼의 URI에서 읽은 메모리의 가공되지 않은 블록 입니다.
- 버퍼, 버퍼뷰, 및 accessors 섹션은 이 가공되지 않은 데이터가 데이터 레이아웃 및 데이터 유형에 대한 정보를 어떻게 확장되는지 보여줍니다.
- 이 정보를 사용하여 데이터의 한 부분을, 예를 들어 애니메이션 데이터로 해석 될 수 있고 다른 부분은 기하 데이터로 해석 될 수 있습니다.
- 바이너리 형식으로 데이터를 저장하면 웹에서 JSON 형식보다 훨씬 효율적으로 전송할 수 있으며 이진 데이터를 디코딩하거나 사전 처리하지 않고도 렌더러에 직접 전달할 수 있습니다.
images 의 이미지 데이터
- images는 렌더링 된 객체의 텍스처로 사용할 수 있는 외부 이미지 파일을 참조 할 수 있습니다.
| "image01": { "uri": "image01.png" } | cs |
- 참조는 대게 PNG 또는 JPG 파일을 가리키는 URI로 제공됩니다. 이러한 형식은 파일 크기를 크게 줄여 웹에서 효율적으로 전송할 수 있습니다.
- 어떤 경우에는 이미지 객체가 외부 파일을 참조하지 않고 버퍼에 저장된 데이터를 참조 할 수 있습니다.
데이터 URI 의 이진 데이터
- 일반적으로 버퍼 및 이미지 객체에 포함된 URI는 실제 데이터가 들어있는 파일을 가리 킵니다. 대안으로, 데이터는 데이터 URI를 사용하여 바이너리 형식으로 JSON 에 임베드 될 수 있습니다.
https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_002_BasicGltfStructure.md
댓글 영역