gltfpackでGLBのポリゴンを削減する

三角形の保持率は、元の三角形数のうち残したい割合を指定する設定です。誤差の上限やメッシュの制約により、結果が目標を上回る場合があります。この設定が影響するのはジオメトリです。テクスチャの寸法とエンコードは別の設定で制御します。

無理のない目標から始める

元のモデルをアップロードし、テクスチャは変えず、三角形の目標保持率を50%にします。簡略化の誤差は初期値の1%に保ちます。さらに下げる前に、曲線の輪郭、薄い部分、穴を比べてください。複数のメッシュがあるモデルでは、総数だけでなく各部品を確認します。

gltfpack -i input.glb -o output.glb -si 0.5 -kn -km -ke

目標に届かない理由

誤差上限は許容する簡略化誤差を制限します。厳しい上限では早い段階で削減が止まる場合があります。開いた境界、属性の継ぎ目、小さなメッシュ部品の構造によっても、安全に簡略化できる箇所が少なくなります。サイトは実測結果と考えられる原因を表示しますが、エンジンは停止理由を1つに特定しません。

別々の部品の開いた縁を合わせておきたい場合は、境界頂点を固定してください。隙間を防ぐ助けになりますが、三角形が多く残る場合があります。出力後は部品を組み合わせて確認しましょう。境界の固定は、すべての見た目の継ぎ目が変わらないという保証ではありません。

波形サンプルの実測結果

簡略化設定出力の三角形数
元のメッシュ8,192
目標50%、初期の誤差上限4,095
目標10%、誤差ゼロ、境界固定8,192
目標10%、積極的な簡略化812

同じCC0の元サンプルを、ネイティブgltfpack 1.3で処理しました。三角形数は各メッシュプリミティブを1回ずつ数えます。結果はモデル次第であり、目標に近い数になっても、残った形状が用途に合うとは限りません。

同じ角度で輪郭を比較

表のファイルをThree.js 0.180.0で、同じカメラ、照明、マテリアルで描画しました。画像を開くと原寸で確認できます。まず外側のふくらみと内側の穴を見てください。三角形数だけで判断しないでください。

固定した比較用カメラから見た元の波形モデル
元のモデル:8,192三角形
三角形保持率50パーセントの波形モデル
保持率50%:4,095三角形
積極的な簡略化で保持率10パーセントにした波形モデル
積極的な簡略化・保持率10%:812三角形

積極的な簡略化の10%では、内側の穴の線分が直線的になり、角が鋭くなったことが見て取れます。外側のふくらみも丸みを少し失っています。三角形数の目標を達成していても、小さなサムネイルではこうした変化を見落としがちです。

このサンプルにはスキニングもアニメーションもありません。1つの視点だけでは動きの問題、隠れた面、すべての陰影の変化を確認できません。三角形数の少ない結果を採用する前に、自分のモデルを回転させ、実際の表示サイズで確認してください。

積極的な簡略化は比較してから使う

積極的な簡略化は指定数を優先し、誤差上限を無視します。有効な間、画面の誤差欄は無効になります。コピーで試し、輪郭と表面の陰影を確認してください。難しいモデルの品質を保ったまま簡単に削減できる機能ではありません。

gltfpack -i input.glb -o output.glb -si 0.1 -sa -kn -km -ke

三角形を減らしても容量がほとんど変わらない場合 →

エンジンの資料: gltfpack

最適化ツールを開く ↗