Unityシーン容量削減勉強会 第4回 ~アニメーション編~
スペックの高くない視聴端末でも快適に動作するように、Unityシーンの容量を削減することは重要です!
テクスチャとモデルの次に容量が大きくなりがちなのは、アニメーションです。
こちらも軽量化できるとこはしていきましょう!
本記事は、シーン容量削減勉強会の第4回の資料ですが、過去の記事を読んでいなくても問題ありません!
興味があれば、読んでいただけると嬉しいです!
Unityシーン容量削減勉強会シリーズ
- Unityシーン容量削減勉強会 第1回 ~容量順でソートする編~
- Unityシーン容量削減勉強会 第2回 ~テクスチャ編~
- Unityシーン容量削減勉強会 第3回 ~モデル編~
- Unityシーン容量削減勉強会 第4回 ~アニメーション編~ ← 本記事
アニメーションの設定を見直そう!
アニメーション毎の設定を見直しましょう!
FBXファイルを選択し、 Inspector
ウィンドウの Animation
タブをクリックすると、以下のような設定項目が表示されます。
今回はこの中で、容量削減に効果がありそうな項目を紹介します。
Anim. Compression
Anim. Compression
は、アニメーションの圧縮レベルの設定です。
以下の選択肢があります。
圧縮タイプ | 品質 | 容量 | 機能 |
---|---|---|---|
Off |
高 | 大 | 圧縮しません。 |
Keyframe Reduction |
中 | 中 | キーフレームの数を減らします。 何を基準に減らすかは、後述の Rotation Error , Position Error , Scale Error によって決まります。 |
Optimal |
中 | 小 | 具体的なアルゴリズムは公開されていませんが、 こちらの記事 によると、以下の2つの処理を組み合わせているそうです。
Rotation Error , Position Error , Scale Error にしたがって減らします。dense format が何なのかは情報が見つかりませんでしたが、おそらく数値の量子化(浮動小数点数をより少ない精度の数値に変換すること)やデータのエンコーディング(特定のパターンを利用してデータをより効率的に表現すること)を駆使して、データを圧縮した形式だと予想します。 |
Off
はかなり容量が大きくなるので、強いこだわりがなければ選ばない方がよいです。
(オリジナルのアニメーションファイルに徹底した軽量化をすでに実施しているのであれば、 Off
を選びましょう。)
Keyframe Reduction
よりも Optimal
の方が新しいアルゴリズムであり、容量が小さくなりやすいらしいので、 迷ったら Optimal
を選択した方が良さそうです。
Rotation Error
Anim. Compression
が Keyframe Reduction
または Optimal
のときに、 Rotation Error
という項目が設定できます。
Rotation Error
では、アニメーション圧縮時に許容される 回転の誤差の上限 を設定できます。
単位は度数(°)です。
つまり、デフォルトの 0.5
は、 最大0.5°まで回転の誤差を許容する という意味になります。
以下が圧縮結果の例です。
Rotation Error |
容量 | 描画例 |
---|---|---|
オリジナル ( 0° ) |
249kB 100.0% |
|
0.5° |
119kB 47.8% |
|
10° |
69kB 27.7% |
|
100° |
14kB 5.6% |
|
図転載: Animation Compression in Unity |
上図の 100°
を見ると、右足が地面にピタっと接地する動きが欠落し、地面にめり込んでいることがわかります。
このように Rotation Error
が大きくなるほど、アニメーションの品質が低下しますので、 パフォーマンスと品質のトレードオフ があります。
デフォルトの 0.5°
は、どこが劣化したのかわからないほど高品質ですが、容量は半分ほど削減できていますので、 迷ったら 0.5°
で良い かと思います。
Position Error
Anim. Compression
が Keyframe Reduction
または Optimal
のときに、 Position Error
という項目が設定できます。
Position Error
では、アニメーション圧縮時に許容される 位置の誤差の上限 を設定できます。
単位はパーセント(%)です。
つまり、デフォルトの 0.5
は、 最大0.5%まで位置の誤差を許容する という意味になります。
以下が圧縮結果の例です。
Position Error |
アニメーションカーブ例 |
---|---|
オリジナル ( 0% ) |
|
10% |
|
図転載: Unity Documentation / Animation タブ |
オリジナルのアニメーションカーブだと2つの山がありますが、圧縮後のカーブだと右の山がなくなっています。
これは右の山のキーフレームが Position Error
10%を下回っていたので削減された結果になります。
このように、 Position Error
を大きくすると品質が著しく下がってしまうことがあるので、注意が必要です!
Scale Error
Anim. Compression
が Keyframe Reduction
または Optimal
のときに、 Scale Error
という項目が設定できます。
Scale Error
では、アニメーション圧縮時に許容される スケールの誤差の上限 を設定できます。
単位はパーセント(%)です。
つまり、デフォルトの 0.5
は、 最大0.5%までスケールの誤差を許容する という意味になります。
さいごに
本記事は、以下のページを参考にさせていただきました。ありがとうございました。
- Unity Documentation / Animation タブ
- Unity Documentation / ファイルサイズの削減
- Unity で作ったアプリのサイズを減らす 20 の方法【Unity】【容量削減】
- Animation Compression: Unity 5
- Animation Compression in Unity
これで、Unityシーン容量削減勉強会は終了です!
ここまですべて実践いただいた方!
もうUnityの容量削減、怖くありませんよね!
みなさまのお役に立てたなら幸いです!
これも何かのご縁ですので、 Twitter などフォローしていただけるととても嬉しいです!
(普段は、VR・ARに関する発信が多めですが、それでも構わなければ!)
以上、おつかれさまでした!