상세 컨텐츠

본문 제목

glTF - 최소 glTF 파일 (Minimal Gltf File)

멀티미디어/이미지(Image)

by cepiloth 2018. 11. 19. 16:17

본문

728x90
반응형



  • 다음은 최소한이지만 완전한 gltf asset 이며, 하나의 색인 된 삼각형을 포함 합니다. gltf 파일에 복사하여 붙여 넣을 수 있으며 모든 glTF 기반 응용 프로그램은 로드하고 렌더링 할 수 있어야 합니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{
  "scenes" : [
    {
      "nodes" : [ ]
    }
  ],
  
  "nodes" : [
    {
      "mesh" : 0
    }
  ],
  
  "meshes" : [
    {
      "primitives" : [ {
        "attributes" : {
          "POSITION" : 1
        },
        "indices" : 0
      } ]
    }
  ],
 
  "buffers" : [
    {
      "uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
      "byteLength" : 44
    }
  ],
  "bufferViews" : [
    {
      "buffer" : 0,
      "byteOffset" : 0,
      "byteLength" : 6,
      "target" : 34963
    },
    {
      "buffer" : 0,
      "byteOffset" : 8,
      "byteLength" : 36,
      "target" : 34962
    }
  ],
  "accessors" : [
    {
      "bufferView" : 0,
      "byteOffset" : 0,
      "componentType" : 5123,
      "count" : 3,
      "type" : "SCALAR",
      "max" : [ ],
      "min" : [ ]
    },
    {
      "bufferView" : 1,
      "byteOffset" : 0,
      "componentType" : 5126,
      "count" : 3,
      "type" : "VEC3",
      "max" : [ 1.01.00.],
      "min" : [ 0.00.00.]
    }
  ],
  
  "asset" : {
    "version" : "2.0"
  }
}
cs


장면과 노드의 구조


  • 장면은 gltf 에 저장된 장면 description의 시작점입니다. gtlf JSON 파일을 파싱 할 때 장면 구조체의 순회의 시작은 여기부터 시작 됩니다.

  • 각 장면에는 노드라고 하는 노드객체의 색인되어 있는 배열이 있습니다. 이 노드는 장면 그래프 계층 구조의 루트 노드 입니다.

  • 예제에서는 하나의 장면으로 구성됩니다. 이 예제에서는 인덱스가 0 인 노드 만이 노드를 참조합니다. 이 노드는 인덱스를 0을 갖는 유일한 메쉬를 참조합니다.

1
2
3
4
5
6
7
8
9
10
11
  "scenes" : [
    {
      "nodes" : [ ]
    }
  ],
  
  "nodes" : [
    {
      "mesh" : 0
    }
  ],
cs


메쉬


  • 메쉬는 장면(scene)에서 나타나는 실제 기하 객체로 표현 됩니다. 메쉬는 그 자체는 일반적으로 어떠한 속성도 가지지 않지만, 더 큰 모델을 위한 빌딩 블록 역할을 하는 mesh.primitive 오브젝트의 배열만을 포함합니다. 

  • 각 메쉬 프리미티브에는 메쉬가 구성하는 기하 정보에 대한 description이 포함됩니다. 

  • 이 예제는 단일 메쉬로 구성되어 있으며 단일 mesh.primitive 객체를 가집니다. 메쉬의 primitive 요소에는 속성 배열이 있습니다. 이것들은 메쉬 기하의 꼭지점 속성입니다. 그리고 이 경우에는 오직 위치 속성만 갖으며, 곡지점위 위치를 나타냅니다.

  • 메쉬 primitive는 indices 속성으로 표시되는 인덱스 된 기하를 나타냅니다.
  • 기본적으로 3개의 연속 된 인덱스가 하나의 삼각형의 꼭지점의 인덱스가 되도록 삼각형의 집합을 나타낸다고 가정합니다.

  • 메쉬의 primitive의 실제 기하 정보는 속성과 색인에 의해 주어집니다. 이 둘은 accessor 객체를 참조하며, 이에 대해서는 아래에서 설명합니다.


1
2
3
4
5
6
7
8
9
10
  "meshes" : [
    {
      "primitives" : [ {
        "attributes" : {
          "POSITION" : 1
        },
        "indices" : 0
      } ]
    }
  ],
cs



buffer, bufferView, accessor 의 개념



  • 버퍼, 버퍼뷰 그리고 accessor 객체는 메쉬의 기본요소로 구성된 기하 데이터에 대한 정보를 제공 합니다.

  • 버퍼(buffers)

  • 버퍼는 고유한 의미가 없는 원시의 구조화 되지 않은 데이터 블록으로 정의합니다. 여기에는 데이터가 들어있는 외부 파일을 가리키는 URI 나 JSON 파일에서 직접 바이너리 데이터를 인코딩하는 데이터 URI 가 될 수 있는 URI가 들어 있습니다.

  • 아래 예제 파일에서 두 번째 방법이 사용됩니다. 44 바이트 크기의 단일 버퍼가 있고 이 버퍼의 데이터가 URI로 인코딩 됩니다.

1
2
3
4
5
6
  "buffers" : [
    {
      "uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
      "byteLength" : 44
    }
  ],
cs


  • 이 데이터는 삼각형의 인덱스와, 삼각형의 정점 꼭지점의 위치를 포함 합니다. 그러나 실제로 이 데이터를 메쉬 primitive 기하 데이터로 사용하려면, 이 데이터의 구조에 대한 추가 정보가 필요합니다. 이 구조체에 대한 정보는 bufferview 와 accessor 객체에 인코딩 되어 있습니다.

  • 버퍼뷰(Buffer Views)
  • 버퍼뷰는 전체의 raw 버퍼 데이터의 chunk 또는 slice 로 나타냅니다. 주어진 예제에서는 두 개의 버퍼 뷰가 있습니다. 둘다 동일한 버퍼를 참조합니다. 첫번째 버퍼뷰는 인덱스의 데이터를 포함하는 버퍼 부분을 참조합니다. 전체 버퍼 데이터를 참조하는 byteOffset 이 0 이고, byteLength 가 6 입니다.

  • 두번 째 버퍼뷰는 꼭지점 위치가 포함 된 버퍼 부분을 참조합니다. byteOffset이 8 부터 시작하여 byteLength는 36 입니다. 즉, 전체 버퍼의 끝까지 확장 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
  "bufferViews" : [
    {
      "buffer" : 0,
      "byteOffset" : 0,
      "byteLength" : 6,
      "target" : 34963
    },
    {
      "buffer" : 0,
      "byteOffset" : 8,
      "byteLength" : 36,
      "target" : 34962
    }
  ],
cs


  • Accessors

  • 데이터를 구조화하는 두 번째 단계는 Accessors 객체입니다. 데이터 유형과 레이아웃에 대한 정보를 제공하여 버퍼뷰의 데이터를 해석해야 하는 방법을 정의 합니다.

  • 예제에서는 두개의 accessors 객체가 있습니다.

  • 첫 번째 Accessor 는 기하 데이터의 색인을 나타 냅니다. 이것은 인덱스의 로우 데이터를 포함하느 ㄴ버퍼의 일부인 인덱스를 0을 갖는 bufferView를 참조 합니다. 추가적으로 요소의 수와 유형 및 해당 componentType 을 지정 합니다. 이 경우에 3개의 스칼라 요소가 있으며 그 구성 요소 유형은 부호없는 short 형식을 나타내는 상수로 제공됩니다.

  • 두 번째 accessor 는 정점 위치를 나타 냅니다. 여기에는 버퍼 데이터의 관련 부분에 대한 참조가 bufferView 에서 색인 1을 통해 포함 되며 count, type, component 속성은 3D 벡터의 세 요소가 있으며 각 요소는 float 구성 요소를 포함합니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  "accessors" : [
    {
      "bufferView" : 0,
      "byteOffset" : 0,
      "componentType" : 5123,
      "count" : 3,
      "type" : "SCALAR",
      "max" : [ ],
      "min" : [ ]
    },
    {
      "bufferView" : 1,
      "byteOffset" : 0,
      "componentType" : 5126,
      "count" : 3,
      "type" : "VEC3",
      "max" : [ 1.01.00.],
      "min" : [ 0.00.00.]
    }
  ],
cs


  • 위에서 설명한 것 처럼 mesh.primitive 는 이제 색인을 사용하여 이러한 접근자를 참조 할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
  "meshes" : [
    {
      "primitives" : [ {
        "attributes" : {
          "POSITION" : 1
        },
        "indices" : 0
      } ]
    }
  ],
cs

  • asset description

  • glTF 1.0 에서는 이 속성이 여전히 서택 사항이지만 이후 glTf 버전에서는 JSON 파일에 버전 번호가 포함 된 asset 속성이 있어야 합니다. 아래 예제는 asset 이 glTF 버전 2.0을 준수 한다고 말합니다.


1
2
3
  "asset" : {
    "version" : "2.0"
  }
cs


  • Reference


728x90
반응형

관련글 더보기

댓글 영역