.GLB オプション番号
GLB は、GL Transmission Format (glTF) で保存された 3D モデルのバイナリ ファイル形式表現です。バイナリ形式のノード階層、カメラ、マテリアル、アニメーション、メッシュなどの 3D モデルに関する情報。このバイナリ形式は、glTF アセット (JSON、.bin、および画像) をバイナリ BLOB に格納します。また、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 コンテンツとバイナリ データを含む 1 つ以上のチャンク。
GLB ヘッダー
GLB ファイル形式のヘッダーは、次の 3 つの 4 バイト エントリで構成されます。
- uint32 マジック - マジックは 0x46546C67 に等しい。これは ASCII 文字列の glTF であり、データをバイナリ glTF として識別するために使用できます。
- uint32 バージョン - Binary glTF コンテナー形式のバージョンを示します
- uin32 の長さ - ヘッダーとバイト単位のすべてのチャンクを含む Binary glTF の全長
チャンク
GLB ファイルの各チャンクには、次の構造があります。
uint32 | uint32 | ubyte[] |
---|---|---|
chunkLength | chunkType | chunkData |
chunkLength
- チャンクデータの長さ (バイト単位)chunkType
- チャンクのタイプを示しますchunkData
- チャンクのバイナリ ペイロード
チャンクの種類は次のとおりです。
# | チャンク タイプ | ASCII | 説明 | オカレンス |
---|---|---|---|---|
1. | 0x4E4F534A | JSON | 構造化された JSON コンテンツ | 1 |
2. | 0x004E4942 | BIN | バイナリバッファ | 0または1 |
各チャンクの開始と終了は 4 バイト境界に揃える必要があり、この目的のためにパディングを使用する必要があります。
構造化された JSON コンテンツ
これは Binary glTF アセットの最初のチャンクである必要があり、実装が後続のチャンクからリソースを段階的に取得できるようにします。これにより、メッシュの最も粗い LOD など、バイナリ glTF アセットから選択したリソースのサブセットのみを読み取る機能も提供されます。アラインメント要件を満たすために、このチャンクは末尾のスペース文字 (0x20) でパディングする必要があります。
バイナリバッファ
このチャンクには、ジオメトリ、アニメーション キー フレーム、スキン、および画像のバイナリ ペイロードが含まれています。これは、Binary glTF アセットの 2 番目のチャンクである必要があり、配置要件を満たすために、末尾にゼロ (0x00) を埋め込む必要があります。