Read this in other languages: English, 日本語
AssetBundleからTextureを読み込むより、Texture2D.LoadRawTextureDataを利用して読み込む場合の方がどの程度早いか計測するためのプロジェクトです。
どちらも byte[]からの読み込みで実験しています。
/** Textureを生で読み込む場合 */
byte[] bin = ReadTextureRawData();
// ここから計測
Texture2D newTex = new Texture2D(2048, 2048, TextureFormat.ETC2_RGB, false);
newTex.LoadRawTextureData(bin);
newTex.Apply();
/** Textureを無圧縮のAssetBundleから読み込む場合 */
byte[] bin = ReadUncompressedAssetBundleData();
// ここから計測
AssetBundle assetBundle = AssetBundle.LoadFromMemory(bin);
var texture = assetBundle.Load<Texture2D>("testTexture");
AssetBundleのサイズや端末スペックによって効果が大きく変動してしまいますが、目安としては倍近く早くなりそうな結果になりました。
AssetBundleサイズが大きいほど、テクスチャのRawData読み込みによる高速化は薄れていきます。
SwitchPlatformで、Android もしくはiOSへと切り替えてください。
その後、メニューの"Tools/LoadTest/CreateData"を呼び出して実験用のデータを作成してください。
1)実験対象となるテクスチャのフォーマットやサイズ情報です。
2)読み込み時間の結果を表示する箇所です。"3)Speed Test"ボタンを押すことで結果が表示されます。
Ab:XXXXがAssetBundleからTextureを読み込むのにかかった時間。Raw:XXXXがテクスチャをRawDataから読み込むのにかかった時間
3)読み込みテストを開始するボタンです。
4)AssetBundleやRawDataからの読み込みがきちんとできているか確認するボタンです。結果は"5)のエリア"に表示されます
5)画像が正しく読み込めたか確認するためのフィールドです。
-
Assets/test.png
テストに使うTextureになります。こちらのImport設定等を自由に書き換えて実験してください。 -
Assets/StreamingAssets/android or Assets/StreamingAssets/ios
Android/iOS用の実験データの書き出し先です。
?メニューの"Tools/LoadTest/CreateData"を呼び出すことでデータが作成されます
?assetbundletest.ab がtest.pngのみを含むアセットバンドル。 ?test.data がTexture2DのRawData本体。 ?test.headerがTexture2Dの初期化に必要な情報になっています。
Unity 5.4.2p4 にてRealseビルドでテスト。
iOS/Android共にIL2CPPを利用。いくつかのテクスチャサイズ・フォーマットを試行。
?
? ?Nexus 7(2013) | Galaxy S6 | |||||
AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | |
一回目 | 0.002746582 | 0.000915273 | 3.0008 | 0.002131939 | 0.0006346703 | 3.3591 |
二回目 | 0.002288818 | 0.000579834 | 3.9473 | 0.002288818 | 0.0002727509 | 8.3916 |
三回目 | 0.003173828 | 0.000579834 | 5.4736 | 0.002044678 | 0.0003051758 | 6.7000 |
平均 | 0.0027364093333333 | 0.000691647 | 3.9563 | 0.002155145 | 0.000404199 | 5.3318 |
Nexus 7(2013) | Galaxy S6 | |||||
AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | |
一回目 | 0.04769897 | 0.01901245 | 2.5088 | 0.02588987 | 0.01347923 | 1.9207 |
二回目 | 0.04412842 | 0.01766968 | 2.4974 | 0.02895355 | 0.009040843 | 3.2025 |
三回目 | 0.04074097 | 0.01803589 | 2.2588 | 0.02000427 | 0.01112366 | 1.7983 |
平均 | 0.0441894533333333 | 0.01823934 | 2.4227 | 0.02494923 | 0.0112145776666667 | 2.2247 |
Nexus 7(2013) | Galaxy S6 | |||||
AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | |
一回目 | 0.4385681 | 0.2448425 | 1.7912 | 0.1509905 | 0.08346653 | 1.8089 |
二回目 | 0.4238892 | 0.2460327 | 1.7228 | 0.1455116 | 0.08004379 | 1.8178 |
三回目 | 0.4017029 | 0.2455139 | 1.6361 | 0.1482849 | 0.06974792 | 2.1260 |
平均 | 0.4213867333333333 | 0.2454630333333333 | 1.7167 | 0.1482623333333333 | 0.0777527466666667 | 1.9068 |
Nexus 7(2013) | Galaxy S6 | |||||
AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | |
一回目 | 0.6249084 | 0.4425659 | 1.4120 | 0.218586 | 0.1531868 | 1.4269 |
二回目 | 0.5959473 | 0.4623108 | 1.2890 | 0.1708069 | 0.1181488 | 1.4456 |
三回目 | 0.5961914 | 0.4640503 | 1.2847 | 0.1790771 | 0.1390076 | 1.2882 |
平均 | 0.6056823666666667 | 0.456309 | 1.3273 | 0.18949 | 0.1367810666666667 | 1.3853 |
iPhone5c | iPhone6S | |||||
AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | |
一回目 | 0.003101826 | 0.0008974075 | 3.4564 | 0.002513885 | 0.00008583069 | 29.2888 |
二回目 | 0.00340271 | 0.0009498596 | 3.5823 | 0.00252533 | 0.00008010864 | 31.5238 |
三回目 | 0.003250122 | 0.0007858276 | 4.1359 | 0.002304077 | 0.000114409 | 20.139 |
平均 | 0.0032515526666667 | 0.00087769823333333 | 3.70463 | 0.002447764 | 0.00009344 | 26.1961 |
iPhone5c | iPhone6S | |||||
AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | |
一回目 | 0.03134537 | 0.01697922 | 1.8461 | 0.01776981 | 0.009437561 | 1.8828 |
二回目 | 0.03353882 | 0.01564789 | 2.1433 | 0.01673889 | 0.01058197 | 1.5818 |
三回目 | 0.03235626 | 0.01696014 | 1.9077 | 0.01607513 | 0.009803772 | 1.6396 |
平均 | 0.0324134833333333 | 0.0165290833333333 | 1.9060 | 0.0168612766666667 | 0.009941101 | 1.696 |
iPhone5c | iPhone6S | |||||
AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | |
一回目 | 0.2029037 | 0.138443 | 1.4656 | 0.04005241 | 0.02583313 | 1.5504 |
二回目 | 0.2051926 | 0.1414261 | 1.4508 | 0.03764153 | 0.02333069 | 1.6133 |
三回目 | 0.1964493 | 0.1325378 | 1.4822 | 0.03736115 | 0.02357101 | 1.5850 |
平均 | 0.2015152 | 0.1374689666666667 | 1.4658 | 0.0383516966666667 | 0.0242449433333333 | 1.58184 |
?
? ?iPhone5c | iPhone6S | |||||
AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | AssetBundle読み込み(秒) | RawData読み込み(秒) | RawDataによる高速化(倍率) | |
一回目 | 0.3412313 | 0.2151585 | 1.5859 | 0.06794071 | 0.04671097 | 1.4544 |
二回目 | 0.3287811 | 0.2084236 | 1.5774 | 0.06585503 | 0.05086327 | 1.2947 |
三回目 | 0.3230667 | 0.2092361 | 1.5440 | 0.06612396 | 0.05685425 | 1.1630 |
平均 | 0.3310263666666667 | 0.2109393666666667 | 1.5692 | 0.0666399 | 0.0514761633333333 | 1.2945 |
Nexus7 2013 | Galaxy S6 | iPhone5c | iPhone6S | |
Texture2D.LoadRawData 2048×2048 RGBA32(mipmapなし) ファイルサイズ:16384KB |
0.2454630 秒 | 0.0777527 秒 | 0.1374689 秒 | 0.0242449 秒 |
AssetBundle 2048×2048 RGBA32(mipmapなし) ファイルサイズ:16384KB |
0.4213867 秒 | 0.1482623 秒 | 0.2015152 秒 | 0.0383516 秒 |
Texture2D.LoadRawData 2048×2048 RGBA32(mipmapあり) ファイルサイズ:21845KB |
0.456309 秒 | 0.1367810 秒 | 0.2109393 秒 | 0.0514761 秒 |
AssetBundle 2048×2048 RGBA32(mipmapなし) ファイルサイズ:16384KB |
0.6056823 秒 | 0.18949 秒 | 0.3310263 秒 | 0.066639 秒 |