アセットインポートパイプラインv2によりSwitch Platformがどれだけ早くなったのか検証しました。
Unity2019.4.1
アセットインポートパイプライン?
アセットインポートパイプラインとはテクスチャを各プラットフォームの圧縮形式に変換したりといったインポート時の処理を担う機能です。
Unity2019.3からこのアセットインポートパイプラインの大幅なアップデートバージョンであるv2がデフォルトで適用されるようになりました。
このアセットインポートパイプラインの切り替えはProject Settings > Editor
から行えます。
大きく変わった点として、各プラットフォーム用にアセットをコンバートした結果がキャッシュされる点があります。
例えばiOSではテクスチャをASTC形式で、AndroidではETC形式で扱う設定にしているとします。
従来のパイプラインではプラットフォームを切り替えるたびに各型式のテクスチャを同じファイル名で上書きで生成していました。
これに対して新しいパイプラインでは各プラットフォーム毎の生成結果が別のファイルとして生成されます。
生成結果が上書きされないので、二回目以降のプラットフォーム切り替え時にはすでに生成された結果を使うことができます。
本記事では実際にこれでどれくらいプラットフォーム切り替え速度が変わるのかを検証します。
検証方法
検証方法として、まずは検証用のテクスチャを用意しておきます。
適当に1024 * 1024のpngを100枚生成しておきます。
using System.IO; using UnityEditor; using UnityEngine; public class AssetDatabaseTest { [MenuItem("Assets/Asset Database Test/Create Textures")] public static void CreateTextures() { const int textureSize = 1024; var directory = Path.Combine("Assets", "Textures"); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } var colors = new Color[textureSize * textureSize]; for (var i = 0; i < textureSize * textureSize; i++) { colors[i] = Random.ColorHSV(); } for (var i = 0; i < 100; i++) { var texture = new Texture2D(textureSize, textureSize); texture.SetPixels(colors); var path = Path.Combine(directory, $"Test{i:0000}.png"); File.WriteAllBytes(path, texture.EncodeToPNG()); } AssetDatabase.Refresh(); } }
テクスチャを生成したら実際にプラットフォームを切り替えつつ時間を計測します。
using System.Diagnostics; using UnityEditor; using Debug = UnityEngine.Debug; public class AssetDatabaseTest { [MenuItem("Assets/Asset Database Test/Switch Platform iOS")] private static void SwitchPlatformIos() { SwitchPlatform(BuildTarget.iOS); } [MenuItem("Assets/Asset Database Test/Switch Platform Android")] private static void SwitchPlatformAndroid() { SwitchPlatform(BuildTarget.Android); } public static void SwitchPlatform(BuildTarget target) { var sw = new Stopwatch(); sw.Start(); EditorUserBuildSettings.SwitchActiveBuildTarget(target); Debug.Log(sw.Elapsed); } }
計測はiOSからAndroidに切り替える時間を1回目(キャッシュなし)、2回目(キャッシュあり)に分けて行います。
またこれをアセットインポートパイプラインv1とv2の両方について検証します。
結果
測定結果は以下の通りです。
バージョン | 回数 | 時間 |
---|---|---|
v1 | 1回目 | 00:01:26.9964149 |
v1 | 2回目 | 00:01:27.4516955 |
v2 | 1回目 | 00:01:26:5578332 |
v2 | 2回目 | 00:00:00.6730088 |
v1は2回目も1回目と同じくらいの時間が掛かっているのに対し、
v2は二回目以降とても速くなっていることが確認できました。
参考
https://www.youtube.com/watch?v=Bsn6a91Eqwo&feature=emb_logo