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

前のテクノロジー記事で、UWAはローディングモジュールのTextureMeshShaderなどのアセットを分析して紹介しましたが、今日はその続きにAnimationClipローディングに関する事項について話しましょう。


アセットローディングパフォーマンステスト用コード

前の記事で提出したテストコードと同様に、AnimationClipアセットのローディングパフォーマンス分析にもこのテストコードを採用します。各AnimationClipファイルを特定サイズのAssetBundleファイルに作成し、下記のコードを介して異なるデバイスに1つずつローディングを行います。異なるデバイスのアセットローディングパフォーマンスを取得して比較します。

テスト環境

エンジンバージョン: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圧縮)を自動的に選択する」ことを意味します。

注: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になります。

 

テストグループ2

30個の「NoneCompression」アセット、30個の「KeyframeReduction」アセット、および30個の「Optimal」アセットをAssetBundleファイルにパッケージ化した後、ファイルサイズはそれぞれ1.42MB、514KB、および312KBになります。

 

テストグループ3

50個の「NoneCompression」アセット、50個の「KeyframeReduction」アセット、および50個の「Optimal」アセットをAssetBundleファイルにパッケージ化した後、ファイルサイズはそれぞれ2.46MB、858KB、および525KBになります。

上記のテストを通じて、次のような結論を取得することができます。

1、Optimal圧縮方法は、ハイエンド、ミドルエンド、またはローエンドデバイスのいずれであっても、確かにアセットのローディング効率を向上できます。

2、ハードウェアデバイスのパフォーマンスが優れているほど、ローディング効率が高くなります。しかし、デバイスの改善により、Keyframe ReductionとOptimalのローディング効率改善がもう明白ではなくなります。

3、Optimal圧縮の方式は、アニメーションの視覚的な品質を低下させる可能性があります。ですから、最後にOptimal圧縮モードを採用するかどうかは、最終的な視覚効果の受け入れ程度次第で決定します。


最適化アドバイス

アセットの最適化に対して、UWAからのアドバイスは、予防は救災よりも重要ということです。実行可能具体的な方法は次のとおりです。

1、プロジェクトチームでアセット検出ツールを作成して(またはUnity Asset Storeで関連するアセット検出ツールを検索する)AnimationClipアセットのデータ情報を検察し、その圧縮形式とファイルサイズが適切かどうかを確認します。

2、プロジェクトでUWAパフォーマンス評価サービスを使用している場合、「具体的なアセット使用」インターフェイスでAnimationClipアセットのメモリ使用量とアニメーション時間などのパラメーターを確認でき、規則に合わないAnimationClipアセットを検出できます。

3、プロジェクトでUWAアセット検出サービスを使用している場合、「アセット使用量」インターフェイスでAnimationClipアセットを確認でき、主に「Denseカーブ数」と「Streamカーブ数」に焦点を当てます。一般的に、Optimal圧縮モードをオンにしたAnimationClipアセットのみが「Denseカーブ数」を持ちます。

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


UWA公式サイト:https://jp.uwa4d.com

UWA公式ブログ:https://blog.jp.uwa4d.com

UWA公式Q&Aコミュニティ(中国語注意)https://answer.uwa4d.com