LoginSignup
19
17

Unityシーン容量削減勉強会 第4回 ~アニメーション編~

Last updated at Posted at 2023-06-08

Unityシーン容量削減勉強会 第4回 ~アニメーション編~

スペックの高くない視聴端末でも快適に動作するように、Unityシーンの容量を削減することは重要です!
テクスチャとモデルの次に容量が大きくなりがちなのは、アニメーションです。
こちらも軽量化できるとこはしていきましょう!

本記事は、シーン容量削減勉強会の第4回の資料ですが、過去の記事を読んでいなくても問題ありません!
興味があれば、読んでいただけると嬉しいです!

Unityシーン容量削減勉強会シリーズ

アニメーションの設定を見直そう!

アニメーション毎の設定を見直しましょう!
FBXファイルを選択し、 Inspector ウィンドウの Animation タブをクリックすると、以下のような設定項目が表示されます。

image.png

今回はこの中で、容量削減に効果がありそうな項目を紹介します。

Anim. Compression

image.png

Anim. Compression は、アニメーションの圧縮レベルの設定です。

以下の選択肢があります。

圧縮タイプ 品質 容量 機能
Off 圧縮しません。
Keyframe Reduction キーフレームの数を減らします。
何を基準に減らすかは、後述の Rotation Error , Position Error , Scale Error によって決まります。
Optimal 具体的なアルゴリズムは公開されていませんが、 こちらの記事 によると、以下の2つの処理を組み合わせているそうです。
  • アニメーションが短い場合やノイズが多い場合は、 dense format で圧縮
  • そうでない場合は、キーフレーム削減で圧縮
キーフレームは、後述の Rotation Error , Position Error , Scale Error にしたがって減らします。
dense format が何なのかは情報が見つかりませんでしたが、おそらく数値の量子化(浮動小数点数をより少ない精度の数値に変換すること)やデータのエンコーディング(特定のパターンを利用してデータをより効率的に表現すること)を駆使して、データを圧縮した形式だと予想します。

Off はかなり容量が大きくなるので、強いこだわりがなければ選ばない方がよいです。
(オリジナルのアニメーションファイルに徹底した軽量化をすでに実施しているのであれば、 Off を選びましょう。)

Keyframe Reduction よりも Optimal の方が新しいアルゴリズムであり、容量が小さくなりやすいらしいので、 迷ったら Optimal を選択した方が良さそうです。

Rotation Error

image.png

Anim. CompressionKeyframe Reduction または Optimal のときに、 Rotation Error という項目が設定できます。

Rotation Error では、アニメーション圧縮時に許容される 回転の誤差の上限 を設定できます。
単位は度数(°)です。

つまり、デフォルトの 0.5 は、 最大0.5°まで回転の誤差を許容する という意味になります。

以下が圧縮結果の例です。

Rotation Error 容量 描画例
オリジナル
249kB
100.0%
unity-animation-compression-off.gif
0.5° 119kB
47.8%
unity-animation-compression-0.5.gif
10° 69kB
27.7%
unity-animation-compression-10.gif
100° 14kB
5.6%
unity-animation-compression-100.gif
図転載: Animation Compression in Unity

上図の 100° を見ると、右足が地面にピタっと接地する動きが欠落し、地面にめり込んでいることがわかります。

このように Rotation Error が大きくなるほど、アニメーションの品質が低下しますので、 パフォーマンスと品質のトレードオフ があります。

デフォルトの 0.5° は、どこが劣化したのかわからないほど高品質ですが、容量は半分ほど削減できていますので、 迷ったら 0.5° で良い かと思います。

Position Error

image.png

Anim. CompressionKeyframe Reduction または Optimal のときに、 Position Error という項目が設定できます。

Position Error では、アニメーション圧縮時に許容される 位置の誤差の上限 を設定できます。
単位はパーセント(%)です。

つまり、デフォルトの 0.5 は、 最大0.5%まで位置の誤差を許容する という意味になります。

以下が圧縮結果の例です。

Position Error アニメーションカーブ例
オリジナル
0%
image.png
10% image.png
図転載: Unity Documentation / Animation タブ

オリジナルのアニメーションカーブだと2つの山がありますが、圧縮後のカーブだと右の山がなくなっています。
これは右の山のキーフレームが Position Error 10%を下回っていたので削減された結果になります。

このように、 Position Error を大きくすると品質が著しく下がってしまうことがあるので、注意が必要です!

Scale Error

image.png

Anim. CompressionKeyframe Reduction または Optimal のときに、 Scale Error という項目が設定できます。

Scale Error では、アニメーション圧縮時に許容される スケールの誤差の上限 を設定できます。
単位はパーセント(%)です。

つまり、デフォルトの 0.5 は、 最大0.5%までスケールの誤差を許容する という意味になります。

さいごに

本記事は、以下のページを参考にさせていただきました。ありがとうございました。

これで、Unityシーン容量削減勉強会は終了です!

ここまですべて実践いただいた方!
もうUnityの容量削減、怖くありませんよね!

みなさまのお役に立てたなら幸いです!

これも何かのご縁ですので、 Twitter などフォローしていただけるととても嬉しいです!
(普段は、VR・ARに関する発信が多めですが、それでも構わなければ!)

以上、おつかれさまでした!

19
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
17