.GLB 파일이란?
GLB는 GL 전송 형식(glTF)으로 저장된 3D 모델의 이진 파일 형식 표현입니다. 노드 계층 구조, 카메라, 재료, 애니메이션 및 메쉬와 같은 3D 모델에 대한 정보를 바이너리 형식으로 제공합니다. 이 바이너리 형식은 바이너리 blob에 glTF 자산(JSON, .bin 및 이미지)을 저장합니다. 또한 glTF의 경우에 발생하는 파일 크기 증가 문제를 방지합니다. GLB 파일 형식을 사용하면 파일 크기가 작고, 로딩 속도가 빠르며, 완전한 3D 장면 표현이 가능하고 추가 개발을 위한 확장성이 있습니다. 형식은 MIME 유형으로 model/gltf-binary를 사용합니다.
GLB 파일 형식 - 추가 정보
glTF에서 사용하는 콘텐츠 전달 방법은 base-64로 인코딩된 이진 데이터를 디코딩하기 위해 추가 처리를 수행하고 파일 크기를 33%까지 늘립니다. GLB 파일 형식의 형성에 기여한 이러한 전달 방법은 다음과 같습니다.
- glTF JSON은 외부 바이너리 데이터(지오메트리, 키 프레임, 스킨) 및 이미지를 가리킵니다.
- glTF JSON은 base64로 인코딩된 바이너리 데이터와 데이터 URI를 사용하여 인라인 이미지를 포함합니다.
컨테이너 형식인 GLB는 glTF로 인해 발생하는 문제를 방지하기 위해 바이너리 blob에서 glTF 자산을 표현하기 위한 바이너리 파일 형식으로 도입되었습니다. GLB 파일 형식 사양은 응용 프로그램 개발을 위한 동일한 판독기/작성기 구현에 참조되어야 합니다. .
GLB 파일 구조
GLB 파일 형식은 리틀 엔디안을 기반으로 하며 그 구조는 다음을 포함하고 있음을 보여줍니다.
- 헤더라는 제목의 12바이트 프리앰블.
- JSON 콘텐츠 및 바이너리 데이터를 포함하는 하나 이상의 청크.
GLB 헤더
GLB 파일 형식 헤더는 세 개의 4바이트 항목으로 구성됩니다.
- uint32 마법 - 마법은 0x46546C67과 같습니다. ASCII 문자열 glTF이며 데이터를 바이너리 glTF로 식별하는 데 사용할 수 있습니다.
- uint32 버전 - 바이너리 glTF 컨테이너 형식의 버전을 나타냅니다.
- uin32 길이 - 헤더와 모든 청크(바이트)를 포함한 바이너리 glTF의 총 길이
청크
GLB 파일의 각 청크 구조는 다음과 같습니다.
uint32 | uint32 | ubyte[] |
---|---|---|
chunkLength | chunkType | chunkData |
chunkLength
- 바이트 단위의 chunkData 길이chunkType
- 청크의 유형을 나타냅니다.chunkData
- 청크의 바이너리 페이로드
여기서 청크 유형은 다음과 같습니다.
# | 청크 유형 | ASCII | 설명 | 발생 |
---|---|---|---|---|
1. | 0x4E4F534A | JSON | 구조화된 JSON 콘텐츠 | 1 |
2. | 0x004E4942 | BIN | 이진 버퍼 | 0 또는 1 |
각 청크의 시작과 끝은 4바이트 경계에 맞춰야 하며 이를 위해 패딩을 사용해야 합니다.
구조화된 JSON 콘텐츠
이것은 Binary glTF 자산의 첫 번째 청크여야 하며 구현이 후속 청크에서 리소스를 점진적으로 검색할 수 있도록 합니다. 이것은 또한 메시의 가장 거친 LOD와 같은 바이너리 glTF 자산에서 리소스의 선택된 하위 집합만 읽을 수 있는 기능을 제공합니다. 정렬 요구 사항을 충족하려면 이 청크를 후행 공백 문자(0x20)로 채워야 합니다.
바이너리 버퍼
이 청크에는 지오메트리, 애니메이션 키 프레임, 스킨 및 이미지에 대한 바이너리 페이로드가 포함되어 있습니다. Binary glTF 자산의 두 번째 청크여야 하며 정렬 요구 사항을 충족하기 위해 후행 0(0x00)으로 채워야 합니다.