GLBのファイルサイズを小さくする方法

設定を1つずつ変えて何度か書き出し、結果を比較してください。三角形数だけではファイルサイズは説明できません。同じメッシュでも、小さなテクスチャが1枚の場合と、大きな画像が複数ある場合があります。まずジオメトリを圧縮し、それでもファイルが大きければテクスチャの設定を試してください。

1. 比較用の基準を保存

元のGLBを残します。三角形の削減もテクスチャ変換もせず「控えめな最適化」を実行し、出力とコマンドを保存します。両方のバイト数と三角形数を記録してください。その後の試行も必ず元データから始めれば、差を変更した設定に結び付けられます。

2. 細部を削る前にジオメトリ圧縮を比較

元のテクスチャのまま「ファイルを小さく」を試してください。三角形の削減を指定せずMeshopt圧縮を有効にします。十分に小さくなり、ビューアーが出力拡張機能に対応していれば、三角形を削る必要がないかもしれません。

波形サンプルファイルサイズ(バイト)三角形数
元のモデル186,7568,192
「控えめな最適化」プリセット119,1208,192
「ファイルを小さく」プリセット39,2488,192

独自のCC0波形サンプルをネイティブgltfpack 1.3で測定しました。テクスチャは16 × 16ピクセルしかないため、主にジオメトリ圧縮の例です。両方の出力で三角形数は変わりませんでしたが、他のすべての性質が保持されたという意味ではありません。

3. テクスチャが容量の主因か確認

2つ目のテストデータは、同じジオメトリに生成した1024 × 1024のPNGを1枚使い、元のサイズは3,061,644バイトです。PNGを変えずにMeshoptを使うと2,914,152バイト、テクスチャ出力だけを品質8のWebPにすると445,632バイトになります。3ファイルとも三角形数は8,192です。

このデータではメッシュ圧縮よりテクスチャ変更の効果がはるかに大きくなりました。原因を切り分ける例であり、どのモデルでも同じ削減率になるわけではありません。写真、法線マップ、フラットなデザインのロゴではエンコード結果が異なります。

テクスチャ圧縮の設定を選ぶ →

4. アプリケーションで使える結果を選ぶ

想定する表示距離でモデルを比較し、代表的な端末で読み込みを試してください。ダウンロード容量が小さくても、GPUメモリの削減や描画の高速化に直結するとは限りません。外観と互換性の要件を満たす範囲で、最も小さい版を残します。

ジオメトリがまだ細かすぎる場合は三角形を削減 →

大きくなった結果の原因を調べる →

エンジンの資料: gltfpack

最適化ツールを開く ↗