このプロジェクトについて

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"を呼び出して実験用のデータを作成してください。

実行時の見方について

Alt text
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を利用。いくつかのテクスチャサイズ・フォーマットを試行。

結果データ@Android

32×32 ETC_RGB4(mipmapなし) ファイルサイズ:0.5KB

? ? ?

?

? ?

Nexus 7(2013) Galaxy S6
AssetBundle読み込み(秒)RawData読み込み(秒)RawDataによる高速化(倍率) AssetBundle読み込み(秒)RawData読み込み(秒)RawDataによる高速化(倍率)
一回目 0.0027465820.0009152733.0008 0.0021319390.00063467033.3591
二回目 0.0022888180.0005798343.9473 0.0022888180.00027275098.3916
三回目 0.0031738280.0005798345.4736 0.0020446780.00030517586.7000
平均 0.00273640933333330.0006916473.9563 0.0021551450.0004041995.3318
### 2048×2048 ETC_RGB4(mipmapなし) ファイルサイズ:2048KB
Nexus 7(2013) Galaxy S6
AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率) AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率)
一回目 0.047698970.019012452.5088 0.025889870.013479231.9207
二回目 0.044128420.017669682.4974 0.028953550.0090408433.2025
三回目 0.040740970.018035892.2588 0.020004270.011123661.7983
平均 0.04418945333333330.018239342.4227 0.024949230.01121457766666672.2247

2048×2048 RGBA32(mipmapなし) ファイルサイズ:16384KB

Nexus 7(2013) Galaxy S6
AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率) AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率)
一回目 0.43856810.24484251.7912 0.15099050.083466531.8089
二回目 0.42388920.24603271.7228 0.14551160.080043791.8178
三回目 0.40170290.24551391.6361 0.14828490.069747922.1260
平均 0.42138673333333330.24546303333333331.7167 0.14826233333333330.07775274666666671.9068

2048×2048 RGBA32(mipmapあり) ファイルサイズ:21845KB

Nexus 7(2013) Galaxy S6
AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率) AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率)
一回目 0.62490840.44256591.4120 0.2185860.15318681.4269
二回目 0.59594730.46231081.2890 0.17080690.11814881.4456
三回目 0.59619140.46405031.2847 0.17907710.13900761.2882
平均 0.60568236666666670.4563091.3273 0.189490.13678106666666671.3853

結果データ@iOS

32×32 PVRTC_RGB4(mipmapなし) ファイルサイズ:0.5KB

iPhone5c iPhone6S
AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率) AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率)
一回目 0.0031018260.00089740753.4564 0.0025138850.0000858306929.2888
二回目 0.003402710.00094985963.5823 0.002525330.0000801086431.5238
三回目 0.0032501220.00078582764.1359 0.0023040770.00011440920.139
平均 0.00325155266666670.000877698233333333.70463 0.0024477640.0000934426.1961

2048×2048 PVRTC_RGB4(mipmapなし) ファイルサイズ:2048KB

?
iPhone5c iPhone6S
AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率) AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率)
一回目 0.031345370.016979221.8461 0.017769810.0094375611.8828
二回目 0.033538820.015647892.1433 0.016738890.010581971.5818
三回目 0.032356260.016960141.9077 0.016075130.0098037721.6396
平均 0.03241348333333330.01652908333333331.9060 0.01686127666666670.0099411011.696

2048×2048 RGBA32(mipmapなし) ファイルサイズ:16384KB

iPhone5c iPhone6S
AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率) AssetBundle読み込み(秒) RawData読み込み(秒) RawDataによる高速化(倍率)
一回目 0.20290370.1384431.4656 0.040052410.025833131.5504
二回目 0.20519260.14142611.4508 0.037641530.023330691.6133
三回目 0.19644930.13253781.4822 0.037361150.023571011.5850
平均 0.20151520.13746896666666671.4658 0.03835169666666670.02424494333333331.58184

2048×2048 RGBA32(mipmapあり) ファイルサイズ:21845KB

? ? ?

?

? ?

iPhone5c iPhone6S
AssetBundle読み込み(秒)RawData読み込み(秒)RawDataによる高速化(倍率) AssetBundle読み込み(秒)RawData読み込み(秒)RawDataによる高速化(倍率)
一回目 0.34123130.21515851.5859 0.067940710.046710971.4544
二回目 0.32878110.20842361.5774 0.065855030.050863271.2947
三回目 0.32306670.20923611.5440 0.066123960.056854251.1630
平均 0.33102636666666670.21093936666666671.5692 0.06663990.05147616333333331.2945

端末別ロードテスト

Nexus7 2013Galaxy S6 iPhone5ciPhone6S
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 秒