Unityローディングモジュール詳細分析——AnimationClip編
前のテクノロジー記事で、UWAはローディングモジュールのTexture、Mesh、Shaderなどのアセットを分析して紹介しましたが、今日はその続きに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