Unityローディングモジュール詳細分析——AnimationClip編

前のテクノロジー記事で、UWAはローディングモジュールの[Texture](https://blog.jp.uwa4d.com/2020/02/26/unity%e3%83%ad%e3%83%bc%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab%e8%a9%b3%e7%b4%b0%e5%88%86%e6%9e%90-texture%e7%b7%a8/)、[Mesh](https://blog.jp.uwa4d.com/2021/07/08/unity%e3%83%ad%e3%83%bc%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab%e8%a9%b3%e7%b4%b0%e5%88%86%e6%9e%90-mesh%e7%b7%a8/)、[Shader](https://blog.jp.uwa4d.com/2021/07/16/unity%E3%83%AD%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E8%A9%B3%E7%B4%B0%E5%88%86%E6%9E%90-shader%E7%B7%A8/)などのアセットを分析して紹介しましたが、今日はその続きにAnimationClipローディングに関する事項について話しましょう。

---
###アセットローディングパフォーマンステスト用コード
前の記事で提出したテストコードと同様に、AnimationClipアセットのローディングパフォーマンス分析にもこのテストコードを採用します。各AnimationClipファイルを特定サイズのAssetBundleファイルに作成し、下記のコードを介して異なるデバイスに1つずつローディングを行います。異なるデバイスのアセットローディングパフォーマンスを取得して比較します。
![1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/efc497ed-7611-72b1-e60a-55e9f763a0ec.png)
###テスト環境
エンジンバージョン：Unity5.2バージョン
テストデバイス：グレードの異なる3つのモバイルデバイス（Android：Redmi 2、Redmi Note2、Samsung S6）

---
##AnimationClipアセット
AnimationClipアセットは、プロジェクト実行中に最も頻繁にロードするアセットの1つであり、そのローディング効率は主に自身のローディング量によって決まります。そしてAnimationClipアセットのローディング量を決定する主な原因はその圧縮形式です。現在、UnityエンジンがインポートされたAnimationClipに、Off、Keyframe Reduction、またはOptimalの3つの圧縮形式を提供しています。このうち、Offは「圧縮処理しない」ということを意味します。Keyframe Reductionは「キーフレームを使用して処理する」という意味です。Optimalは「Unityエンジンがアニメーションカーブの特性に応じて最適な圧縮方法（キーフレーム圧縮、またはDense圧縮）を自動的に選択する」ことを意味します。
![2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/d2f3e08c-2da9-b612-f074-b96e8f13a9ec.jpeg)
注：AnimaitonClipカーブの具体的な圧縮方法の説明については、Unity公式マニュアルを確認してください。

---
##テスト：異なる圧縮形式のAnimationClipアセットのローディング効率テスト
3セットのテストケースを作成しました。AnimationClipアセットの数はそれぞれ10、30、50です。同時に、各グループのAnimationClipは圧縮形式に応じて3つのグループに分けられますーーNone Compression、Keyframe ReductionとOptimal。

これらのAnimationClipアセットを3つの異なるグレードのモデルにロードします。偶然性を減らすために、各デバイスでロード操作を10回繰り返し、平均値を最終的なパフォーマンスオーバーヘッドとして使用します。 具体的な試験結果を下表に示します。

###テストグループ1
10個の「NoneCompression」アセット、10個の「KeyframeReduction」アセット、および10個の「Optimal」アセットをAssetBundleファイルにパッケージ化した後、ファイルサイズはそれぞれ409KB、172KB、および92KBになります。
![3-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/5da638c4-0ee2-4811-b00b-2d62d8f89423.png)

###テストグループ2
30個の「NoneCompression」アセット、30個の「KeyframeReduction」アセット、および30個の「Optimal」アセットをAssetBundleファイルにパッケージ化した後、ファイルサイズはそれぞれ1.42MB、514KB、および312KBになります。
![4-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/b465723e-82bc-3933-9e96-f415f96d76c5.png)

###テストグループ3
50個の「NoneCompression」アセット、50個の「KeyframeReduction」アセット、および50個の「Optimal」アセットをAssetBundleファイルにパッケージ化した後、ファイルサイズはそれぞれ2.46MB、858KB、および525KBになります。
![5-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/187722b8-81c7-b65a-ada9-71e65d73ce64.png)

上記のテストを通じて、次のような結論を取得することができます。
>1、Optimal圧縮方法は、ハイエンド、ミドルエンド、またはローエンドデバイスのいずれであっても、確かにアセットのローディング効率を向上できます。
2、ハードウェアデバイスのパフォーマンスが優れているほど、ローディング効率が高くなります。しかし、デバイスの改善により、Keyframe ReductionとOptimalのローディング効率改善がもう明白ではなくなります。
3、Optimal圧縮の方式は、アニメーションの視覚的な品質を低下させる可能性があります。ですから、最後にOptimal圧縮モードを採用するかどうかは、最終的な視覚効果の受け入れ程度次第で決定します。

---
##最適化アドバイス
アセットの最適化に対して、UWAからのアドバイスは、予防は救災よりも重要ということです。実行可能具体的な方法は次のとおりです。
>1、プロジェクトチームでアセット検出ツールを作成して（またはUnity Asset Storeで関連するアセット検出ツールを検索する）AnimationClipアセットのデータ情報を検察し、その圧縮形式とファイルサイズが適切かどうかを確認します。
>
2、プロジェクトでUWAパフォーマンス評価サービスを使用している場合、「具体的なアセット使用」インターフェイスでAnimationClipアセットのメモリ使用量とアニメーション時間などのパラメーターを確認でき、規則に合わないAnimationClipアセットを検出できます。
![6-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/a581c33f-def7-9795-c86f-e9f966757456.png)
>
3、プロジェクトでUWAアセット検出サービスを使用している場合、「アセット使用量」インターフェイスでAnimationClipアセットを確認でき、主に「Denseカーブ数」と「Streamカーブ数」に焦点を当てます。一般的に、Optimal圧縮モードをオンにしたAnimationClipアセットのみが「Denseカーブ数」を持ちます。
![7-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/9210bd5b-4384-5ef4-6b5a-20867563c453.png)

上記は、AnimationClipアセットがロードするときのパフォーマンステストです。ローディングモジュール にパフォーマンス問題について、UWAはその後ボイスアセットのローディングパフォーマンス 分析、アセットアンロードパフォーマンス分析、アセットインスタンス化パフォーマンス分析、異なるロード方法のパフォーマンス分析などのテクノロジー記事シリーズをだんだん投稿し、UWAがテストしたプロジェクトの共通問題をまとめし、皆さんがプロジェクトのローディング効率により深く理解できることを祈っております。

---
UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、**パフォーマンス分析**と**最適化ソリューション**及び**コンサルティングサービス**を提供している会社でございます。

今なら、UWA GOTローカルツールが**15日間に無償試用**できます！！
よければ、ぜひ！

UWA公式サイト：https://jp.uwa4d.com
UWA GOT OnlineレポートDemo：https://jp.uwa4d.com/u/got/demo.html
UWA公式ブログ：https://blog.jp.uwa4d.com