はじめに
glTFは3Dモデルのファイルフォーマットの一つです。
何も考えずに3Dモデルを作っていると、気づかないうちにデータ容量が大変なことになっていることがあるため、データ容量がどのような要素の影響を受けるのか把握したいと思います。
今回検討する要素は下記の5点です。
- 頂点数
- モデルの形状
- シェーディング
- マテリアルの有無
- テクスチャ画像の有無・種類
頂点数
頂点数の異なる3つの球を作成し、それぞれをglTF形式で保存し、データ容量を比較しました。
マテリアル情報はありません。
結果は次のようになりました。
きれいな比例ではないものの、頂点数の増加に伴ってデータ容量も増えました(当たり前)。
データ名 | 頂点数 | glTFデータ容量[KB] | 頂点1個当たりのデータ容量[KB] |
---|---|---|---|
球1 | 12 | 3 | 0.25 |
球2 | 42 | 9 | 0.21 |
球3 | 162 | 33 | 0.20 |
モデルの形状
頂点数が同じで形状の異なる3つの3Dモデル(立方体、球、円柱)を作成し、それぞれをglTF形式で保存し、データ容量を比較しました。
マテリアル情報はありません。
データ容量は立方体<円柱<球となりました。
頂点数は同じでも、面の向き(法線の方向)のばらつきが大きいほどデータ容量は大きくなるのでしょうか。
データ名 | 頂点数 | glTFデータ容量[KB] | 頂点1個当たりのデータ容量[KB] |
---|---|---|---|
立方体 | 42 | 4 | 0.10 |
球 | 42 | 9 | 0.21 |
円柱 | 42 | 6 | 0.14 |
シェーディング
同じ頂点数の球で、シェーディングの方法(フラット、スムーズ)のみ異なる2つの3Dモデルを作成し、それぞれをglTF形式で保存し、データ容量を比較しました。
マテリアル情報はありません。
データ容量は、スムーズシェードがフラットシェードの約半分になりました。
フラットシェードは面それぞれに法線情報が必要なのに対して、スムーズシェードはより効率的な方法で法線情報を保持している、ということでしょうか。
データ名 | 頂点数 | glTFデータ容量[KB] | 頂点1個当たりのデータ容量[KB] |
---|---|---|---|
フラットシェード | 42 | 9 | 0.21 |
スムーズシェード | 42 | 4 | 0.10 |
マテリアル
頂点数が同じ球で、マテリアルのみ異なる3つの3Dモデルを作成し、それぞれをglTF形式で保存し、データ容量を比較しました。
データ容量は、マテリアル1種類につき約1KB増加しました。
データ名 | 頂点数 | glTFデータ容量[KB] |
---|---|---|
マテリアルなし | 42 | 9 |
マテリアル1種類 | 42 | 10 |
マテリアル2種類 | 42 | 11 |
テクスチャ画像の有無・種類
頂点数が同じ球で、テクスチャなし、カラーマップのみ、ラフネスマップのみ、ノーマルマップのみの4つの3Dモデルを作成し、それぞれをglTF形式で保存し、データ容量を比較しました。
カラーマップのみ、ノーマルマップのみの場合、単純に画像データの容量が3Dモデルの容量に加算されるようです。
ラフネスマップは、画像データと3Dモデルの容量の他に300KBほどデータ容量が増えました。
データ名 | 頂点数 | テクスチャデータ容量[KB] | glTFデータ容量[KB] |
---|---|---|---|
テクスチャなし | 42 | 0 | 9 |
カラーマップ | 42 | 645 | 654 |
ラフネスマップ | 42 | 933 | 1245 |
ノーマルマップ | 42 | 911 | 920 |
まとめ
ざっくりまとめると、
glTFデータ容量[KB] = 約0.2[KB]×頂点数 + テクスチャ画像データ容量[KB]
スムーズシェードをうまく使えば、データ容量がかなり節約できそうです。