Unityでシーンの容量を削減する方法 (アニメーション編)

本記事は、シーン容量削減シリーズアニメーション編になります。

他記事は下記のリンクから確認できます。

シーン容量削減シリーズ

アニメーションの設定を見直す

アニメーション毎の設定を見直しましょう。

FBXファイルを選択し、 Inspector ウィンドウの Animation タブをクリックすると、以下のような設定項目が表示されます。

Animation タブ

Animation タブ

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

Anim. Compression

Anim. Compression

Anim. Compression

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

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

圧縮タイプ 品質 容量 機能
Off 圧縮しません。
Keyframe Reduction キーフレームの数を減らします。
何を基準に減らすかは、後述の Rotation Error , Position Error , Scale Error によって決まります。
Optimal

アニメーションが短い場合やノイズが多い場合は、 dense format で圧縮

そうでない場合は、キーフレーム削減で圧縮

 

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

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

Rotation Error

Rotation Error

Rotation Error

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

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

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

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

Rotation Error : 0°  / 容量 : 249KB (100%)

Rotation Error : 0°  / 容量 : 249KB (100%)

Rotation Error : 0°  / 容量 : 249KB (100%)

Rotation Error : 0.5°  / 容量 : 119KB (47.8%)

Rotation Error : 0.5°  / 容量 : 119KB (47.8%)

Rotation Error : 0.5°  / 容量 : 119KB (47.8%)

Rotation Error : 10°  / 容量 : 69KB (27.7%)

Rotation Error : 10°  / 容量 : 69KB (27.7%)

Rotation Error : 10°  / 容量 : 69KB (27.7%)

Rotation Error : 100°  / 容量 : 14KB (5.6%)

Rotation Error : 100°  / 容量 : 14KB (5.6%)

Rotation Error : 100°  / 容量 : 14KB (5.6%)

図転載: Animation Compression in Unity

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

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

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

Position Error

Position Error

Position Error

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

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

単位はパーセント(%)です。

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

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

Position Error アニメーションカーブ例
オリジナル( 0% )
オリジナル( 0% )

オリジナル( 0% )

10%
10%

10%

  図転載: Unity Documentation / Animation タブ
 

オリジナルのアニメーションカーブだと2つの山がありますが、圧縮後のカーブだと右の山がなくなっています。

これは右の山のキーフレームが Position Error 10%を下回っていたので削減された結果になります。

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

Scale Error

Scale Error

Scale Error

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

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

単位はパーセント(%)です。

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

これでシーン容量削減シリーズ(アニメーション編)は終了です。

同シリーズの他記事は下記のリンクから確認できます。

Special thanks:segur(せぎゅ)